使用Qt设计一个组合按钮,且按钮之间是互斥的,每一个按钮点击后有选择样式,其他的恢复为未选择的样式
时间: 2024-03-03 11:53:42 浏览: 148
好的,我可以为您解答这个问题。
首先,在Qt中设计一个组合按钮,可以使用QButtonGroup类。将需要组合的按钮加入到同一个QButtonGroup中,并设置每个按钮的ID。然后,使用QButtonGroup的exclusive属性设置为true,即可实现按钮之间的互斥。
其次,要实现按钮的选择样式,可以使用QSS样式表来设置。可以为每个按钮设置不同的QSS样式,在按钮被选中时使用该样式,其他按钮恢复为未选中状态的样式。
以下是一个示例代码:
```python
from PyQt5.QtWidgets import QApplication, QMainWindow, QGroupBox, QRadioButton, QVBoxLayout, QButtonGroup
class Example(QMainWindow):
def __init__(self):
super().__init__()
# 创建一个groupBox,用于放置组合按钮
self.groupBox = QGroupBox("GroupBox", self)
# 创建三个单选按钮
self.radioButton1 = QRadioButton("Button 1", self.groupBox)
self.radioButton2 = QRadioButton("Button 2", self.groupBox)
self.radioButton3 = QRadioButton("Button 3", self.groupBox)
# 将三个按钮添加到同一个按钮组中
self.buttonGroup = QButtonGroup(self.groupBox)
self.buttonGroup.addButton(self.radioButton1, 1)
self.buttonGroup.addButton(self.radioButton2, 2)
self.buttonGroup.addButton(self.radioButton3, 3)
self.buttonGroup.setExclusive(True)
# 创建一个垂直布局,并将三个按钮添加到布局中
layout = QVBoxLayout()
layout.addWidget(self.radioButton1)
layout.addWidget(self.radioButton2)
layout.addWidget(self.radioButton3)
self.groupBox.setLayout(layout)
# 设置按钮样式
self.radioButton1.setStyleSheet("QRadioButton::indicator:checked {image: url(checked.png);}")
self.radioButton1.setStyleSheet("QRadioButton::indicator:unchecked {image: url(unchecked.png);}")
self.radioButton2.setStyleSheet("QRadioButton::indicator:checked {image: url(checked.png);}")
self.radioButton2.setStyleSheet("QRadioButton::indicator:unchecked {image: url(unchecked.png);}")
self.radioButton3.setStyleSheet("QRadioButton::indicator:checked {image: url(checked.png);}")
self.radioButton3.setStyleSheet("QRadioButton::indicator:unchecked {image: url(unchecked.png);}")
# 设置窗口大小和位置
self.setGeometry(300, 300, 350, 250)
self.setWindowTitle('Example')
self.show()
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())
```
在上面的代码中,我们使用了QGroupBox、QRadioButton和QButtonGroup类来创建组合按钮。通过设置QButtonGroup的exclusive属性为True,我们实现了按钮之间的互斥。接下来,我们使用QSS样式表来设置按钮的选择样式,并将三个按钮添加到一个垂直布局中。
最后,我们创建了一个窗口,并显示了我们的组合按钮。
阅读全文