Python 编译/更新PyQt.py文件

Python 编译/更新PyQt.py文件,python,pyqt,pyuic,Python,Pyqt,Pyuic,我是PyQt的新手,所以请在这里耐心等待 我用Qt设计器创建一个小部件,然后编译它并将其另存为.py。我编辑.py文件以添加一些附加功能。但是我需要回到Qt设计器并更新GUI的布局。是否有一种方法可以编译该文件,然后使用更改更新原始.py文件,而不必手动复制/粘贴我的自定义代码?如果查看生成文件顶部的注释,您将看到以下行: # WARNING! All changes made in this file will be lost! 这很清楚地表明,该文件不是要编辑的。但这不是问题,因为它只是一

我是PyQt的新手,所以请在这里耐心等待


我用Qt设计器创建一个小部件,然后编译它并将其另存为.py。我编辑.py文件以添加一些附加功能。但是我需要回到Qt设计器并更新GUI的布局。是否有一种方法可以编译该文件,然后使用更改更新原始.py文件,而不必手动复制/粘贴我的自定义代码?

如果查看生成文件顶部的注释,您将看到以下行:

# WARNING! All changes made in this file will be lost!
这很清楚地表明,该文件不是要编辑的。但这不是问题,因为它只是一个普通的python模块,所以很容易将其导入主应用程序并从主应用程序访问它

您只需从Qt Designer创建顶级对象的子类(它将是
QMainWindow
QDialog
QWidget
),然后使用生成的模块提供的
setupUi
方法将所有小部件添加到该子类的实例中

因此,如果Qt Designer中的顶级对象被命名为“MainWindow”,pyuic将创建一个相应的
Ui\u MainWindow
类,该类可以导入到
main.py
脚本中,并使用如下内容:

from PyQt4 import QtCore, QtGui
from myui import Ui_MainWindow

class Window(QtGui.QMainWindow):
    def __init__(self):
        QtGui.QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.button.clicked.connect(self.handleButton)

    def handleButton(self):
        print('Hello World!')

if __name__ == '__main__':

    import sys
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

有关更多详细信息,请参阅。

就我个人而言,我讨厌编译它。但是就像Ekhumaro说的,你可以导入这个类。不过我还是不喜欢这个
pyuic
有时会导入讨厌的
example\u rc
东西,这又会降低生产率水平。如果您必须将
.ui
转换为
.py
,请创建一个
.bat
文件来为您执行此操作。代码:

@ECHO OFF
cd [directory of choice]
pyuic[4/5, depends on pyqt] -x example.ui -o example.py

或者你的操作系统有什么。我个人喜欢使用
ui=uic.loadUi('example.ui')
,然后使用
ui.setupUi()
。它让你的工作效率大大提高

通过直接将
Ui\u MainWindow
子类化并调用
Ui\u MainWindow.\uu初始化(self)
作为它调用
setupUi()
的方式,你能实现同样的效果吗?@三个菠萝。是的,有几种不同的方法来实现相同的目标,这些都在PyQt文档中概述(我现在在回答中链接到了这些文档)。我认为我的答案中的方法更纯粹是合成的,但我实际上并没有在我自己的代码中使用它(实际上,这只是品味的问题)。