百度360必应搜狗淘宝本站头条
当前位置:网站首页 > IT知识 > 正文

惊了!原来 Python PySide6 GUI 开发的按钮有这么多玩法

liuian 2025-10-19 08:46 2 浏览

点赞、收藏、加关注,下次找我不迷路

为什么选择 PySide6 进行 GUI 开发


在众多 Python GUI 框架中,如 Tkinter、PyQt、wxPython 等,PySide6 脱颖而出。它是 Qt 框架的官方 Python 绑定,具有跨平台特性,能在 Windows、Mac、Linux 等系统上运行。PySide6 不仅提供丰富的 GUI 组件,还使用 LGPL 许可证,这意味着开发者在商业项目中使用它时更加自由,无需担心许可证问题。同时,它对 Python 的支持非常友好,代码简洁易懂,适合新手入门。

PySide6 中的按钮类型概览


在 PySide6 的 QtWidgets 模块中,提供了多种按钮类型,每种按钮都有其独特的用途和特点。下面我们通过表格来简单了解一下:

名称

翻译

PySide6 对应的类

意义

Push Button

按钮

QPushButton

普通按钮,点击触发事件

Tool Button

工具按钮

QToolButton

通常是带图标的按钮

Radio Button

单选按钮

QRadioButton

一组选项中只能选择一个

Check Box

复选框

QCheckBox

允许选择多个选项

Command Link Button

命令链接按钮

QCommandLinkButton

带描述的链接按钮,常用于对话框中,外观像链接

Dialog Button Box

对话框按钮框

QDialogButtonBox

标准对话框按钮框,包含常见按钮,如 “确定”“取消” 等

接下来,我们详细介绍每种按钮类型。

Push Button(QPushButton)

Push Button 是最常见的按钮类型,就像我们日常使用软件时点击的各种确认、提交按钮。在 PySide6 中创建一个 Push Button 非常简单,以下是一个示例代码:

import sys
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Push Button示例")
        self.setGeometry(100, 100, 400, 300)
        layout = QVBoxLayout()
        button = QPushButton("点击我")
        button.clicked.connect(self.on_button_click)
        layout.addWidget(button)
        self.setLayout(layout)

    def on_button_click(self):
        print("按钮被点击了!")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

在这段代码中,我们创建了一个继承自 QWidget 的 MainWindow 类。在类的初始化方法中,设置了窗口的标题和大小,并创建了一个垂直布局(QVBoxLayout)。然后创建了一个 QPushButton,按钮上的文本为 “点击我”,并通过button.clicked.connect(self.on_button_click)将按钮的点击事件与on_button_click方法绑定。当按钮被点击时,会在控制台打印 “按钮被点击了!”。

Push Button 还有很多属性可以设置,比如按钮的字体、图标、快捷键等。例如,要设置按钮的图标,可以这样做:

icon = QIcon("icon.png")
button.setIcon(icon)

这样就可以为按钮添加一个图标,使按钮更加直观和美观。

Tool Button(QToolButton)

Tool Button 通常用于提供快速访问常用工具或操作的功能,一般以图标显示为主,尺寸相对较小。比如在绘图软件中,用于选择画笔、橡皮擦等工具的按钮就可能是 Tool Button。以下是创建一个 Tool Button 的示例代码:

import sys
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QToolButton
from PySide6.QtGui import QIcon


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Tool Button示例")
        self.setGeometry(100, 100, 400, 300)
        layout = QVBoxLayout()
        tool_button = QToolButton()
        tool_button.setIcon(QIcon("brush_icon.png"))
        tool_button.setToolTip("选择画笔工具")
        tool_button.clicked.connect(self.on_tool_button_click)
        layout.addWidget(tool_button)
        self.setLayout(layout)

    def on_tool_button_click(self):
        print("画笔工具被点击了!")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

在这个示例中,我们创建了一个 QToolButton,通过setIcon方法设置了按钮的图标,使用setToolTip方法为按钮添加了提示信息,当鼠标悬停在按钮上时会显示该提示。同样,通过clicked.connect方法将按钮的点击事件与相应的处理方法绑定。



Radio Button(QRadioButton)

Radio Button 用于在一组选项中只能选择一个的场景。比如在设置性别时,“男” 和 “女” 两个选项通常会使用 Radio Button。以下是一个简单的示例:

