python threads gui

时间:2012-02-22 21:09:14

标签: python multithreading pyqt

使用PyQt4和线程包时遇到一个小问题:

我的代码如下所示:

def goForwardToSamples(self):
    self.main.dataSet = DataSetProvider(self.main.sourceFile)
    self.ui = Ui_NeuralPredictor2()
    self.ui.setupUi(self)
    ParalelGui(self.ui).start()
    self.connectSignalsWindow2()
def connectSignalsWindw2(self):
   # DOING SOME REAL SERIOUS COMPUTATION ...

=>现在def run(self):在ParalelGui类中看起来像这样:

def run(self):
    self.gui.show()

=>我只想测试我的GUI是否会运行并行计算。

我觉得我知道问题是什么。我有一个QtableView正在填充我写的数据(做一些真正严重的计算.. )。那个QtableView当然是我发送给ParalelGui线程的ui的一部分。我不确定如何使它工作...基本上我想有一部分GUI线程已经显示,而另一部分是在不同的线程动态填充。

现在发生的事情是典型的'你没有给你的gui冻结线程'......非常感谢

1 个答案:

答案 0 :(得分:3)

即使你的榜样非常有限,我也会抨击我认为你在这里做的事情......

对我而言,似乎你正在向后做事并试图在主线程中进行大量计算时在线程中显示你的gui?

你真正应该做的是在主线程中创建和显示你的gui,并在一个单独的工作线程中运行繁重的计算。然后,此工作线程可以在数据准备就绪时发出信号,主线程可以连接到该信号并快速更新表。这样您就不会阻止主线程。经验法则永远不会在主线程中做任何重的事情。它适用于GUI及其事件。

另外,请确保使用的是QThread类,而不是python线程模块。