玩命加载中🤣🤣🤣

PyQt6 入门笔记


PyQt6

依赖安装

pip install PyQt6

#### 这里是使用了更新的pyside6,为了适配PyQt6.5+,同时python3.12+需要使用预览版
pip install pyside6 --pre
# 启动ui界面
pyside6-designer

安装 pyqt6-tools

截图

pip install ./pyqt6_plugins-6.4.2.2.3-py3-none-any.whl

配置 designer.exe

打开 pycharm - 工具 - 外部工具

截图

本次位置

D:\dee_code\20250712_pyqt\pyqt\.venv\Lib\site-packages\qt6_applications\Qt\bin\designer.exe

配置外部工具 PYUIC

程序:python.exe 路径

实参:-m PyQt6.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py

工作目录:$FileDir$

截图

在 pycharm - 工具 - 外部工具 - QTDesigner

截图

Ctrl + R 预览

Ctrl + S 报错文件

在 pycharm 中使用外部工具 PyUIC 来测试生成 python 文件

HelloWorld实现

from PyQt6.QtWidgets import QApplication, QWidget, QLabel

import sys

app = QApplication(sys.argv) # 创建一个应用
print(sys.argv) # ['D:\\dee_code\\20250712_pyqt\\pyqt\\入门实例\\hello_world.py', '111', '222', '333']
print(app.arguments()) # ['D:\\dee_code\\20250712_pyqt\\pyqt\\入门实例\\hello_world.py', '111', '222', '333']

window = QWidget() # 开启一个窗口
window.setWindowTitle("hello dee")
window.resize(400, 300) # 长宽
window.move(300, 200) # 以左上角为坐标设置位置
window.show()

label = QLabel()
label.setText("python dee, 你好")
label.move(80, 80) # 位置
label.resize(150, 50) # 长宽
label.setStyleSheet("background-color:#587add;padding:10px") # 样式
label.setParent(window) # 以window为父控件
label.show()


sys.exit(app.exec()) # 开始执行程序,并且消息循环 | sys.exit() 退出程序可以显示报错码

截图

QTDesigner生成ui文件程序

控件

控件名 说明
QWidget/windowTitle 主题窗口名称
QWidget/geometry x/y(父组件左上角的位置)
QWidget/baseSize 宽度/高度(基础宽高)

通过python使用ui文件

先生成 ui 文件

from PyQt6.QtWidgets import QApplication
from PyQt6 import uic
import sys


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ui = uic.loadUi("../files/ui文件.ui")
    ui.show()
    sys.exit(app.exec())

运行QTDesigner生成UI文件转成的Python源码

先在 pycharm 中使用外部工具 PyUIC 来测试生成 python 源码

然后使用py运行工具

# Form implementation generated from reading ui file 'ui文件.ui'
#
# Created by: PyQt6 UI code generator 6.4.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
# run again.  Do not edit this file unless you know what you are doing.
import sys

from PyQt6 import QtCore, QtGui, QtWidgets
from PyQt6.QtWidgets import QApplication, QWidget


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(400, 300)
        Form.setBaseSize(QtCore.QSize(500, 400))
        self.label = QtWidgets.QLabel(parent=Form)
        self.label.setGeometry(QtCore.QRect(80, 40, 101, 16))
        self.label.setObjectName("label")

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "qt-dee"))
        self.label.setText(_translate("Form", "Python是谁"))

if __name__ == '__main__':
    app = QApplication(sys.argv)

    w = QWidget()
    Ui_Form().setupUi(w) # 创建实例
    w.show()
    sys.exit(app.exec())

PyQt6常用控件

QLabel 标签

设置标签文本:text

对齐方式:alignment

截图

设置文本换行显示(文本过多可以自动换行):wordWrap

支持链接:openExrernalLinks

截图

图片:pixmap

截图

控件获取

import sys

from PyQt6 import uic
from PyQt6.QtWidgets import QApplication, QLabel

if __name__ == "__main__":
    app = QApplication(sys.argv)

    ui = uic.loadUi("../files/qlabel.ui")
    mylabel: QLabel = ui.label # 获取标签控件
    print(mylabel.text()) ## 用户名
    ui.show()

    sys.exit(app.exec())

QLineEdit 单行文本框

占位:placeholderTest

截图

聚焦:Qwidget/focusPolicy

截图

显示模式:echoMode

截图