import sys
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QRadioButton


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Radio Button示例")
        self.setGeometry(100, 100, 400, 300)
        layout = QVBoxLayout()
        male_radio = QRadioButton("男")
        female_radio = QRadioButton("女")
        male_radio.toggled.connect(lambda: self.on_radio_toggled(male_radio))
        female_radio.toggled.connect(lambda: self.on_radio_toggled(female_radio))
        layout.addWidget(male_radio)
        layout.addWidget(female_radio)
        self.setLayout(layout)

    def on_radio_toggled(self, radio_button):
        if radio_button.isChecked():
            print(f"{radio_button.text()}被选中了")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

在这段代码中,我们创建了两个 QRadioButton,分别为 “男” 和 “女”。通过
radio_button.toggled.connect方法将按钮的状态切换事件与on_radio_toggled方法绑定。在on_radio_toggled方法中,通过isChecked方法判断按钮是否被选中,如果被选中则打印相应的信息。



Check Box(QCheckBox)

Check Box 允许用户选择多个选项。例如在一个文件下载任务中,用户可以选择多个文件进行下载,这时就可以使用 Check Box。以下是示例代码:

import sys
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QCheckBox


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Check Box示例")
        self.setGeometry(100, 100, 400, 300)
        layout = QVBoxLayout()
        file1_checkbox = QCheckBox("文件1")
        file2_checkbox = QCheckBox("文件2")
        file3_checkbox = QCheckBox("文件3")
        file1_checkbox.stateChanged.connect(lambda: self.on_checkbox_changed(file1_checkbox))
        file2_checkbox.stateChanged.connect(lambda: self.on_checkbox_changed(file2_checkbox))
        file3_checkbox.stateChanged.connect(lambda: self.on_checkbox_changed(file3_checkbox))
        layout.addWidget(file1_checkbox)
        layout.addWidget(file2_checkbox)
        layout.addWidget(file3_checkbox)
        self.setLayout(layout)

    def on_checkbox_changed(self, checkbox):
        if checkbox.isChecked():
            print(f"{checkbox.text()}被选中了")
        else:
            print(f"{checkbox.text()}被取消选中了")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

这里创建了三个 QCheckBox,分别代表 “文件 1”“文件 2”“文件 3”。通过stateChanged.connect方法将复选框状态改变事件与on_checkbox_changed方法绑定。在on_checkbox_changed方法中,根据isChecked方法的返回值判断复选框是被选中还是取消选中,并打印相应信息。



Command Link Button(QCommandLinkButton)

Command Link Button 是一种带描述的链接按钮,通常用于对话框中,外观像链接。它可以提供更多的信息给用户,引导用户进行操作。以下是创建一个 Command Link Button 的示例:

import sys
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QCommandLinkButton


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Command Link Button示例")
        self.setGeometry(100, 100, 400, 300)
        layout = QVBoxLayout()
        command_link_button = QCommandLinkButton("重要操作", "这是一个重要操作的详细描述")
        command_link_button.clicked.connect(self.on_command_link_click)
        layout.addWidget(command_link_button)
        self.setLayout(layout)

    def on_command_link_click(self):
        print("重要操作按钮被点击了!")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

在这个示例中,创建了一个 QCommandLinkButton,第一个参数是按钮的主要文本,第二个参数是描述性文本。通过clicked.connect方法将按钮点击事件与处理方法绑定,当按钮被点击时,会在控制台打印相应信息。



Dialog Button Box(QDialogButtonBox)

Dialog Button Box 是标准对话框按钮框,包含常见的按钮,如 “确定”“取消”“应用” 等。它可以方便地管理对话框中的按钮布局和行为。以下是一个简单示例:

import sys
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QDialogButtonBox, QMessageBox


class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("Dialog Button Box示例")
        self.setGeometry(100, 100, 400, 300)
        layout = QVBoxLayout()
        button_box = QDialogButtonBox(QDialogButtonBox.Ok | QDialogButtonBox.Cancel)
        button_box.accepted.connect(self.on_accept)
        button_box.rejected.connect(self.on_reject)
        layout.addWidget(button_box)
        self.setLayout(layout)

    def on_accept(self):
        QMessageBox.information(self, "提示", "你点击了确定按钮")

    def on_reject(self):
        QMessageBox.information(self, "提示", "你点击了取消按钮")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = MainWindow()
    window.show()
    sys.exit(app.exec())

在这段代码中,创建了一个 QDialogButtonBox,通过QDialogButtonBox.Ok | QDialogButtonBox.Cancel指定了按钮框中包含 “确定” 和 “取消” 按钮。通过accepted.connect和rejected.connect方法分别将 “确定” 按钮的点击事件(对应 accepted 信号)和 “取消” 按钮的点击事件(对应 rejected 信号)与相应的处理方法绑定。当点击 “确定” 或 “取消” 按钮时,会弹出一个消息框提示用户。

相关推荐

