2014-01-16 35 views
1

我正在研究一個基於PySide的應用程序,我不斷地獲取值並希望將它們放到GUI中。
當我收到的值轉換我他爲int,並通過PySide.QtCore.Signal是否可以用lambda函數檢索Qt信號的內容?

的.emit()attributte
Signal = PySide.QtCore.Signal(int) 

# as soon as a new value is received and processed 
Signal.emit(new_value) 

發出他現在(我通過使用PCANBasic庫中的CAN設備接收它們)我嘗試顯示在PySide.QtGui.QSlider我NEW_VALUE,這就是我目前做:

my_slider = PySide.QtGui.QSlider() 
Signal.connect(change_slider_value) 

# with a simple helper function 
def change_slider_value(value): 
    my_slider.setValue(value) 

我想要做的是:

Signal.connect(lambda value = data : my_slider.setValue(value)) 

隨着數據是牛逼他是我emited與信號(我喜歡以某種方式紀念它,但格式化disappeaered對我和我的第一篇-.-)

當我測試這個我得到以下回溯:

self.calibrate.bar_val_signal.connect(lambda value = data: self.UI.calibrate.ctrl.Bar.setValue(value)) # self.change_bar_value) 
NameError: global name 'data' is not defined 

(你看,節目可能較爲複雜) 翻譯成我們的僞代碼,它可能是這樣的:

Signal.connect(lambda value = data: my_slider.setValue(value)) 
    NameError: global name 'data' is not defined 

在我看來,問題是,lambda函數不能得到的值了的信號。 有沒有人有一個想法,如果有可能不需要幫助功能的工作。

在此先感謝

回答

1

您不需要使用lambda。由於您的change_slider_value函數僅僅需要您的信號會發出的論點,您可以將信號連接到該信號。

Signal.connect(change_slider_value) 

至於爲什麼你的拉姆達不工作,認爲數據作爲函數的參數。數據將包含任何拉姆達被調用,因此,你可能只是這樣做,忽略「值」:

Signal.connect(lambda data: my_slider.setValue(data)) 

但我會建議使用第一個解決方案,除非您的參數chang_slider_value變化。

+0

謝謝,工作得很好! –

相關問題