pyqt5 简易入门教程

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_())
相关推荐
心静财富之门3 小时前
【无标题】标签单击事件
开发语言·php
草莓熊Lotso3 小时前
揭开 C++ vector 底层面纱:从三指针模型到手写完整实现
开发语言·c++
小秋学嵌入式-不读研版3 小时前
C56-字符串拷贝函数strcpy与strnpy
c语言·开发语言·笔记
hui函数3 小时前
python全栈(基础篇)——day04:后端内容(字符编码+list与tuple+条件判断+实战演示+每日一题)
开发语言·数据结构·python·全栈
Never_Satisfied3 小时前
在JavaScript / HTML中,转移字符导致js生成的html出错
开发语言·javascript·html
羚羊角uou3 小时前
【Linux】POSIX信号量、环形队列、基于环形队列实现生产者消费者模型
java·开发语言
fl1768313 小时前
基于pyqt5实现的视频抽帧工具源码+项目说明用于目标检测图片采集
qt·目标检测·音视频
数据知道5 小时前
Go语言:用Go操作SQLite详解
开发语言·后端·golang·sqlite·go语言
你是狒狒吗5 小时前
为什么mysql要有主从复制,主库,从库这种东西
数据库·mysql