PyQt:按下按钮时从组合框中获取一个值

时间:2015-12-18 22:42:29

标签: python pyqt pyserial qcombobox

我使用qt designer并将其从* .ui转换为* .py,我想申请发送和接收串行数据,

我使用combobox来让用户设置串行通信

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

我的问题是,当我点击按钮时,如何从combobo_2获取值以填充序列数据

这是我的代码

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

并收到错误

  

文件“mainw.py”,第18行,在press_2 self.connect中(self.ui.comboBox_2,   QtCore.SIGNAL('activated(QString)'),ser.baudRate())AttributeError:   'serial'对象没有'baudRate'属性

1 个答案:

答案 0 :(得分:3)

关于使用按钮从组合框中获取值的问题与您当前正在执行的操作不同,后者在选择组合框中的值时直接使用信号。

你的错误与其他东西有关,看起来在你的信号中你正在调用一个函数“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而不是为信号编写函数,但这只是举例。

您可能还想使用“currentIndexChanged”信号而不是“激活”,因为“currentIndexChanged”只会在值发生变化时发出,否则即使用户未在组合中选择其他值也会发出信号框。