Spring Boot + Vue.js 实现前后端分离(附源码)

作者:梁小生0101链接:juejin.im/post/5c622fb5e51d457f9f2c2381SpringBoot+Vue.js前后端涉及基本概念介绍,搭建记录,本文会列举出用到环...

C#一步一步实现自己的插件框架(四),从此告别代码紧耦合

初学者写程序一般就是拖控件,双击,然后写上执行的代码,这样在窗口中就有很多事件代码,如果要实现各按钮的状态,那得在很多地方修改代码,极为复杂.通过参考CSHARPDEVELOP的代码就说明和网上各位...

基于UI组件的Vue可视化布局、快速生成.vue代码

一、项目简介基于UI组件的Vue可视化布局、快速生成.vue代码二、实现功能通用(文本、链接、换行、div、图片)支持elementUI支持iViewUI(button、icon、radio、sel...

【开源资讯】ViewUI 4.2.0(原 iView)发布,企业级 UI 组件库

简介iView作者Aresn于2019年创办了北京视图更新科技有限公司,开始自由、全职地维护iView及其相关的软件。ViewUI即为原先的iView,从2019年10月起...

Python GUI 编程入门教程 第25章:记账本应用升级—类别统计与图表

25.1项目目标在第24章的月份筛选功能基础上,新增:类别输入:记录时选择支出/收入类别,例如:餐饮、交通、购物、工资、理财等类别统计:计算选定月份的各类别总额类别图表:生成饼图,展示各类别所占...

Python GUI 编程入门教程 第8章:文件处理、数据库操作与网络通信

8.1文件操作:处理本地文件与文件对话框在Tkinter应用中,文件操作是常见的需求。Tkinter提供了简单的文件对话框来帮助用户选择文件,并能通过Python内建的文件处理模块来读取和写入文件。...

手把手教你用Python做个可视化的“剪刀石头布”小游戏

/1前言/最近在学习PyQt5可视化界面,这是一个内容非常丰富的gui库,相对于tkinter库,功能更加强大,界面更加美观,操作也不难。于是我开始小试牛刀,用PyQt5做个可视化的“剪刀石头布”...

掌握基础技能快速用Python设计界面

我们在设计软件界面的时候,应该掌握一定的基础知识,不能我们看起来非常费解也很累。到后面设计界面的时候,很多基础知识不可能如你开始学的时候讲的那样仔细。熟练掌握Python的基本语法,如变量、数据类型...

Python GUI 编程入门教程 第22章:综合实战项目——记账本应用

22.1项目目标我们要开发一个带数据库的记账本,主要功能:添加收支记录(日期、类别、金额、备注)显示所有记录(表格形式)支持删除记录自动保存到SQLite数据库统计总收支22.2项目结构budge...

Python GUI 编程入门教程 第10章:高级布局与界面美化

10.1高级布局管理:使用grid和placeTkinter提供了三种常用的布局管理方式:pack、grid和place。在本章中,我们重点介绍grid和place,这两种布局方式相较于pack更加...

别再手动复制粘贴了!Python一招搞定取PDF内容,效率提升10倍!

别再手动复制粘贴了!Python一招搞定取PDF内容,效率提升10倍!还在为PDF内容提取头疼?100页的文档要折腾一下午?今天教你用Python几行代码搞定,10秒钟解决战斗,办公室小白也能轻松学会...

DearPyGui:GUI 性能秒杀 PyQt,揭秘 GPU 加速的 DearPyGui

什么是DearPyGui?嘿,最近我发现了一个超有意思的PythonGUI框架——DearPyGui。名字有点拗口,但它可不是随便起的。它基于C++和GPU渲染,性能吊打传统的Tki...

Python GUI 编程入门教程 第7章:事件绑定、动画效果与外部交互

7.1事件绑定:响应用户操作在Tkinter中,事件绑定允许你为控件添加响应函数,以处理用户的输入事件,如鼠标点击、键盘输入等。事件可以是各种形式的交互,如点击按钮、键盘按键等。7.1.1绑定鼠标...

Python GUI 编程入门教程 第21章:综合实战项目——记事本应用

21.1项目目标我们要实现一个简易版的记事本,具备以下功能:新建、打开、保存文件复制、粘贴、剪切、全选设置字体大小查找文字显示应用信息界面大致效果如下:+----------------------...

Python GUI 编程入门教程 第14章:构建复杂图形界面

14.1界面布局管理在Tkinter中,界面控件的排列是通过布局管理器来实现的。Tkinter提供了三种布局管理器:pack、grid和place,每种布局管理器都有其独特的用途和优势。14.1.1...