2012-02-22 164 views
1

我有一个小问题与PyQt4的工作和线程包时:蟒蛇线程GUI

我的代码如下所示:

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 ... 

=>现在高清运行(个体经营):在ParalelGui类是什么样子这个:

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

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

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

现在会发生什么是典型的“你没有线程你的GUI冻结” ......不禁大为赞赏

+0

什么是'ParalelGui'?你是否试图用不同的线程显示你的GUI?你也使用'QThread'类吗?我们需要更多的代码结构。 – jdi 2012-02-23 02:29:23

回答

3

即使你的例子是非常有限的,我要带刺的什么,我认为你正在做这里...

对我来说,你似乎在做事情倒退,并试图在主线程中执行大量计算时在线程中显示你的GUI?

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

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

+0

非常感谢你!那正是我需要知道的......我昨天意识到了这一点(主线程是针对gui的),并以另一种方式修复它(在另一个线程中执行计算,保留主要的gui)。现在我使用线程从线程...我今天晚些时候会尝试QThread – kosta5 2012-02-23 07:08:02

+0

使用QThread的好处是,它自QObject以来它带有信号。在run()例程中的任何点添加和发出更多信号是微不足道的。 QThread还支持事件循环,以便在那里创建gui对象并让它们能够接收事件并连接到其他信号。 – jdi 2012-02-23 15:40:24

+0

正确。我的意思是QThread支持事件循环,以便您可以将任何QObject移动到它们并让它们的事件和信号/插槽在那里运行。不是QWidgets。 – jdi 2012-02-23 15:49:21