pyqt5 简易入门教程
1. 安装
pip install PyQt5 PyQt5-tools
2. 创建主窗口
import sys
from PyQt5.QtWidgets import QWidget,QApplication
# 创建应用程序
app = QApplication(sys.argv)
# 创建窗口
w = QWidget()
# 设置窗口标题,在窗口顶端左侧显示
w.setWindowTitle("First PyQt") # 设置窗口标题
# 设置窗口尺寸,两种方式,推荐方式1
w.setGeometry(100,100,1000,500) # 设置窗口尺寸,方法1,推荐(相对屏幕的起始x坐标,相对屏幕的起始y坐标,宽度,高度)
# w.resize(640,480) # 设置窗口尺寸,方法2(宽度,高度)
# 显示窗口
w.show()
# 循环执行app程序,直至app程序结束
sys.exit(app.exec())
说明: sys.exit(app.exec_()):
在 PyQt 或 PySide 应用程序中,sys.exit(app.exec_()) 是一个常见的语句,用于启动应用程序的事件循环并正确处理程序的退出。
具体来说:
app.exec_() 启动了 Qt 应用程序的事件循环,这是 GUI 应用程序的核心,负责处理用户交互、绘制界面等事件
将其作为参数传递给 sys.exit() 可以确保在事件循环结束时,程序能够正确地返回一个退出状态码给操作系统
在 Python 中,exec_() 末尾的下划线是因为 exec 是 Python 的关键字,所以 Qt 使用 exec_() 作为方法名
3. 添加组件--按钮
1. 创建按钮
2. 设置按钮名称,尺寸
3. 设置按钮的父窗口
4. 给按钮添加槽函数:on_btn_clicked()
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton
def on_btn_clicked():
print("button clicked")
# 创建app
app = QApplication(sys.argv)
# 创建并配置窗口
w = QWidget() # 创建窗口
w.setWindowTitle("First PyQt") # 设置窗口标题
w.setGeometry(100,100,1000,500) # 设置窗口尺寸
######################################################################
# 添加按钮
## 创建按钮,设置按钮名称
btn = QPushButton("Button")
## 设置按钮的父窗口
btn.setParent(w) # 设置按钮的父亲是当前窗口,等于是添加到窗口中显示
## btn = QPushButton("name = Button",parent=w) # 创建按钮,设置按钮上的文字,指定按钮的父窗口,等价于以上两个命令
## 修改按钮名称
btn.setText("12346") # 设置按钮上的文字,覆盖创建按钮时的命名
btn_txt = btn.text() # 提取按钮上的文字
## 设置按钮的位置、尺寸
btn.setGeometry(10,10,200,20) # 设置按钮尺寸,位置
## 给按钮添加槽函数
btn.clicked.connect(on_btn_clicked) # 槽函数需要在该命令之前定义
##########################################################################
# 展示窗口
w.show()
# 循环执行窗口命令
sys.exit(app.exec_())
4. 添加组件--label
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QLabel
# 创建窗口
app = QApplication(sys.argv)
w = QWidget()
w.setWindowTitle("First PyQt") # 设置窗口标题
w.setGeometry(100,100,1000,500) # 设置窗口初始位置,尺寸
######################################################################
## 添加label ,创建之初指定父亲
label = QLabel("I am the created label:",w) # 创建label,设置label------name, label 的父窗口
label.setGeometry(10,10,200,20) # 设置label的位置与大小(x起始坐标,y起始坐标, x尺寸,y尺寸)
# 不设置尺寸时,尺寸自适应,默认位置是(0,0)
#####################################################################
# 展示窗口
w.show()
sys.exit(app.exec_()) # 程序进入循环等待状态
5. 添加组件--单行文本框
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QLabel,QLineEdit
# 创建窗口
app = QApplication(sys.argv)
w = QWidget()
w.setWindowTitle("First PyQt") # 设置窗口标题
w.setGeometry(100,100,1000,500) # 设置窗口尺寸
## 添加label ,创建之初指定父亲
label = QLabel("Account:",w)
label.setGeometry(100,100,100,20) # 设置label的位置与大小(x起始坐标,y起始坐标, x尺寸,y尺寸)
######################################################################
## 添加文本框,添加文本框之初指定父亲
line_edit = QLineEdit(w) # 创建文本框的同时指定父窗口
line_edit.setPlaceholderText("请输入账号") # 设置文本框中的显示文本。该文本不是正式文本,仅用于提示
line_edit.setGeometry(200,100,200,20) # 设置单行文本框的位置、尺寸
# line_edit.setText("kkkkkkk") # 设置单行文本框的初始文本,正式内容,可以被用户操作覆盖
text = line_edit.text() # 提取单行文本框中的文本
print("QLineEdit data = ",text)
###########################################################################
# 展示窗口
w.show()
sys.exit(app.exec_()) # 程序进入循环等待状态
如果要多个窗口组件联动,需要创建一个类,管理所有的组件,以及对应的成员变量。
6. 添加组件--创建文本编辑框
import sys
from PyQt5.QtWidgets import QApplication,QWidget,QPushButton,QLabel,QLineEdit,QTextEdit
# 创建窗口
app = QApplication(sys.argv)
w = QWidget()
w.setWindowTitle("文本框测试窗口")
w.resize(600,600)
#######################################################################
# 添加文本编辑框
txt_editor = QTextEdit("景甜来了",w) # 设置初始文本内容,设置父窗口,等价于下面的两行
# txt_editor = QTextEdit("景甜来了") # 设置初始文本内容
# txt_editor.setParent(w) # 设置父窗口
# txt_editor.move(100,100) # 设置文本框的初始位置,宽度,高度采用默认设置
txt_editor.setGeometry(10,10,300,300)
# txt_editor.setStyleSheet("background-color:cyan;") # 设置文本框的背景颜色
txt_editor.setPlainText("hello, 你好") # 设置/覆盖文本框的文本内容
txt_editor.append("lllllll") # 追加文本
text_data = txt_editor.toPlainText() # 提取文本框中的文本数据
print(text_data)
###########################################################################
w.show()
sys.exit(app.exec_())
7. 添加组件--列表单选
import sys
from PyQt5.QtWidgets import QApplication,QMainWindow,QWidget
from PyQt5.QtWidgets import QVBoxLayout,QHBoxLayout
from PyQt5.QtWidgets import QGroupBox,QLabel
from PyQt5.QtWidgets import QPushButton, QRadioButton,QListWidget,QComboBox,QMessageBox
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont
#### 定义一个字体
font = QFont() # 设置字体
font.setPointSize(16)
font.setBold(True)
font_simhei = QFont("SimHei",10)
font_simhei_bold = QFont("SimHei",10,QFont.Bold)
# 创建应用
app = QApplication(sys.argv)
w = QWidget()
w.setWindowTitle("测试单选选项")
w.setGeometry(100,100,600,400)
##########################################################
# 添加组合
radio_layout = QVBoxLayout(w)
radio_layout.setContentsMargins(20,20,20,20)
# 添加label
label = QLabel("单选列表")
radio_layout.addWidget(label)
# 添加选项
radio1 = QRadioButton("选项A")
radio1.setChecked(True)
radio_layout.addWidget(radio1)
radio2 = QRadioButton("选项B")
radio_layout.addWidget(radio2)
radio3 = QRadioButton("选项C")
radio_layout.addWidget(radio3)
radio4 = QRadioButton("选项D")
radio_layout.addWidget(radio4)
# 打印选择
radio4_selected = radio4.isChecked()
radio4_txt = radio4.text()
print(f"radio4_name = {radio4_txt},is_checked = {radio4_selected}")
###########################################################################
# 显示窗口
w.show()
sys.exit(app.exec_())
8. 添加组件--文件浏览框
import sys
from PyQt5.QtWidgets import QApplication,QMainWindow,QWidget,QVBoxLayout
from PyQt5.QtWidgets import QHBoxLayout,QPushButton,QLineEdit,QLabel,QFileDialog
from PyQt5.QtCore import Qt
app = QApplication(sys.argv)
w = QWidget()
w.setWindowTitle("文件浏览框")
w.setGeometry(100,100,500,300)
###############################################
def on_btn_browse_file():
"""打开文件选择对话框"""
## 获取选中的文件路径
# QFileDialog.getOpenFileName() 返回一个数组:(文件路径,文件过滤器)
file_path,_ = QFileDialog.getOpenFileName(
w, # 父窗口
"选择文件", # 对话框标题
"", # 初始目录,默认为当前目录
"所有文件(*);;文本文件(*.txt);;python 文件(*.py)") # 文件过滤器
# 如果选择了文件,更新文本框
print(f"选择的文件是:{file_path}")
# 添加按钮,用于弹出对话框,选择文件,需要添加响应函数
btn = QPushButton("浏览...",parent=w)
btn.move(100,100) # 移动位置
btn.clicked.connect(on_btn_browse_file)
######################################################
w.show()
sys.exit(app.exec_())
9. 添加组件--文件夹浏览框
import sys
from PyQt5.QtWidgets import QApplication,QMainWindow,QWidget,QVBoxLayout
from PyQt5.QtWidgets import QHBoxLayout,QPushButton,QLineEdit,QLabel,QFileDialog
from PyQt5.QtCore import Qt
app = QApplication(sys.argv)
w = QWidget()
w.setWindowTitle("文件浏览框")
w.setGeometry(100,100,500,300)
###############################################
def on_btn_browse_folder():
"""打开文件夹选择对话框"""
folder_path = QFileDialog.getExistingDirectory(parent=w,caption="选择文件夹",directory="")
print(f"选择的文件夹路径是:{folder_path}")
# 添加按钮,用于弹出对话框,选择文件,需要添加响应函数
btn = QPushButton("浏览...",parent=w)
btn.move(100,100) # 移动位置
btn.clicked.connect(on_btn_browse_folder)
######################################################
w.show()
sys.exit(app.exec_())
10. 添加组件--添加group
主窗口添加 group, 将group设置为某个布局(layout),布局(layout)添加组件
import sys
from PyQt5.QtWidgets import QApplication,QMainWindow,QWidget
from PyQt5.QtWidgets import QVBoxLayout,QHBoxLayout
from PyQt5.QtWidgets import QGroupBox,QLabel
from PyQt5.QtWidgets import QPushButton, QRadioButton,QListWidget,QComboBox,QMessageBox
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont
"""
说明: 主窗口添加group,创建layout,将group设置为layout,布局添加组件
备注: group 只能设置为某个 layout, 不能自己添加组件
widget, layout 可以添加组件
"""
app = QApplication(sys.argv)
# 创建窗口
window = QMainWindow()
window.setGeometry(100,100,500,600)
window.setWindowTitle("选项选择示例")
# 添加主组件,后续所有组件的父亲组件都必须是这个组件
w = QWidget()
window.setCentralWidget(w)
# 添加group
group = QGroupBox(title="单选按钮列表",parent=w)
group.move(10,10) # 设置group在窗口中的起始位置
# group 添加布局(用set):便于调整格式
layout = QVBoxLayout()
# layout = QHBoxLayout()
group.setLayout(layout)
## 设置 layout 的间隔
layout.setSpacing(10) # 设置组员的排列间隔
# layout添加成员
radio1 = QRadioButton("选项A")
radio2 = QRadioButton("选项B")
radio3 = QRadioButton("选项C")
radio4 = QRadioButton("选项D")
layout.addWidget(radio1)
layout.addWidget(radio2)
layout.addWidget(radio3)
layout.addWidget(radio4)
# 显示窗口
window.show()
sys.exit(app.exec_())
11. 添加组件--添加icon/显示图片
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtGui import QIcon
app = QApplication([])
window = QMainWindow()
window.setWindowTitle("测试加载icon")
window.setGeometry(100,100,500,500)
# 创建QIcon对象并设置为窗口图标
icon = QIcon("./pyqt_tests/a_icon.png")
window.setWindowIcon(icon)
window.show()
app.exec_()
12. 添加menu
# -*- coding:utf-8 -*-
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
# 槽函数
def processTrigger(q):
if q.text() == "copy":
print("hello, i am copy")
print(q.text() + " is triggered")
## 创建窗口
app = QApplication(sys.argv)
win = QMainWindow()
win.setWindowTitle("main_window")
win.setGeometry(100,100,400,400)
## 获取 bar 对象 添加menu
bar = win.menuBar()
## 给bar添加menu,命名为File
file = bar.addMenu("File")
file.addAction("New") # 给 menu 添加子动作:New,new是最后一层menu的名字
file.addAction("Save") # 给 menu 添加子动作:Save,save 是最后一层menu的名字
# 给 menu 添加子 menu:edit
submenu_edit = file.addMenu("edit")
# 给子menu添加动作 "copy"
submenu_edit.addAction("copy")
# 给子menu添加动作 "paste"
submenu_edit.addAction("paste")
## 添加响应函数
file.triggered[QAction].connect(processTrigger)
win.show()
sys.exit(app.exec_())