2011-05-03 95 views
1

我創建一個自定義類的對話:pyqt:用用戶提供的變量動態連接信號?

d = ModifyRect(ctrl_name, rect_name) 

它是無模式顯示。當它被接受或拒絕,我想打電話給我的主窗口通過在這兩個變量的函數,即此插槽應該叫:

@QtCore.pyqtSlot("QString","QString") 
def modifyRectAccepted(self, ctrl_name, rect_name): 
    #foo 

如何去連接dacceptedMainWindow「 s modifyRectAccepted,傳入這兩個參數?甚至連接這兩個,但至少要通過ModifyRect實例,以便我可以從那裏抓取它們。

pygtk這很簡單 - 您可以將更多變量傳遞到connect並且它們會被轉發,並且無論如何發送的小部件總是被傳入.PyQt中的等價概念是什麼?

回答

2

你不能直接做到這一點。您需要使用信號映射器或中間插槽。前幾天回答見this question。或者,如果您只是對信號源感興趣,請使用QObject的sender()方法。

編輯: 要使用封閉件作爲中間槽必須使用New-syle信號和時隙範例。這種方式更pythonic,並讓你指定任何可調用。像這樣:

d = ModifyRect() 

l = lambda: modifyRectAccepted(ctrl_name, rect_name) 
d.accepted.connect(l) 

def modifyRectAccepted(self, ctrl_name, rect_name): 
    #foo 
+0

我可以製作一箇中間插槽嗎? – Claudiu 2011-05-04 12:17:43

+0

當然。你可以做到這一點。 – takoi 2011-05-04 13:02:05

+0

你能告訴我如何?我將如何連接它?據我瞭解,我需要用'SLOT()'指定一個插槽名稱,並且它必須位於主窗口上..所以我如何將它作爲插槽的匿名/內部函數? – Claudiu 2011-05-04 13:34:45

相關問題