2012-12-27 20 views
1

我在Qt Designer中创建了一个窗体模型,现在我想将窗体保存为(exe?)文件,以便它可以在计算机上运行。如何从Qt Designer保存表单作为独立应用程序?

我会用 '的Python为EXE'(如果是,如何)?我对编程知之甚少。

Qt Designer保存带有.ui扩展名的文件。

+1

http://qt-project.org/forums/viewthread/4535 – CppLearner

+0

我也发现了这一点,但不知道如何做的.ui为Pyinstaller一个的.py http://stackoverflow.com/questions/5888870/how-do-i-compile-a-pyqt-script-py-to-a-single-standalone-executable-file-for –

+0

you can not。你需要编码。 Ui只是前端。没有逻辑。编码。 – CppLearner

回答

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. 编译您MyWidget.ui文件到Ui_MyWidget.py使用pyuic4与您的操作系统的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.py没有错误(MyWidget.pyUi_MyWidget.py需要在同一个文件夹),做一次从你的操作系统配置PyInstaller(签README文件) shell命令行光盘插入pyinstaller目录并运行此命令:

    python pyinstaller.py --onefile '/path/to/MyWidget.py' 
    
  5. 寻找所谓进myWidget在pyinstaller文件夹,里面的dist文件夹是你独立的Qt应用程序。

+0

太棒了! ...不知道它是否还能正常工作,我在第一部分不断收到语法错误。我试过把每个部分的完整路径(C:\ python27 \ etcetc)。错误似乎在“file_input”部分。 –

+0

@DuhCompewtuhr你可以用你正在使用的代码更新你的文章吗?请考虑upvoting和/或接受我的答案,如果它有任何帮助 – 2012-12-27 19:55:11

+0

我很高兴有这个问题的答案,但我还没有能够检查它,因为我是这样一个新手:( 这是我已经尝试了很多不同的组合。 >>> C:\ Python27 \ Lib \ site-packages \ PyQt4 \ pyuic4.bat C:\ MyWidget.ui -o C:\ Ui_MyWidget.py 文件 “”,1号线 C:\ Python27 \ LIB \站点包\ PyQt4的\ pyuic4.bat C:\ MyWidget.ui -o C:\ Ui_MyWid get.py ^ SyntaxError:invalid syntax >>> (对不起,我似乎无法得到fo rmatting与这些评论一起工作) –