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())