2014-10-10 61 views
0

我使用Pyqt4在python中製作GUI。我想從主GUI發送一個信號到一個線程來實現一個功能。我知道如何從線程向主GUI發送信號,但我不知道相反的事情。另外我想通過一個信號變量。從主函數發送一個信號到一個線程?

類似:

class MainGUI() 
    def function 
     value = 5 
     self.emit(QtCore.Signal("Signal(int)"),value) 


class thread(QtCore.QThread) 
    def _init_(self) 
      Qtcore.QThread._init_() 
      self.connect(Qt.SIGNAL("Signal(int)"),self.run()) 

    def run(self,value): 
     time.sleep(value) 

所以每次的信號從主界面我想不結冰的GUI運行在並行線程功能傳輸時間。

任何幫助,將不勝感激, 噴氣

回答

1

正確的方法是創建將被移動到線程對象。你不需要子類QtCore.QThread

或多或少類似的東西(免責聲明:我比Python的C++):

myThread = QtCore.QThread() 
testObject = YourClassWithSlots() # NO PARENT HERE 
testObject.moveToThread(myThread) 
myThread.start() 

從這一點testObject所有連接插槽(使用默認連接類型)將在線程myThread運行。

相關鏈接:


更多細節請@Ezee

class YourClassWithSlots(QtCore.QObject) : 
    @Slot(int) 
    def havyTaskMethod(self, value) : 
     # long runing havy task 
     time.sleep(value) 

self.myThread = QtCore.QThread(self) 
self.testObject = YourClassWithSlots() # NO PARENT HERE 
self.testObject.moveToThread(myThread) # this makes slots to be run in specified thread 
self.myThread.start() 
self.connect(Qt.SIGNAL("Signal(int)"), self.testObject.havyTaskMethod) 
+0

問題是關於發送信號而不是使用線程。所以這不是一個答案。在這種情況下,OP的下一個問題將是「如何從移動到另一個線程的對象發送信號」 – Ezee 2014-10-10 08:41:33

+0

閱讀鏈接我在投票之前給出的。顯然你喜歡復仇。請注意,即使經過編輯,您的答案也很糟糕。 @Jetmir應該理解信號和插槽的功能(也是你自己),那麼他的問題將是微不足道的解決。 – 2014-10-10 09:02:36

+0

鏈接可以導致更多信息,但不會得到答案。添加回答OP問題的內容,並將刪除投票。考慮更有禮貌。 – Ezee 2014-10-10 09:06:51

相關問題