如何编写多线程 Pyside 应用程序

How to write a multi-threaded Pyside application

多线程 Pyside 应用程序的最简单方法是什么,这样 GUI 就可以运行并且线程仍然 运行? 线程 class:

class MyLongThread(QThread):
        def __init__(self, parent = None):
            QThread.__init__(self, parent)
            self.exiting = False 

        def run(self):
            while 1:
                self.msleep(100)
                print("run")

完成.pyw

import sys,time
from PySide.QtGui import *
from PySide.QtCore import *
from PySide.QtWebKit import *
def thread():
    global threade
    threade = MyLongThread()
    threade.run()

def thread_terminate():
    global threade
    threade.terminate()    

class MyLongThread(QThread):
        def __init__(self, parent = None):
            QThread.__init__(self, parent)
            self.exiting = False 

        def run(self):
            while 1:
                self.msleep(100)
                print("run")
app = QApplication(sys.argv)

wid = QWidget()
wid.resize(250, 400)
wid.setWindowTitle('Threaded Program')
#wid.setWindowIcon(QIcon('web.png'))
#### BUTTONS
btn = QPushButton('Stop', wid)
btn.setToolTip('Stop the thread.') ## Stop the thread
btn.resize(btn.sizeHint())
btn.move(147, 50)
btn.clicked.connect(thread_terminate)
qbtn = QPushButton('Start', wid)
qbtn.setToolTip('Start the thread.') ## End the Thread
qbtn.resize(btn.sizeHint())
qbtn.move(27, 50)
qbtn.clicked.connect(thread)
####


#### LABEL
label = QLabel('Start The Thread :)',wid)
label.resize(label.sizeHint())
label.move(28, 15)
####

wid.show()

sys.exit(app.exec_())

当我 运行 代码并按下开始按钮时,它冻结了 gui 但打印 运行。

不要直接调用thread.run(),因为这会在主线程中执行该方法。相反,调用 thread.start() 将启动一个线程并开始在线程中执行您的 run() 方法。