2012-01-03 97 views
0

因此,我編寫了這個軟件,用於實現4個選項卡(現在爲8)。現在,每個選項卡都是自己的QThread,顯然還有一個通用的GUI線程。當這需要更新時,工作線程(選項卡線程)將數據發送回GUI線程。例如,我在GUI線程中有一個statusBar文本,每次工作線程執行某些操作時都需要更新該文本。我使用了信號/槽的方式,以及我檢測輸入信號是這樣的:在Python中檢測模塊(將數據發送到GUI線程)

def setStatus(self, status): 
    #Defining SIGNAL sender 
    self.sender = QObject().sender()   
    if "module1" in str(self.sender): 
     self.module1CurrentStatus.setText(status) 

現在這個工作和一切,但就像我說的,該軟件已經從實施4個選項卡,以成長實施8個選項卡。有沒有更好的方法來實現這一點,而不是使用sender()?我只是在尋找所有模塊只能寫入一次的東西,這是GUI自動識別SIGNAL來自哪個線程的一種方式。我知道我可以爲每個模塊寫一個單獨的SIGNAL,但是我沒有做到這一點。

+0

我可能在這裏錯過了一些東西。爲什麼不把線程的信號連接到適當的widget的'setText'而不是這個中間函數來設置狀態? – Avaris 2012-01-03 16:04:38

+0

@Avaris,因爲我不能在非GUI(worker)線程中使用setText函數。 – 2012-01-03 23:37:57

+0

仍然...您在主(GUI)線程中連接它們。這個'setStatus'方法在那裏,不是嗎?而且,你在主線程中創建你的工作線程,不是嗎?如果你可以將它們連接到'setStatus',你也可以將它們連接到'module1CurrentStatus.setText'。如果你分享更多的代碼來提供適當的上下文,也許會更好。 – Avaris 2012-01-03 23:51:20

回答

-1

模塊名稱可以通過__name__獲取,除非它是作爲腳本運行的文件。

+0

那麼在那種情況下,我只需用__name__替換QSender,什麼都不做。 – 2012-01-03 13:43:31

0

如果我正確理解您的要求,您可以使用QSignalMapper重新發射帶有標識符的信號。