掩码:inputMask

日期掩码:0000-00-00
时间掩码:00:00:00
序列号掩码:AAAAA-AAAAA-AAAAA-AAAAA-AAAAA

截图

验证器:validator

## 设置验证器 QIntValidator 限制整数 QDoubleValidator 限制小数 QRegularExpressionValidator 限制正则
self.xxx.setValidator(QIntValidator())

QTextEdit 多行富文本框

QTextEdit 是多行文本框控件,当文本内容超出控件范围,将显示垂直滚动条;另外,QTextEdit还支持 HTML 网页

import sys

from PyQt6 import uic, QtGui
from PyQt6.QtWidgets import QApplication, QLabel, QTextEdit

if __name__ == "__main__":
    app = QApplication(sys.argv)

    ui = uic.loadUi("../files/qtextedit.ui")
    myTextEdit: QTextEdit = ui.textEdit # 获取标签控件
    myTextEdit2: QTextEdit = ui.textEdit_2


    myTextEdit.setTextColor(QtGui.QColor("#FF0000")) # 设置颜色(要在设置文字之前)
    myTextEdit.setTextBackgroundColor(QtGui.QColor("#00FF00")) # 设置背景颜色

    myTextEdit.setPlainText("这是纯文本") # 设置纯文本
    myTextEdit2.setHtml("<a href=\"http://localhost:2323\">这是一个HTML</a>") # 设置HTML

    print(myTextEdit.toPlainText()) # 获取纯文本
    print(myTextEdit2.toHtml()) # 获取HTML

    # myTextEdit.clear() # 清空

    ui.show()
    sys.exit(app.exec())

截图

行模式:lineWrapMode

WidgetWidth:
FixedPixelWidth: 距离左边多少像素换行,要和 lineWrapColumnOrWidth 搭配使用
FixedColumnWidth:距离左边多少列换行,要和 lineWrapColumnOrWidth 搭配使用

QPlainTextEdit 纯文本

常用方法

setPlainText()
toPlainText()
setLineWrapMode()
clear()
overwriteMode()

QSpinBox 整数数字选择

QSpinBox 该控件提供一对上下箭头,可以单击上下箭头选择数值,也可以直接输入,如果输入的数值大于设置的最大值,或者小于设置的最小值,将不会接受输入

常用属姓

suffix 后缀
prefix 前缀
minimum 最小值
maximum 最大值
singleStep 步长
value 默认值

截图

QDoubleSpinBox 小数数字选择

基本和整数一样,略

QLCDNumber 液晶数字

QPushButton 按钮

属姓

text 显示文本
icon 设置图标
iconSize 图标大小
shortcut 设置快捷键
checkable 设置是否自动切换按钮
checked 设置默认选中状态
autoRepeat 设置是否会在用户按下时自动重复(连续射击场景)
autoExclusive 设置是否启用自动排他性(设置这个可以变成多选)
autoRepeatDelay 自动重复初始延迟(以毫秒为单位)
autoRepeatInterval 自动重复的时间间隔(以毫秒为单位)

QToolButton 工具按钮

本质是按钮,只是在按钮中提供了默认文本 “…” 和可选的箭头类型

## 与 QPushButton 的区别
popupMode 弹出按钮
toolButtonStyle 按钮样式:ToolButtonIconOnly 仅显示图标;ToolButtonTextOnly 仅显示文字;

截图

QCommandLinkButton 命令链接按钮

截图

QRadioButton 单选按钮

方法

setText() # 设置单选框显示的文本
text() # 获取单选按钮显示的文本
setChecked seCheckable() # 设置选中状态
isChecked() # 返回单选框的状态

截图

QCheckBox 复选框按钮

常用方法

setTristate() # 设置半选中状态
checkState() # 查询状态
# 选中状态:QT.Checked 选中;QT.PartiallyChecked 半选中;QT.Unchecked 未选中

QComboBox 下拉组合框

截图

常用属姓

maxVisibleItems 最大可见条数
insertPolicy 参数策略:一般默认
sizeAdjustPolicy 尺寸调整策略:一般默认
placeholderText 提示:

常用方法

addItem() # 添加一个下拉列表项
addItems() # 从列表中添加下拉选项
currentText() # 获取选中项的文本
currentIndex() # 获取选中项的索引
itemText(index) # 获取索引为index的项的文本
setItemText(index, text) # 设置索引为index的项的文本
count() # 获取所有选项的数量
clear() # 删除所有选项

