PyQt6基础_界面控件简单介绍II
目录
前置:
QButtonGroup、QRadioButton、QGroupBox
QCheckBox
QInputDialog
前置:
1 本系列将以 “PyQt6基础_”开头,放在【PyQt6基础】专栏
2 本文只将界面控件简单讲述,后续博文会对一些控件进一步讲解,会统一放在这个系列里
3 本系列后续会在B站录制视频,到时会在文末贴出链接。本人还是建议先看博文,不懂的再看视频,这样效率高,节约时间。
注意:以下链接虽然是PySide6的官方文档,但PyQt6大部分都通用。
QButtonGroup、QRadioButton、QGroupBox
https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QButtonGroup.html QButtonGroup官方文档
https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QGroupBox.html QGroupBox官方文档
https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QRadioButton.html QRadioButton官方文档
from PyQt6.QtCore import Qt,QSize,QDate
from PyQt6.QtWidgets import (
QApplication,QWidget,QPushButton,QMainWindow,QLabel,QHBoxLayout,QVBoxLayout,QLineEdit,QMessageBox,
QGroupBox,QRadioButton,QButtonGroup
)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('PyQt6基础')
self.setMinimumSize(QSize(600,400))
groupbox1 = QGroupBox('大模型')
self.btnGroup1 = QButtonGroup()
radio11 = QRadioButton('DeepSeek')
radio12 = QRadioButton('GPT3.5')
radio13 = QRadioButton('Qwen')
radio14 = QRadioButton('LLaMA')
radio15 = QRadioButton('BERT')
self.btnGroup1.addButton(radio11,11)
self.btnGroup1.addButton(radio12,12)
self.btnGroup1.addButton(radio13,13)
self.btnGroup1.addButton(radio14,14)
self.btnGroup1.addButton(radio15,15)
self.btnGroup1.buttonClicked.connect(self.btnGroup1_buttonClicked)
self.label1 = QLabel()
self.label1.setWordWrap(True)
vbox1 = QVBoxLayout()
vbox1.addWidget(radio11)
vbox1.addWidget(radio12)
vbox1.addWidget(radio13)
vbox1.addWidget(self.label1)
groupbox1.setLayout(vbox1)
groupbox2 = QGroupBox('深度学习框架')
self.btnGroup2 = QButtonGroup()
radio21 = QRadioButton('PyTorch')
radio22 = QRadioButton('TensorFlow')
radio23 = QRadioButton('Caffe')
radio24 = QRadioButton('PaddlePaddle')
self.btnGroup2.addButton(radio21,21)
self.btnGroup2.addButton(radio22,22)
self.btnGroup2.addButton(radio23,23)
self.btnGroup2.addButton(radio24,24)
self.btnGroup2.buttonClicked.connect(self.btnGroup2_buttonClicked)
self.label2 = QLabel()
self.label2.setWordWrap(True)
vbox2 = QVBoxLayout()
vbox2.addWidget(radio21)
vbox2.addWidget(radio22)
vbox2.addWidget(radio23)
vbox2.addWidget(radio24)
vbox2.addWidget(self.label2)
groupbox2.setLayout(vbox2)
layout = QHBoxLayout()
layout.addWidget(groupbox1)
layout.addWidget(groupbox2)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
pass
def btnGroup1_buttonClicked(self,btn):
res_str = f"当前被选中的单选钮为:{btn.text()};id是:{self.btnGroup1.checkedId()}"
self.label1.setText(res_str)
pass
def btnGroup2_buttonClicked(self,btn):
res_str = f"当前被选中的单选钮为:{btn.text()};id是:{self.btnGroup2.checkedId()}"
self.label2.setText(res_str)
pass
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec()
pass
1 QButtonGroup QRadioButton QGroupBox 在实际开发过程中,这三个控件总是一起使用,就放在一起讲解
2 QButtonGroup只是作为多个按钮的管理,没有界面,就不存在需要放入layout的情况。QButtonGroup中放入的按钮要指定一个id,如果设置为 -1,程序会自动分配id,程序自动分配的id是负数,从-2开始,所以建议手动配置的id设置为正数,避免冲突。
3 QGroupBox 直接设置布局,不直接放控件
4 QRadioButton 如果一个界面中有多组QRadioButton就必须分组
QCheckBox
https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QCheckBox.html QCheckBox官方文档
from PyQt6.QtCore import Qt,QSize,QDate
from PyQt6.QtWidgets import (
QApplication,QWidget,QPushButton,QMainWindow,QLabel,QHBoxLayout,QVBoxLayout,QLineEdit,QMessageBox,
QGroupBox,QRadioButton,QButtonGroup,QCheckBox
)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('PyQt6基础')
self.setMinimumSize(QSize(600,400))
groupbox1 = QGroupBox('喜欢的颜色')
self.btnGroup1 = QButtonGroup()
self.btnGroup1.setExclusive(False)
checkbox11 = QCheckBox('红')
checkbox12 = QCheckBox('黄')
checkbox13 = QCheckBox('蓝')
checkbox14 = QCheckBox('绿')
checkbox15 = QCheckBox('紫')
self.btnGroup1.addButton(checkbox11,11)
self.btnGroup1.addButton(checkbox12,12)
self.btnGroup1.addButton(checkbox13,13)
self.btnGroup1.addButton(checkbox14,14)
self.btnGroup1.addButton(checkbox15,15)
self.btnGroup1.buttonClicked.connect(self.btnGroup1_buttonClicked)
self.checkbox01 = QCheckBox('全选')
self.checkbox01.checkStateChanged.connect(self.checkbox01_checkStateChanged)
self.label1 = QLabel()
self.label1.setWordWrap(True)
vbox1 = QVBoxLayout()
vbox1.addWidget(checkbox11)
vbox1.addWidget(checkbox12)
vbox1.addWidget(checkbox13)
vbox1.addWidget(checkbox14)
vbox1.addWidget(checkbox15)
vbox1.addWidget(self.checkbox01)
vbox1.addWidget(self.label1)
groupbox1.setLayout(vbox1)
groupbox2 = QGroupBox('喜欢的动物')
self.btnGroup2 = QButtonGroup()
self.btnGroup2.setExclusive(False)
radio21 = QCheckBox('熊猫')
radio22 = QCheckBox('狗')
radio23 = QCheckBox('猫')
radio24 = QCheckBox('鸟')
self.btnGroup2.addButton(radio21,21)
self.btnGroup2.addButton(radio22,22)
self.btnGroup2.addButton(radio23,23)
self.btnGroup2.addButton(radio24,24)
self.btnGroup2.buttonClicked.connect(self.btnGroup2_buttonClicked)
self.checkbox02 = QCheckBox('全选')
self.checkbox02.checkStateChanged.connect(self.checkbox02_checkStateChanged)
self.label2 = QLabel()
self.label2.setWordWrap(True)
vbox2 = QVBoxLayout()
vbox2.addWidget(radio21)
vbox2.addWidget(radio22)
vbox2.addWidget(radio23)
vbox2.addWidget(radio24)
vbox2.addWidget(self.checkbox02)
vbox2.addWidget(self.label2)
groupbox2.setLayout(vbox2)
layout = QHBoxLayout()
layout.addWidget(groupbox1)
layout.addWidget(groupbox2)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
pass
def btnGroup1_buttonClicked(self,btn):
res_str = f"当前被选中的单选钮为:{btn.text()};状态:{btn.isChecked()}"
self.label1.setText(res_str)
pass
def btnGroup2_buttonClicked(self,btn):
res_str = f"当前被选中的单选钮为:{btn.text()};状态:{btn.isChecked()}"
self.label2.setText(res_str)
pass
def checkbox01_checkStateChanged(self,state):
if self.checkbox01.isChecked():
for btn in self.btnGroup1.buttons():
btn.setChecked(True)
self.label1.setText('当前全部选中')
pass
else:
for btn in self.btnGroup1.buttons():
btn.setChecked(False)
self.label1.setText('当前没有一个选中')
pass
pass
def checkbox02_checkStateChanged(self,state):
if self.checkbox02.isChecked():
for btn in self.btnGroup2.buttons():
btn.setChecked(True)
self.label2.setText('当前全部选中')
pass
else:
for btn in self.btnGroup2.buttons():
btn.setChecked(False)
self.label2.setText('当前没有一个选中')
pass
pass
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec()
pass
1 这里也使用了QButtonGroup来管理QCheckBox组。这里和QRadioButton不同,在一个界面中有多组QCheckBox不是必须用QButtonBroup来分组,直接代码上做好识别也可以。
2 QButtonGroup比较适合QRadioButton使用,本身的设计也是契合QRadioButton使用的。所以把QButtonGroup用于QCheckBox时,需要.setExclusive(False),这个值默认是True。exclusive的作用是标识按钮组任何时候只有一个可以选中,不能选中多个。复选框QCheckBox一般用来做多选,所以要将exclusive设为False
QInputDialog
https://doc.qt.io/qtforpython-6/PySide6/QtWidgets/QInputDialog.html QInputDialog官方文档
from PyQt6.QtCore import Qt,QSize,QDate
from PyQt6.QtWidgets import (
QApplication,QWidget,QPushButton,QMainWindow,QLabel,QHBoxLayout,QVBoxLayout,QLineEdit,QMessageBox,
QInputDialog
)
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle('PyQt6基础')
self.setMinimumSize(QSize(600,400))
self.label = QLabel()
self.btn = QPushButton('弹框输入文本')
self.btn.clicked.connect(self.btn_clicked)
layout = QVBoxLayout()
layout.addWidget(self.btn)
layout.addWidget(self.label)
widget = QWidget()
widget.setLayout(layout)
self.setCentralWidget(widget)
pass
def btn_clicked(self):
text,ok = QInputDialog.getText(self,'输入体验过的大模型','模型名:')
if ok and text:
self.label.setText(text)
pass
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec()
pass