2015-12-18 123 views
0

得到組合框的值,我使用Qt設計以及它與*的.ui爲*的.py,我想使申請發送和接收串行數據轉換,,PyQt的:當一個按鈕被按下

我使用組合框到alow用戶設置串行COMةunication

self.ui.comboBox_2.addItems(['2400','4800','9600','19200']) 

我的問題是,怎樣才能從combobo_2值來填充序列buadrate當我點擊一個按鈕

,這是我的代碼

self.connect(self.ui.comboBox_2, QtCore.SIGNAL('activated(QString)'),ser.baudRate()) 

,並得到一個錯誤

File "mainw.py", line 18, in press_2 self.connect(self.ui.comboBox_2, QtCore.SIGNAL('activated(QString)'),ser.baudRate()) AttributeError: 'Serial' object has no attribute 'baudRate'

+0

你使用PySerial嗎? –

回答

2

您對使用按鈕來從組合框的值的問題是不同於什麼您正在做的這是使用的信號直接從當組合的價值盒被選中。

你的錯誤與別的東西有關,它看起來像你的信號中你調用函數「ser.baudRate()」,但你必須傳入一個函數對象,因爲它會傳入任何「ser.buadRate ()「返回。這可能不是一個功能。我不確定那個函數返回什麼。在任何情況下,這裏是一些建議:

使用按鈕 如果你想使用一個按鈕,然後你會寫是這樣的:

self.connect(self.ui.myButton, QtCore.SIGNAL('clicked()'), self.updateBaudRate) 
def updateBaudRate(self): 
    # get value from combo box 
    rate = str(self.ui.comboBox_2.currentText()) # convert to string otherwise you will get a QString which is sometimes not friendly with other tools 
    ser.baudRate(rate) 

使用組合框信號

self.connect(self.ui.comboBox_2, QtCore.SIGNAL('currentIndexChanged(QString)'), self.updateBaudRate) 

def updateBaudRate(self, rate): 
    ser.baudRate(str(rate)) # again convert to string as it my not accept a QString 

您可以使用functools模塊中的partial或使用lambda代替爲信號編寫函數,但這僅適用於exa mple。

您可能還想使用「currentIndexChanged」信號,而不是「激活」,因爲「currentIndexChanged」只會在值發生變化時發出,否則即使用戶沒有選擇不同的值組合框。