【问题标题】:PyQt : get a value from combobox when a button pressedPyQt:按下按钮时从组合框中获取值
【发布时间】:2016-03-25 17:14:46
【问题描述】:

我使用qt设计器并将其从*.ui转换为*.py,我想制作发送和接收串行数据的应用程序,

我使用组合框来允许用户设置串行通信

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

我的问题是当我点击一个按钮时如何从combobo_2 获取值来填充串行 buadrate

这是我的代码

    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()) 属性错误: 'Serial' 对象没有属性 'baudRate'

【问题讨论】:

  • 你在使用 PySerial 吗?

标签: python pyqt pyserial qcombobox


【解决方案1】:

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

您的错误与其他内容有关,在您的信号中看起来您正在调用函数“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”只会在值发生变化时发出,否则即使用户没有在组合中选择不同的值也会发出信号盒子。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 2019-12-24
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    相关资源
    最近更新 更多