【问题标题】:How to access GUI elements from another thread in PyQt如何从 PyQt 中的另一个线程访问 GUI 元素
【发布时间】:2013-05-30 22:41:55
【问题描述】:

我正在尝试创建一个客户端-服务器应用程序,当服务器关闭时,我希望该客户端 GUI 关闭,它正在另一个线程上运行。我希望访问 GUI 并关闭,但出现 X 错误:

错误的实现(...)。

我该如何解决这个问题?

【问题讨论】:

    标签: python multithreading pyqt


    【解决方案1】:

    你可以做的是在第一个线程宕机时发出一个自定义信号..

    from PyQt4 import QtGui as gui
    from PyQt4 import QtCore as core
    
    import sys
    import time
    
    
    class ServerThread(core.QThread):
        def __init__(self, parent=None):
            core.QThread.__init__(self)
    
        def start_server(self):
            for i in range(1,6):
                time.sleep(1)
                self.emit(core.SIGNAL("dosomething(QString)"), str(i))
    
        def run(self):
            self.start_server()
    
    
    class MainApp(gui.QWidget):
        def __init__(self, parent=None):
            super(MainApp,self).__init__(parent)
    
            self.label = gui.QLabel("hello world!!")
    
            layout = gui.QHBoxLayout(self)
            layout.addWidget(self.label)
    
            self.thread = ServerThread()
            self.thread.start()
    
            self.connect(self.thread, core.SIGNAL("dosomething(QString)"), self.doing)
    
        def doing(self, i):
            self.label.setText(i)
            if i == "5":
                self.destroy(self, destroyWindow =True, destroySubWindows = True)
                sys.exit()
    
    
    app = gui.QApplication(sys.argv)
    form = MainApp()
    form.show()
    app.exec_()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 2017-05-06
      相关资源
      最近更新 更多