示例

import sys
from pathlib import Path

from PyQt6 import uic
from PyQt6.QtGui import QIcon
from PyQt6.QtWidgets import QApplication, QComboBox

if __name__ == "__main__":
    app = QApplication(sys.argv)

    ui = uic.loadUi(Path("../files/qcombox.ui"))
    my_comboBox: QComboBox = ui.comboBox
    sections = ["跑步", "游泳", "骑行"]

    my_comboBox.addItems(sections) # 设置选项
    my_comboBox.addItem(QIcon("../icon/file.svg"), "其他") # 设置图标选项

    ui.show()
    sys.exit(app.exec())

截图

QFontComboBox 字体组合框

属姓

writingSystem 语言:如 SimplifiedChinese
fontFilters:AllFonts 所有字体;ScalableFonts 可伸缩的字体;NonScalableFonts 不可伸缩的字体;MonospacedFonts 等宽字体;ProportionalFonts 等比字体;

截图

QListWidget 列表

常用属姓

wordWrap 横着的字太多了是否换行,不换行就是滚动条
selectionMode 是否多选:SingleSelection 单选;MultiSelection 多选;ExtendedSelection 按ctrl或shift可以多选。。。
selectionBehavior 选择模式:SelectItems 选项;SelectRows 选择行(常用);SelectColumns 选择整列(要搭配listMode来用)

截图

示例及方法

import sys
from pathlib import Path

from PyQt6 import uic
from PyQt6.QtWidgets import QApplication, QListWidget, QListWidgetItem

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ui = uic.loadUi(Path("../files/qlistwidget.ui"))
    my_listWidget: QListWidget = ui.listWidget

    lwi = QListWidgetItem()
    lwi.setText("阿刁 11111111111111111 222222222222222222222")
    lwi.setToolTip("张韶涵")

    # 添加项(通过创建QListWidgetItem对象)
    my_listWidget.addItem(lwi)
    # 添加项(通过直接添加文本)
    my_listWidget.addItem("deadman")
    # 添加项(通过添加多个文本)
    my_listWidget.addItems(["千年等一回", "推开世界的门"])

    # 设置当前项
    my_listWidget.setCurrentItem(lwi)
    # 获取当前项
    selectedItemList = my_listWidget.selectedItems() # 获取所有选中的
    for item in selectedItemList:
        print(item.text())


    ui.show()
    sys.exit(app.exec())

QTabWidget 选项卡

常用属性

elideMode 省略模式: ElideLeft 省略左边;ElideRight 省略右边;ElideNone 不省略;
usesScrollButtons 滚动按钮
documentMode 文件模式(默认有窗口)
tabsClosable 可关闭
moveable 可移动

截图

示例

import sys
from pathlib import Path

from PyQt6 import uic
from PyQt6.QtGui import QIcon
from PyQt6.QtWidgets import QApplication, QTabWidget, QWidget

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ui = uic.loadUi(Path("../files/qtabwidget.ui"))
    my_tabWidget: QTabWidget = ui.tabWidget


    tab = QWidget()
    # 添加一个标签
    my_tabWidget.addTab(tab, "测试")

    tab = QWidget()
    # 添加一个标签(带图标的)
    my_tabWidget.addTab(tab, QIcon("../icon/file.svg"), "测试带图标的")

    ui.show()
    exit(app.exec())

QToolBox 工具盒

类似qq的列表分组,略

QDateTimeEdit 日期时间

常用属性

dateTime 设置默认日期
displayFormat 展示格式:yyyy-MM-dd HH:mm:ss
calendarPopup 日历:默认都勾上

截图

示例

import sys
from pathlib import Path

