QGroupBox简介
分组框控件QGroupBox为对界面中的控件分组控制提供了支持,分组框通常带有一个边框和一个标题栏,同时也可以提供键盘快捷键,作为容器部件来使用,在其中可以布置各种窗口部件。分组框的标题通常在上方显示,其位置可以设置为靠左、居中、靠右、自动调整这几种方式之一。布局时可以用作一组控件的容器,但需要注意的是,内部必须使用布局控件(如QBoxLayout)进行布局。
QGroupBox不仅可以将布局分成一个个区域显示,而且还能起到隔绝的作用,在PyQt布局中,通常一个界面中的所有QRadioBox只能选中其中一个,但是将QRadioBox分开布局到QGroupBox中去的话,那么每一个QGroupBox中的QRadioBox就是独立的一组,在其中只能选中一个QRadioBox,界面中如果有多个QGroupBox的话,就可以在同时在每个QGroupBox中各选中一个QRadioBox。
QGroupBox常用方法:
- setTitle(): 设置标题栏文本;
- setFlat(): 设置扁平外观,无边框;
- setCheckbale(): 设置成可选状态;
- setChecked(): 设置为选中;
- isChecked(): 是否选中;
- isFlat(): 是否是扁平外观;
- isCheckable(): 是否是可选状态;
- title(): 获得标题文本;
QGroupBox常用信号:
- clicked(): 点击QGroupBox控件时,发射该信号;
- toggled(): 当QGroupBox的状态发生了改变时,发射该信息。
注: Qt中 clicked 和 toggled 之间的区别:
共同点是:当点击按钮时,状态信号都会被发送。不同点是:toggled要比clicked更容易触发。clicked()有的toggled有,而toggled有的,clicked()却不一定有!
QGroupBox类继承关系:
测试QGroupBox
创建qgroupbox.py,使用网格布局,添加四个QGroupBox,演示QGroupBox外观及常用方法,完整代码如下:
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import (QApplication, QWidget, QGroupBox, QMenu, QAction,
QPushButton, QCheckBox, QRadioButton,
QVBoxLayout, QGridLayout)
class DemoGroupBox(QWidget):
def __init__(self, parent=None):
super(DemoGroupBox, self).__init__(parent)
# 设置窗口标题
self.setWindowTitle('实战PyQt5: QGroupBox Demo!')
# 设置窗口大小
self.resize(480, 360)
self.initUi()
def initUi(self):
gLayout = QGridLayout(self)
gLayout.addWidget(self.createFirstExclusiveGroup(), 0, 0)
gLayout.addWidget(self.createPushButtonGroup(), 1, 1)
gLayout.addWidget(self.createNonExclusiveGroup(), 1, 0)
gLayout.addWidget(self.createSecondExclusiveGroup(), 0, 1)
self.setLayout(gLayout)
def createFirstExclusiveGroup(self):
groupBox = QGroupBox('Exclusive Radio Buttons', self)
radio1 = QRadioButton('&Radio Button 1', self)
radio1.setChecked(True)
radio2 = QRadioButton('R&adio button 2', self)
radio3 = QRadioButton('Ra&dio button 3', self)
vLayout = QVBoxLayout(groupBox)
vLayout.addWidget(radio1)
vLayout.addWidget(radio2)
vLayout.addWidget(radio3)
vLayout.addStretch(1)
groupBox.setLayout(vLayout)
return groupBox
def createSecondExclusiveGroup(self):
groupBox = QGroupBox('E&xclusive Radio Buttons', self)
groupBox.setCheckable(True)
groupBox.setChecked(True)
radio1 = QRadioButton('Rad&io button1', self)
radio1.setChecked(True)
radio2 = QRadioButton('Radi&o button2', self)
radio3 = QRadioButton('Radio &button3', self)
chkBox = QCheckBox('Ind&ependent checkbox', self)
vLayout = QVBoxLayout(groupBox)
vLayout.addWidget(radio1)
vLayout.addWidget(radio2)
vLayout.addWidget(radio3)
vLayout.addWidget(chkBox)
vLayout.addStretch(1)
groupBox.setLayout(vLayout)
return groupBox
def createNonExclusiveGroup(self):
groupBox = QGroupBox('No-Exclusive Checkboxes', self)
groupBox.setFlat(True)
chBox1 = QCheckBox('&Checkbox 1')
chBox2 = QCheckBox('C&heckbox 2')
chBox2.setChecked(True)
tristateBox = QCheckBox('Tri-&state buttton')
tristateBox.setTristate(True)
tristateBox.setCheckState(Qt.PartiallyChecked)
vLayout = QVBoxLayout(groupBox)
vLayout.addWidget(chBox1)
vLayout.addWidget(chBox2)
vLayout.addWidget(tristateBox)
vLayout.addStretch(1)
groupBox.setLayout(vLayout)
return groupBox
def createPushButtonGroup(self):
groupBox = QGroupBox('&Push Button', self)
groupBox.setChecked(True)
groupBox.setChecked(True)
pushButton = QPushButton('&Normal Button', self)
toggleButton = QPushButton('&Toggle Button', self)
toggleButton.setCheckable(True)
toggleButton.setChecked(True)
flatButton = QPushButton('&Flat Button')
flatButton.setFlat(True)
popupButton = QPushButton('Pop&up Button')
menu = QMenu(self)
menu.addAction('&First Item')
menu.addAction('&Second Item')
menu.addAction('Third Item')
menu.addAction('F&ourth Item')
popupButton.setMenu(menu)
subMenu = menu.addMenu('Submenu')
subMenu.addAction('Item 1')
subMenu.addAction('Item 2')
subMenu.addAction('Item 3')
vLayout = QVBoxLayout(groupBox)
vLayout.addWidget(pushButton)
vLayout.addWidget(toggleButton)
vLayout.addWidget(flatButton)
vLayout.addWidget(popupButton)
vLayout.addStretch()
groupBox.setLayout(vLayout)
return groupBox
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoGroupBox()
window.show()
sys.exit(app.exec())
测试QGroupBox
本文知识点
- QGroupBox的分作隔离效果;
- QGroupBox设置可选状态的作用域;
- PyQt中,clicked信号和toggled信号的相同和不同点;
- 为QMenu菜单添加子菜单;
- 为QPushButton按钮设置菜单。