我一直在寻找一种更好的方法来处理使用连接到python后端的qtDesigner制作的前端。我找到的所有方法都有以下形式:
-x
选项)这种方法不易维护或编辑。每当您更改UI时,它都会完全打破工作流程:您必须重新转换,生成新文件,将该文件修复回原来的位置,然后最终恢复正常。这需要大量手动复制粘贴代码,这是对多个级别上的错误的邀请(新生成的文件布局可能不一样,在粘贴时手动修改名称更改等)。如果您不小心,也可能最终失去工作,因为您可能会意外覆盖该文件并破坏后端代码。
此外,这不使用qtDesigner中的任何控件,例如Signal/Slot
和Action
编辑器。这些必须在这里,但我找不到实际指导它们来调用后端函数的方法。
是否有更好的方法可以使用qtDesigner的功能?
答案 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中会有所不同(也可能更早)。