2015-12-18 208 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”只会在值发生变化时发出,否则即使用户没有选择不同的值组合框。