2

我在 Qt Designer 中创建了一个表单模型,现在我想将表单保存为(exe?)文件,以便它可以在计算机上运行。

我会使用“Python to Exe”吗(如果是,如何)?我对编程还不是很了解。

Qt Designer 以 .ui 扩展名保存文件。

4

1 回答 1

2

要使用PyInstaller创建独立应用程序,请执行以下步骤:

  1. 将此代码保存为您的MyWidget.ui文件:

    <?xml version="1.0" encoding="UTF-8"?>
    <ui version="4.0">
     <class>MainWindow</class>
     <widget class="QMainWindow" name="MainWindow">
      <property name="geometry">
       <rect>
        <x>0</x>
        <y>0</y>
        <width>147</width>
        <height>125</height>
       </rect>
      </property>
      <property name="windowTitle">
       <string>MainWindow</string>
      </property>
      <widget class="QWidget" name="centralwidget">
       <layout class="QVBoxLayout" name="verticalLayout">
        <item>
         <widget class="QLineEdit" name="lineEdit"/>
        </item>
        <item>
         <widget class="QPushButton" name="pushButton">
          <property name="text">
           <string>Click Me</string>
          </property>
         </widget>
        </item>
       </layout>
      </widget>
      <widget class="QMenuBar" name="menubar">
       <property name="geometry">
        <rect>
         <x>0</x>
         <y>0</y>
         <width>147</width>
         <height>25</height>
        </rect>
       </property>
       <widget class="QMenu" name="menuMenu">
        <property name="title">
         <string>Menu</string>
        </property>
       </widget>
       <addaction name="menuMenu"/>
      </widget>
      <widget class="QStatusBar" name="statusbar"/>
     </widget>
     <resources/>
     <connections/>
    </ui>
    
  2. 使用 pyuic4 将您的 MyWidget.ui 文件编译为 Ui_MyWidget.py,并使用OS shell命令的以下命令:

    pyuic4 "/path/to/MyWidget.ui" -o "Ui_MyWidget.py"
    

    此命令将在您的当前目录中创建一个Ui_MyWidget.py文件,其中包含以下内容:

    # -*- coding: utf-8 -*-
    
    # Form implementation generated from reading ui file 'MyWidget.ui'
    #
    # Created: Fri Dec 28 03:45:13 2012
    #      by: PyQt4 UI code generator 4.7.3
    #
    # WARNING! All changes made in this file will be lost!
    
    from PyQt4 import QtCore, QtGui
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(147, 125)
            self.centralwidget = QtGui.QWidget(MainWindow)
            self.centralwidget.setObjectName("centralwidget")
            self.verticalLayout = QtGui.QVBoxLayout(self.centralwidget)
            self.verticalLayout.setObjectName("verticalLayout")
            self.lineEdit = QtGui.QLineEdit(self.centralwidget)
            self.lineEdit.setObjectName("lineEdit")
            self.verticalLayout.addWidget(self.lineEdit)
            self.pushButton = QtGui.QPushButton(self.centralwidget)
            self.pushButton.setObjectName("pushButton")
            self.verticalLayout.addWidget(self.pushButton)
            MainWindow.setCentralWidget(self.centralwidget)
            self.menubar = QtGui.QMenuBar(MainWindow)
            self.menubar.setGeometry(QtCore.QRect(0, 0, 147, 25))
            self.menubar.setObjectName("menubar")
            self.menuMenu = QtGui.QMenu(self.menubar)
            self.menuMenu.setObjectName("menuMenu")
            MainWindow.setMenuBar(self.menubar)
            self.statusbar = QtGui.QStatusBar(MainWindow)
            self.statusbar.setObjectName("statusbar")
            MainWindow.setStatusBar(self.statusbar)
            self.menubar.addAction(self.menuMenu.menuAction())
    
            self.retranslateUi(MainWindow)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
        def retranslateUi(self, MainWindow):
            MainWindow.setWindowTitle(QtGui.QApplication.translate("MainWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
            self.pushButton.setText(QtGui.QApplication.translate("MainWindow", "Click Me", None, QtGui.QApplication.UnicodeUTF8))
            self.menuMenu.setTitle(QtGui.QApplication.translate("MainWindow", "Menu", None, QtGui.QApplication.UnicodeUTF8))
    
  3. 将此代码保存为您的MyWidget.py文件:

    #!/usr/bin/env python
    #-*- coding:utf-8 -*-
    
    from PyQt4 import QtCore, QtGui
    from Ui_MyWidget import Ui_MainWindow
    
    class MyWidget(QtGui.QMainWindow, Ui_MainWindow):
        def __init__(self, parent=None):
           super(MyWidget, self).__init__(parent)
    
           self.setupUi(self)
    
        @QtCore.pyqtSlot()
        def on_pushButton_clicked(self):
            self.lineEdit.setText("A Qt standalone app!")
    
    if __name__ == '__main__':
        import sys
    
        app = QtGui.QApplication(sys.argv)
        window = MyWidget()
        window.resize(300, 30)
        window.show()
        sys.exit(app.exec_())
    
  4. 检查您是否可以无错误地运行MyWidget.pyMyWidget.pyUi_MyWidget.py需要在同一个文件夹中),并在完成配置PyInstaller(检查 README 文件)后从 OS shell 命令行 cd 到pyinstaller目录并运行此命令:

    python pyinstaller.py --onefile '/path/to/MyWidget.py'
    
  5. 在 pyinstaller 文件夹中查找名为 MyWidget 的文件dist文件夹中是您的独立 Qt 应用程序。

于 2012-12-27T10:33:03.347 回答