使用QThread的PyQt4多线程

| 在
QThread
中调用
xml.etree.ElementTree.fromstring()
函数时,会出现无限循环。同样,许多其他调用也使QThread像
multiprocessing.Process()
一样被阻塞。 重要的是要说它是一个纯块,没有例外或中断。 这是代码(经过少许编辑,但原理与源代码相同):
from PyQt4.QtGui import *
from Ui_mainwindow import Ui_MainWindow
import sys
import xml.etree

class Bruton(QThread):
    def __init__(self, mw):
        super(Bruton, self).__init__(mw) 
        self.mw = mw

    def run(self):
        print(\"This message I see.\")
        tree = xml.etree.ElementTree.fromstring(\"<element>text</element>\")
        print(\"But this one never.\")

class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.init_bruton()

    # When the form is shown...
    def showEvent(self, arg1):
        self.bruton.start()

    def init_bruton(self):
        self.bruton = Bruton(self)

app = QApplication(sys.argv)
mw = MainWindow()
mw.show()
sys.exit(app.exec_())
    
已邀请:
所发布的代码实际上并未运行,但是进行了一些较小的更改后,它可以正常运行。这是经过修改的代码:
from PyQt4.QtGui import *
from PyQt4.QtCore import *
import sys
import xml.etree.ElementTree

class Bruton(QThread):
    def __init__(self, mw):
        super(Bruton, self).__init__(mw)
        self.mw = mw

    def run(self):
        print(\"This message I see.\")
        tree = xml.etree.ElementTree.fromstring(\"<element>text</element>\")
        print(\"But this one never.\")

class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.init_bruton()

    # When the form is shown...
    def showEvent(self, arg1):
        self.bruton.start()

    def init_bruton(self):
        self.bruton = Bruton(self)

app = QApplication(sys.argv)
mw = MainWindow()
mw.show()
sys.exit(app.exec_())
这是输出:
$ python test.py 
This message I see.
But this one never.
这是在Debian Unstable上的Python 2.6.6,PyQt4 4.8.3中使用的。 您可以在您的环境中尝试一下,看看我的修改后的示例是否适合您?如果是这样,那么您正在为您的真实代码提供解决方案。 =)     
我在这里显示的代码被缩短了(源代码分为两个文件和
__ini__.py
)。我注意到主模块必须是启动ѭ7的模块。因此,我在程序的主要模块ѭ9中添加了
app.exec_()
。     

要回复问题请先登录注册