当前位置: 首页 > news >正文

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

 

相关文章:

  • 使用Selenium和lxml库搜房网爬取某地区房屋信息(python、pycharm爬虫)
  • 直流充电桩“数据心脏“:四大核心使命驱动充电网络智能化升级
  • AI 与 IT 从业者:共舞还是取代?
  • python学习笔记(2)
  • docker构建并启动前端
  • 多层感知机(MLP)全面指南
  • C语言:关于ctype库常用函数使用方法
  • 多智能体功能分化的核心优势是什么:提升效率,查漏补缺
  • 光谱相机的光谱信息获取
  • Pandas的轴,axis=0,axis=1
  • EtherCAT转ProfiNet协议转换网关构建西门子PLC与海克斯康机器人的冗余通信链路
  • 7-项目负责人-添加产品
  • STM32F103_LL库+寄存器学习笔记10 - DMA传输过半+DMA传输完成中断实现DMA串口接收“双缓冲“
  • 错误没有详细堆栈信息?
  • AIGC工具平台-通用抠图换背景
  • 阿里云国际站代理商:为什么网络延迟影响查询速度?
  • 某鱼、某宝 sign 签名算法分析记录
  • 【动态编译】Roslyn中 SyntaxKind 枚举类型
  • OpenCV 图形API(或称G-API)
  • element-ui calendar 组件源码分享
  • 台湾关闭最后的核电,岛内担忧“非核家园”缺电、涨电价困局难解
  • 国内规模最大女子赛艇官方赛事在沪启航,中外41支队伍逐浪
  • 广药集团原董事长李楚源被“双开”:去年8月被查,曾多次发表争议言论
  • 上海市第二十届青少年科技节启动:为期半年,推出百余项活动
  • 美联储官员:美国经济增速可能放缓,现行关税政策仍将导致物价上涨
  • 特朗普公开“怼”库克:苹果不应在印度生产手机