Python 集成GUI的正确方法
我有一个问题一直萦绕在我的脑海里 假设我已经使用Qt designer设计了GUI,因此我会将Python 集成GUI的正确方法,python,inheritance,pyqt,qmainwindow,Python,Inheritance,Pyqt,Qmainwindow,我有一个问题一直萦绕在我的脑海里 假设我已经使用Qt designer设计了GUI,因此我会将.iu文件转换为.py文件,如下所示: pyuic4 mainGUI.ui-o mainGUI.py 所以现在,如果我这样做,我就有了访问小部件等所需的一切 main.py文件: from PyQt4 import QtGui from mainGUI import Ui_mainGUI class MyMainWindow(Ui_mainGUI): def __init__(self, *
.iu
文件转换为.py文件,如下所示:
pyuic4 mainGUI.ui-o mainGUI.py
所以现在,如果我这样做,我就有了访问小部件等所需的一切
main.py文件:
from PyQt4 import QtGui
from mainGUI import Ui_mainGUI
class MyMainWindow(Ui_mainGUI):
def __init__(self, *args, **kwargs)
super(MyMainWindow, self).__init__(*args, **kwargs)
self.setupUi(self)
import numpy as np
import pandas as pd
class worker():
def sum2numbers(self, a,b):
return a+b
....
....
我现在的问题是,如果我在另一个.py
文件中有所有所谓的工人类
,我如何将所有这些集成在一起,使我的GUI显示结果,或显示进度等诸如此类的东西
worker类的一个简单快速示例:
myworker.py文件:
from PyQt4 import QtGui
from mainGUI import Ui_mainGUI
class MyMainWindow(Ui_mainGUI):
def __init__(self, *args, **kwargs)
super(MyMainWindow, self).__init__(*args, **kwargs)
self.setupUi(self)
import numpy as np
import pandas as pd
class worker():
def sum2numbers(self, a,b):
return a+b
....
....
是否应
类MyMainWindow
继承??我有点困惑:只需将工人类模块导入主文件并在那里使用它。您的MyMainWindow
类还应该继承QMainWindow
,这样您就可以访问所有底层的Qt小部件方法。以您的例子:
from PyQt4 import QtGui
from mainGUI import Ui_mainGUI
from myworker import worker
class MyMainWindow(QMainWindow, Ui_mainGUI):
def __init__(self, *args, **kwargs)
super(MyMainWindow, self).__init__(*args, **kwargs)
self.setupUi(self)
很好地解释了将Ui文件与主辅助文件连接的方法,其中,YourFormName
是从Ui创建的文件的名称。我个人更喜欢该链接中所述的单一继承
,这样您就可以随时更改Ui文件,而不会影响主工作文件。这就是我要做的
from Your_ui import Ui_MainWindow
import sys
from PyQt4 import QtGui,QtCore
class Worker(QtGui.QMainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.ui = Ui_MainWindow() #Creating your Ui object
self.ui.setupUi(self) #calling your Ui.
#use a function if you want to modify your ui that designer doesn't provide....
self.my_worker_stuff()
def my_worker_stuff(self):
#Now you can access your Ui widgets using the 'self.ui'
#for eg.
myText = self.ui.lineEdit.text()
下面是您的\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
的外观
if __name__== '__main__':
app = QtGui.QApplication(sys.argv)
worker = Worker()
worker.show()
sys.exit(app.exec_())
谢谢,我知道有一些选择,是“更好”还是“标准”的方法?还是只取决于程序员喜欢什么?取决于你的需要。例如,如果要将应用程序连接到数据库,则可以创建一个单独的文件,并在worker类中调用GUI和数据库类。在最基本的层面上,这一切都与偏好有关。我不确定在高水平上它们之间有什么优势。但是从我的理解来看,它们几乎是一样的。谢谢,我看到有一些不同的选择,我只是想知道这是标准的方法还是取决于程序员的偏好如果你觉得其中任何一个答案都有帮助,你介意给出一个最好的答案吗!