无缝地使用qtDesigner与python

时间:2018-04-17 18:16:54

标签: python qt-designer

我一直在寻找一种更好的方法来处理使用连接到python后端的qtDesigner制作的前端。我找到的所有方法都有以下形式:

  1. 在设计师中制作GUI
  2. 使用pyuic(通常使用-x选项)
  3. 输出到python代码
  4. 在此输出文件中写入后端代码
  5. 这种方法不易维护或编辑。每当您更改UI时,它都会完全打破工作流程:您必须重新转换,生成新文件,将该文件修复回原来的位置,然后最终恢复正常。这需要大量手动复制粘贴代码,这是对多个级别上的错误的邀请(新生成的文件布局可能不一样,在粘贴时手动修改名称更改等)。如果您不小心,也可能最终失去工作,因为您可能会意外覆盖该文件并破坏后端代码。

    此外,这不使用qtDesigner中的任何控件,例如Signal/SlotAction编辑器。这些必须在这里,但我找不到实际指导它们来调用后端函数的方法。

    是否有更好的方法可以使用qtDesigner的功能?

2 个答案:

答案 0 :(得分:0)

您不必在输出文件中添加代码:

如果您使用由PYUIC生成的'home.py',其中包含由QtDesigner设置的/由Puic生成的QMainWindow将是Ui_Home(),您的主要代码可能是:

ReferenceToButton.Select()

答案 1 :(得分:0)

我找到了一种更清晰的方法来处理这个问题,根本不需要在每次编辑后进行抢先转换。相反,它需要.ui文件本身,所以你需要做的就是重新启动程序本身来更新设计。

import sys
import os
from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5 import uic

path = os.path.dirname(__file__) #uic paths from itself, not the active dir, so path needed
qtCreatorFile = "XXXXX.ui" #Ui file name, from QtDesigner, assumes in same folder as this .py

Ui_MainWindow, QtBaseClass = uic.loadUiType(path + qtCreatorFile) #process through pyuic

class MyApp(QMainWindow, Ui_MainWindow): #gui class
    def __init__(self):
        #The following sets up the gui via Qt
        super(MyApp, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)

        #set up callbacks
        self.ui.NAME OF CONTROL.ACTION.connect(self.test)

    def test(self):
        #Callback Function


if __name__ == "__main__":
    app = QApplication(sys.argv) #instantiate a QtGui (holder for the app)
    window = MyApp()
    window.show()
    sys.exit(app.exec_())

请注意,这是Qt5。 Qt5和Qt4不兼容API,因此在Qt4中会有所不同(也可能更早)。