from PyQt6 import uic
from PyQt6.QtCore import QDate, QTime
from PyQt6.QtWidgets import QApplication, QDateTimeEdit

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ui = uic.loadUi(Path("../files/qdatetimeedit.ui"))
    my_dateTimeEdit: QDateTimeEdit = ui.dateTimeEdit

    # 默认时间 >>>  PyQt6.QtCore.QDateTime(2024, 12, 12, 0, 0)
    print(f"默认时间 >>>  {my_dateTimeEdit.dateTime()}")
    # 设置日期和时间 (在原来的日期前+1)
    my_dateTimeEdit.setDateTime(my_dateTimeEdit.dateTime().addDays(1))
    # 修改后时间 >>>  PyQt6.QtCore.QDateTime(2024, 12, 13, 0, 0)
    print(f"修改后时间 >>>  {my_dateTimeEdit.dateTime()}")



    ui.show()

    # 设置日期
    my_dateTimeEdit.setDate(QDate(2025, 5, 21))
    # 设置时间
    my_dateTimeEdit.setTime(QTime(13, 23, 33))
    # 修改后时间 >>>  2025-05-21 13:23:33
    print(f"修改后时间 >>>  {my_dateTimeEdit.dateTime().toString('yyyy-MM-dd hh:mm:ss')}")

    sys.exit(app.exec())

QCalendarWidget 日历

属性默认即可,其余略

截图

PyQt6布局管理

垂直布局Vertical Layout (QVBoxLayout)

常用属性

layoutLeftMargin 左边距
xxxMargin 上下左右边距
layoutSpacing 控件之间的间距
layoutStretch 控件的大小比例(按钮不进行伸缩)
layoutSizeConstraint 用来约束窗体大小,只影响窗体,一般默认就行

截图

水平布局Horizontal Layout (QHBoxLayout)

和垂直基本一样,略

网格布局GridLayout (QGridLayout)

截图

表单布局Form Layout(QGridLayout)

截图

PyQt6高级控件

QMenuBar 菜单栏控件

菜单栏控件QMenuBar,涉及到 主窗体控件(QMainWindow)

主窗体类时通用的主窗体,包含菜单栏(QMenuBar),工具栏(QToolBar),悬停部件(QDockWidget),中央部件(Central Widget),状态栏(QStatuesBar)等基本类型

截图

示例

# Form implementation generated from reading ui file 'qmainwindow.ui'
#
# Created by: PyQt6 UI code generator 6.4.2
#
# WARNING: Any manual changes made to this file will be lost when pyuic6 is
# run again.  Do not edit this file unless you know what you are doing.


