最近在用PyQt5做项目,总结一下QLineEdit、QRadioButton、QComboBox这些部件用到的change事件绑定,即信号与插槽。
QLineEdit
对象是最常用的输入字段。 它提供了一个框,可以在其中输入一行文本。 要输入多行文本,需要 QTextEdit
对象。
方法 | 说明 |
---|---|
textChanged() | 当框中的文本通过输入或编程方式更改时 |
以下是重写的一个 QLineEdit
类:
from PyQt5.QtWidgets import QLineEdit
from Config import ConfigParams
class LineEdit(QLineEdit):
def __init__(self, k):
super().__init__()
self.textChanged.connect(lambda current_text: self.text_changed(k, current_text))
def text_changed(self, k, v):
print(k, v)
configParams = ConfigParams()
setattr(configParams, k, v) // 设置属性值
实例化该类:
line1 = LineEdit('WaterViscosity')
此示例中 line1
字段上的 textChanged()
信号连接到 text_changed()
插槽方法。使用 lambda
可以传入多个参数,current_text
为当前值。
QRadioButton
类对象呈现一个带有文本标签的可选按钮。用户可以选择表单上显示的许多选项之一。该类派生自 QAbstractButton
类。
默认情况下,单选按钮是自动排他的。因此,一次只能选择父窗口中的一个单选按钮。如果选择了一个,则会自动取消选择先前选择的按钮。 单选按钮也可以放在 QGroupBox
或 QButtonGroup
中,以在父窗口上创建多个可选字段。
方法 | 说明 |
---|---|
isChecked() | 检查按钮是否被选中 |
toggled() | 当选中按钮更改时 |
以下是重写的一个 QRadioButton
类:
from PyQt5.QtWidgets import QRadioButton
from Config import ConfigParams
class RadioButton(QRadioButton):
def __init__(self, text, k = ''):
super().__init__(text)
self.setStyleSheet('font-size: 14px; border: none;')
self.toggled.connect(lambda: self.radio_changed(k))
def radio_changed(self, k):
print(self.text(), self.isChecked(), k)
configParams = ConfigParams()
if self.isChecked():
setattr(configParams, k, self.text())
实例化该类:
radio1 = RadioButton('Laminar', 'TurbulenceModel')
radio2 = RadioButton('RANS', 'TurbulenceModel')
radio3 = RadioButton('LES', 'TurbulenceModel')
QComboBox
对象提供一个可供选择的项目的下拉列表。只显示当前选定的项目所需的窗体上的最小屏幕空间。
方法 | 说明 |
---|---|
addItems() | 在列表对象中添加项目 |
currentTextChanged() | 每当选中项通过下拉或以编程方式更改时 |
以下是重写的一个 QComboBox
类:
from PyQt5.QtWidgets import QComboBox
from Config import ConfigParams
class Select(QComboBox):
def __init__(self, items = [], k = ''):
super().__init__()
self.addItems(items)
self.currentTextChanged.connect(lambda current_text: self.select_changed(k, current_text))
comboboxStyle = CommonHelper.readQSS('Style/combobox.qss') // 自定义样式
self.setStyleSheet(comboboxStyle)
def select_changed(self, k, v):
print(k, v)
configParams = ConfigParams()
setattr(configParams, k, v)
实例化该类:
material = Select(['Water', 'Air', 'Sand', 'Oil', 'Mashgas', 'User defned'], 'FillingType')