首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中并行运行两个GUI?

如何在Python中并行运行两个GUI?
EN

Stack Overflow用户
提问于 2018-06-24 17:31:07
回答 2查看 1K关注 0票数 0

我们讨论的是python2.7和PyQt4。

我正在使用一个名为PyCorder的开源程序进行脑电分析,该程序接收系统电极放大器的数据,并将其绘制成图形用户界面;出于这个问题的目的,我们可以将其视为黑匣子。我用Qt设计器实现了一个简单的接口。我的目标是同时运行PyCorder和我的接口,以便它们之间可以交换数据。

在这里,启动我的接口的代码行:

代码语言:javascript
复制
if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

我想与Qt设计器所做的任何接口都是常见的;下面是PyCorder启动部分:

代码语言:javascript
复制
def main(args):

    print "Starting PyCorder, please wait ...\n"
    setpriority(priority=4)
    app = Qt.QApplication(args)
    try:
        win = None
        win = MainWindow()
        win.showMaximized()
        if ShowConfirmationDialog:
            accept = Qt.QMessageBox.warning(None, "PyCorder Disclaimer", ConfirmationText, 
                                            "Accept", "Cancel", "", 1)
            if accept == 0:
                win.usageConfirmed = True
                app.exec_()
            else:
                win.close()
        else:
            win.usageConfirmed = True
            app.exec_()
    except Exception as e:
        tb = GetExceptionTraceBack()[0]
        Qt.QMessageBox.critical(None, "PyCorder", tb + " -> " + str(e))
        if win != None:
            win.close()

    # show the battery disconnection reminder
    if ShowBatteryReminder and win and win.usageConfirmed:
        DlgBatteryInfo().exec_()

    print "PyCorder terminated\n"


if __name__ == '__main__':
    main(sys.argv)

只知道这两部份的守则是否足以回答我的问题?有什么工具箱可以帮助我达到目标吗?

EN

回答 2

Stack Overflow用户

发布于 2018-06-24 17:55:06

我认为最好的方法是使用多个处理库来多次运行QT。https://docs.python.org/2/library/multiprocessing.html#module-multiprocessing是您可以使用的库之一。

票数 0
EN

Stack Overflow用户

发布于 2018-06-24 21:58:44

有很多方法可以做到这一点,但我更喜欢使用中央“窗口管理器”充当两个窗口的所有者和通信中心。下面是该技术的示例,需要根据您的需要进行调整。注意,我使用的是Qt5。我在Qt5上进行了测试,然后尝试在不进行测试的情况下将其转换为Qt4。这应该是对的,但可能需要一点推特。

代码语言:javascript
复制
from PyQt4 import QtCore, QtGui

class WindowManager(QtCore.QObject):
    """ 
    Inheriting from QObject has benefits.
    For instance, the WindowManager can not have pyQtSignal members, if needed
    """
    def __init__(self):
        super(WindowManager, self).__init__()
        self.firstWindow = FirstWindow(self)
        self.secondWindow = SecondWindow(self)
        self.firstWindow.show()
        self.secondWindow.show()

class FirstWindow(QtGui.QMainWindow):
    def __init__(self, manager):
        super(FirstWindow, self).__init__()
        self.manager = manager
        self.mainWidget = QtGui.QWidget()
        self.setCentralWidget(self.mainWidget)
        self.mainLayout = QtGui.QVBoxLayout(self.mainWidget)
        self.clickyButton = QtGui.QPushButton("Click me")
        self.mainLayout.addWidget(self.clickyButton)
        self.clickyButton.clicked.connect(self.clickyButtonClicked)
    def clickyButtonClicked(self, checked=None):
        self.manager.secondWindow.setMessage("Clicky button clicked")

class SecondWindow(QtGui.QMainWindow):
    def __init__(self, manager):
        super(SecondWindow, self).__init__()
        self.manager = manager
        self.mainWidget = QtGui.QWidget()
        self.setCentralWidget(self.mainWidget)
        self.mainLayout = QtGui.QVBoxLayout(self.mainWidget)
        self.messageBox = QtGui.QLabel()
        self.mainLayout.addWidget(self.messageBox)
    def setMessage(self, message):
        self.messageBox.setText(message)

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    manager = WindowManager()
    sys.exit(app.exec_())
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51012350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档