这个问题与我的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?
基于你的评论,@ jehumoro和@Pavel我已经解决了我的问题,现在它按照我的意愿运行,如果有效的话,事情好的self.genericThread
会好得多。
self.terminate()