from PyQt6 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        # 获取中央部
        self.centralwidget = QtWidgets.QWidget(parent=MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        # 设置中心部部件
        MainWindow.setCentralWidget(self.centralwidget)
        # 菜单栏
        self.menubar = QtWidgets.QMenuBar(parent=MainWindow)
        # 设置菜单栏位置
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 33))
        self.menubar.setObjectName("menubar")
        # 菜单
        self.student_manage = QtWidgets.QMenu(parent=self.menubar)
        self.student_manage.setObjectName("student_manage")
        # 菜单-学生类别管理
        self.student_type = QtWidgets.QMenu(parent=self.student_manage)
        self.student_type.setObjectName("student_type")
        # 添加菜单栏
        MainWindow.setMenuBar(self.menubar)
        # 状态栏
        self.statusbar = QtWidgets.QStatusBar(parent=MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        # 菜单项
        self.add = QtGui.QAction(parent=MainWindow)
        self.add.setObjectName("add")
        self.modify = QtGui.QAction(parent=MainWindow)
        self.modify.setObjectName("modify")
        self.type_add = QtGui.QAction(parent=MainWindow)
        self.type_add.setObjectName("type_add")
        self.type_modify = QtGui.QAction(parent=MainWindow)
        self.type_modify.setObjectName("type_modify")
        self.student_type.addAction(self.type_add)
        self.student_type.addAction(self.type_modify)
        self.student_manage.addAction(self.add)
        self.student_manage.addSeparator()
        self.student_manage.addAction(self.modify)
        self.student_manage.addAction(self.student_type.menuAction())
        self.menubar.addAction(self.student_manage.menuAction())

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.student_manage.setTitle(_translate("MainWindow", "学生管理"))
        self.student_type.setTitle(_translate("MainWindow", "学生类别管理"))
        self.add.setText(_translate("MainWindow", "添加"))
        self.modify.setText(_translate("MainWindow", "修改"))
        self.type_add.setText(_translate("MainWindow", "学生类别添加"))
        self.type_modify.setText(_translate("MainWindow", "学生类别修改"))

QToolBar 工具栏

在 designer 中右键-添加工具栏即可

示例

import sys
from pathlib import Path

from PyQt6 import uic
from PyQt6.QtGui import QIcon
from PyQt6.QtWidgets import QApplication, QToolBar

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ui = uic.loadUi(Path("../files/qtoolbar.ui"))

    my_toolBar: QToolBar = ui.toolBar
    # toolButtonStyle=ToolButtonUnderIcon
    my_toolBar.addAction(QIcon("../icon/file.svg"), "新建")

    my_toolBar.addSeparator()

    my_toolBar.addAction(QIcon("../icon/file.svg"), "保存")

    ui.show()

    sys.exit(app.exec())

QStatusBar 状态栏

默认就是有的

示例

import sys
from pathlib import Path

from PyQt6 import uic
from PyQt6.QtWidgets import QApplication, QStatusBar, QLabel

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ui = uic.loadUi(Path("../files/qstatusbar.ui"))
    my_statusbar: QStatusBar = ui.statusbar

    my_label = QLabel()
    my_label.setText("版权所有:dee.cn")
    my_label.unsetCursor()
    # 添加控件
    my_statusbar.addWidget(my_label)

    my_label2 = QLabel()
    my_label2.setText("作者:dee")
    my_label2.unsetCursor()
    # 添加永久性的控件(位于状态栏右侧)
    my_statusbar.addPermanentWidget(my_label2)

    # 临时信息
    my_statusbar.showMessage("当前信息", 3000)


    ui.show()
    sys.exit(app.exec())

截图

QProgressBar 进度条控件

截图

QSlider 滑块控件

截图

QTreeView 树视图

属性

【QTreeView属性】
autoExpandDelay 拖放操作期间打开树中项目之前的延迟时间
indentation 树视图中项目的缩进
rootIsDecorated 是否显示用于展开和折叠顶级项目的控件
uniformRowHeights 所有项目是否具有相同的高度
itemsExpandable 项目是否可由用户展开
animated 是否启用动画
allcolumnsShowFocus 项目是否应使用所有列显示键盘焦点
wordwrap 文本自动换行策略
headerHidden 标头是否显示
expandsOnDoubleClick 是否可以通过双击扩展项目

【QTreeView属性】
columnCount 显示的列数

【Header属性】
headerVisible 是否显示标题
headerCascadingSectionResizes 标题列宽联动调整大小
headerDefaultSectionSize 默认标题列宽大小
headerHighlightSections 所选项目的部分是否突出显示
headerMinimumSectionSize 标题可调节的最小尺寸
headerShowSortIndicator 标题显示排序指行器
headerStretchLastSection 是否可调节最后一列的宽度

截图

示例

import sys
from pathlib import Path

from PyQt6 import uic
from PyQt6.QtGui import QStandardItemModel, QStandardItem
from PyQt6.QtWidgets import QApplication, QTreeView

if __name__ == "__main__":
    app = QApplication(sys.argv)

    ui = uic.loadUi(Path("../files/qtreeview.ui"))
    my_treeView: QTreeView = ui.treeView

    model = QStandardItemModel()
    model.setHorizontalHeaderLabels(["分类", "书名", "作者", "价格"])


    bookType1 = QStandardItem("小说") # 添加一级节点
    bookType2 = QStandardItem("历史") # 添加一级节点
    bookType3 = QStandardItem("诗歌") # 添加一级节点
    model.appendRow([bookType1])
    model.appendRow([bookType2])
    model.appendRow([bookType3])

    bookType1.appendRow([QStandardItem(""), QStandardItem("《水浒传》"), QStandardItem("施耐庵"), QStandardItem("¥10.0")])
    bookType1.appendRow([QStandardItem(""), QStandardItem("《三国演义》"), QStandardItem("罗贯中"), QStandardItem("¥20.0")])
    bookType2.appendRow([QStandardItem(""), QStandardItem("《史记》"), QStandardItem("司马迁"), QStandardItem("¥30.0")])
    bookType3.appendRow([QStandardItem(""), QStandardItem("《水调歌头》"), QStandardItem("苏轼"), QStandardItem("¥40.0")])
    bookType3.appendRow([QStandardItem(""), QStandardItem("《登高》"), QStandardItem("王之涣"), QStandardItem("¥50.0")])
    my_treeView.setModel(model)
    
    # 展示所有节点
    my_treeView.expandAll()


    ui.show()
    sys.exit(app.exec())

截图

QTreeWidge 树控件

【QTreeWidge树控件】是【QTreeView树视图】的子控件

独有属性

columnCount 显示的列数

截图

QFrame 分割线

QSpacerItem 弹簧

截图

QDial 旋钮控件

截图

QScrollBar 滚动条

一般和ScrollArea、TableWidget表格等。也可以使用滚动条控件实现与滑块控件同样的功能

对话框控件

QMessageBox 对话框

示例

import sys
from pathlib import Path

from PyQt6 import uic
from PyQt6.QtWidgets import QApplication, QPushButton, QMessageBox


def show_info():
    result = QMessageBox.information(None, "消息对话框标题", "消息对话框内容", QMessageBox.StandardButton.Ok | QMessageBox.StandardButton.Cancel)
    if result == QMessageBox.StandardButton.Ok:
        print("点击了确定")
    elif result == QMessageBox.StandardButton.Cancel:
        print("点击了取消")

def show_critical():
    QMessageBox.critical(None, "错误对话框标题", "错误对话框内容", QMessageBox.StandardButton.Ok)

def show_question():
    QMessageBox.question(None, "问答对话框标题", "问答对话框内容", QMessageBox.StandardButton.Apply)

def show_about():
    # 关于不能加按钮
    QMessageBox.about(None, "关于对话框标题", "关于对话框内容")

def show_warning():
    QMessageBox.warning(None, "警告对话框标题", "警告对话框内容", QMessageBox.StandardButton.Ok)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ui = uic.loadUi(Path("../files/qmessagebox.ui"))

    info_btn: QPushButton = ui.info_btn
    critical_btn: QPushButton = ui.critical_btn
    question_btn: QPushButton = ui.question_btn
    about_btn: QPushButton = ui.about_btn
    warning_btn: QPushButton = ui.warning_btn

    # 绑定点击事件
    info_btn.clicked.connect(show_info)
    critical_btn.clicked.connect(show_critical)
    question_btn.clicked.connect(show_question)
    about_btn.clicked.connect(show_about)
    warning_btn.clicked.connect(show_warning)

    ui.show()
    sys.exit(app.exec())

截图

QFileDialog 文件对话框

示例

import sys
from pathlib import Path

from PyQt6 import uic
from PyQt6.QtWidgets import QApplication, QPushButton, QFileDialog


def select_file():
    fd = QFileDialog()
    # 文件模式:设置多选
    fd.setFileMode(QFileDialog.FileMode.ExistingFiles)
    # 设置初始化路径
    fd.setDirectory(f"D:\Admin\Pictures")
    # 文件过滤器
    fd.setNameFilter("图片文件(*.jpg *.png *.bmp *.ico *.gif)")
    if fd.exec():
        # 获取选择的文件列表
        print(fd.selectedFiles()) # ['D:/Admin/Pictures/pic/132.jpg', 'D:/Admin/Pictures/pic/133.jpg', 'D:/Admin/Pictures/pic/134.jpg']


if __name__ == "__main__":
    app = QApplication(sys.argv)
    ui = uic.loadUi(Path("../files/qfiledialog.ui"))

    pushButton: QPushButton = ui.pushButton
    pushButton.clicked.connect(select_file)

    ui.show()
    sys.exit(app.exec())

截图

QInputDialog 输入对话框控件

示例

import sys
from pathlib import Path

from PyQt6 import uic
from PyQt6.QtWidgets import QApplication, QInputDialog, QLineEdit


def get_name(form_layout_widget, name_input):
    # 输入框
    result = QInputDialog.getText(form_layout_widget, "姓名", "请输入你的名字", QLineEdit.EchoMode.Normal, "")
    print(result) # (str, boolean) 元组
    name, ok = result
    if ok:
        name_input.setText(name)
    else:
        name_input.setText("")


def get_class(form_layout_widget, class_input):
    # 下拉框
    result = QInputDialog.getItem(form_layout_widget, "班级", "请选择你的班级", ["1班", "2班", "3班", "4班"], 0, True)
    print(result) # (str, boolean) 元组
    class_name, ok = result
    if ok:
        class_input.setText(class_name)

    pass


def get_age(form_layout_widget, age_input):
    result = QInputDialog.getInt(form_layout_widget, "年龄", "请输入你的年龄", 18, 0, 100)
    print(result)
    age, ok = result
    if ok:
        age_input.setText(str(age))
    pass


def get_score(form_layout_widget, score_input):
    result = QInputDialog.getDouble(form_layout_widget, "分数", "请输入你的分数", 60.0, 0.0, 100.0)
    print(result)
    score, ok = result
    if ok:
        score_input.setText(str(score))
    pass


if __name__ == "__main__":
    app = QApplication(sys.argv)
    ui = uic.loadUi(Path("../files/qinputdialog.ui"))

    # 获取输入框
    form_layout_widget = ui.formLayoutWidget

    name_input: QLineEdit = ui.name_input
    # 绑定回车事件
    name_input.returnPressed.connect(lambda: get_name(form_layout_widget, name_input))

    class_input: QLineEdit = ui.class_input
    class_input.returnPressed.connect(lambda: get_class(form_layout_widget, class_input))

    age_input: QLineEdit = ui.age_input
    age_input.returnPressed.connect(lambda: get_age(form_layout_widget, age_input))

    score_input: QLineEdit = ui.score_input
    score_input.returnPressed.connect(lambda: get_score(form_layout_widget, score_input))

    ui.show()
    sys.exit(app.exec())

截图

QFontDialog 字体对话框控件

QColorDialog 颜色对话框控件

返回颜色对象,略

QTableWidget 表格控件

后期填充

Qtimer 计时器控件

示例

import sys
from pathlib import Path

from PyQt6 import uic
from PyQt6.QtCore import QTimer, QDateTime
from PyQt6.QtWidgets import QApplication, QPushButton, QLabel


def show(label):
    # 获取当前时间
    time = QDateTime.currentDateTime()
    label.setText(time.toString("yyyy-MM-dd hh:mm:ss"))


def start(timer, label: QLabel):
    timer.start(1000)  # 1s执行1次
    # 绑定定时器
    timer.timeout.connect(lambda: show(label))


def stop(timer, label: QLabel):
    timer.stop()
    label.setText("计时器已停止")


if __name__ == "__main__":
    app = QApplication(sys.argv)
    ui = uic.loadUi(Path("../files/qtimer.ui"))

    timer = QTimer(ui)

    start_button: QPushButton = ui.start
    end_button: QPushButton = ui.end
    label: QLabel = ui.label

    start_button.clicked.connect(lambda: start(timer, label))
    end_button.clicked.connect(lambda: stop(timer, label))

    ui.show()
    sys.exit(app.exec())

截图

QObject类

示例

import sys
from pathlib import Path

from PyQt6 import uic
from PyQt6.QtWidgets import QApplication, QLabel

if __name__ == "__main__":
    app = QApplication(sys.argv)
    # 加载qss样式
    with open("../qss/label.qss", "r", encoding="utf-8") as f:
        app.setStyleSheet(f.read())
    ui = uic.loadUi(Path("../files/qobject.ui"))

    label: QLabel = ui.label
    label_2: QLabel = ui.label_2
    label_3: QLabel = ui.label_3

    label.setProperty("level", "info")
    label_2.setProperty("level", "error")
    label_3.setProperty("level", "warning")

    ui.show()
    sys.exit(app.exec())

样式文件 qss/label.qss

/* 作用整个标签 */
QLabel {
    color: #445c86;
}

/* 作用属性 */
QLabel[level="error"] {
    color: #e40953;
}

/* 作用ID */
QLabel#label_3 {
    color: #a27742;
    font-size: 18px;
}

效果

截图

信号与槽

示例

import sys
from pathlib import Path

from PyQt6 import uic
from PyQt6.QtWidgets import QApplication, QLabel, QPushButton, QLineEdit

# 计算方法
def add(a: int, b: int, result_edit):
    result_edit.setText(str(a + b))

# 样式方法
def style(edit: QLineEdit):
    # 设置背景颜色
    edit.setStyleSheet("background-color: #b538fd")
    # 显示结果
    edit.setHidden(False)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    ui = uic.loadUi(Path("../files/信号与槽.ui"))

    # 初始化result_label
    result_edit: QLabel = ui.result_edit
    # 先隐藏结果
    result_edit.setHidden(True)

    edit: QLineEdit = ui.edit
    edit2: QLineEdit = ui.edit2

    to_do: QPushButton = ui.to_do
    # 回调计算
    to_do.clicked.connect(lambda: add(int(edit.text()), int(edit2.text()), result_edit))
    # 回调样式
    to_do.clicked.connect(lambda: style(result_edit))

    ui.show()
    sys.exit(app.exec())

截图


文章作者: 👑Dee👑
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 👑Dee👑 !
  目录