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. OS シェル コマンドラインから次のコマンドを実行してpyuic4を使用し、 MyWidget.uiファイルをUi_MyWidget.pyにコンパイルします。

    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 ファイルをチェックアウトします)、OS シェル コマンドライン CD からpyinstallerディレクトリに移動します。次のコマンドを実行します。

    python pyinstaller.py --onefile '/path/to/MyWidget.py'
    
  5. pyinstallerフォルダーでMyWidgetというフォルダーを探します。distフォルダー内には、スタンドアロンの Qt アプリがあります。

于 2012-12-27T10:33:03.347 に答える