正确的GUI集成方式

时间:2015-07-29 14:42:49

标签: python inheritance pyqt qmainwindow

我有一个问题已经存在了一段时间。

让我们说我用Qt设计器设计了我的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, *args, **kwargs)
        super(MyMainWindow, self).__init__(*args, **kwargs)
        self.setupUi(self)

我现在的问题是,如果我在另一个worker class文件中拥有所有我所谓的.py,我如何将所有这些整合在一起以使我的GUI显示结果,或显示进度等所有这些thigs。

一个简单快速的工人类示例:

myworker.py文件:

import numpy as np
import pandas as pd

class worker():
    def sum2numbers(self, a,b):
        return a+b
    ....
    ....

class MyMainWindow应该继承吗?我有点困惑:

2 个答案:

答案 0 :(得分:1)

只需将您的工人类模块导入主文件并在那里使用它。您的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)

答案 1 :(得分:1)

This Link here很好地解释了将Ui文件与主工作文件连接的方法,其中YourFormName是您从UI创建的文件的名称。我个人更喜欢该链接中声明的single inheritence,然后您可以随时更改您的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()

以下是__main__的外观

if __name__== '__main__':
    app = QtGui.QApplication(sys.argv)
    worker = Worker()
    worker.show()
    sys.exit(app.exec_())