无法终止PyQT QThread

问题描述 投票:1回答:1

这个问题与我的previous one有关

问题发生在我在Alpha to Gamma项目之间切换太快。 run()GenericThread方法无法完成它的循环而没有错误,因为当我在List1项目之间切换时,给它的信息会发生变化

我添加了exeptions,但这不是这种情况下最好的解决方法,我必须终止线程,如果它正在运行然后再次启动它,但是当我终止它时,GUI冻结永远(但它不像它冻结所有的在切换项目之间的时间,有时候self.terminate()有时不会工作并冻结我无法找到原因)...

class GenericThread(QtCore.QThread):
    def __init__(self, parent=None):
        QtCore.QThread.__init__(self, parent)

    def stop(self):
        self.terminate()

    def __del__(self):
        self.quit()
        self.wait()

    def run(self):
        #Some very long stuff
        self.emit( QtCore.SIGNAL('itemSelectionChanged()'))
        return

class MainUI(QtGui.QMainWindow):
    def __init__(self, parent=None):
        QtGui.QMainWindow.__init__(self)
        self.ui = Ui_Win()
        self.ui.setupUi(self)

        self.genericThread = GenericThread(self, listIndex=2)
        self.connect(self.genericThread, QtCore.SIGNAL("fillListWithItems(QString, int)"), self.fillListWithItems )
        self.ui.List1.list1SelectedItem.connect(self.fill_List2)
        ...

    def fill_List2(self):
        if self.genericThread.isRunning():
            self.genericThread.stop()
        self.ui.List2.clear()
        list1SelectedItem = str(self.ui.List1.currentItem().text())
        self.genericThread.start()

现在,为什么GUI会冻结以及如何正确终止qazxsw poi?

python multithreading qt pyqt qthread
1个回答
2
投票

基于你的评论,@ jehumoro和@Pavel我已经解决了我的问题,现在它按照我的意愿运行,如果有效的话,事情好的self.genericThread会好得多。

self.terminate()
© www.soinside.com 2019 - 2024. All rights reserved.