使用PySide2做窗体,到底是怎么个事?看这个能不能搞懂

liftword2个月前 (04-22)技术文章30

PySide2 是 Qt 框架的 Python 绑定,允许你使用 Python 创建功能强大的跨平台 GUI 应用程序。

PySide2 的基本使用方法:

安装 PySide2

pip install PySide2

基本窗口创建

import sys

from PySide2.QtWidgets import QApplication, QMainWindow, QLabel

app = QApplication(sys.argv) # 创建应用对象

window = QMainWindow() # 创建主窗口

window.setWindowTitle("PySide2 示例")

window.setGeometry(100, 100, 400, 300) # x, y, width, height

label = QLabel("Hello PySide2!", parent=window)

label.move(150, 130)

window.show() # 显示窗口

sys.exit(app.exec_()) # 进入主循环

常用组件

按钮和事件处理

from PySide2.QtWidgets import QPushButton

def on_button_click():

print("按钮被点击了!")

button = QPushButton("点击我", parent=window)

button.move(150, 160)

button.clicked.connect(on_button_click) # 连接信号和槽

文本框

from PySide2.QtWidgets import QLineEdit

textbox = QLineEdit(parent=window)

textbox.move(100, 100)


textbox.setPlaceholderText("请输入文本...")

def on_text_changed():

print("文本已更改:", textbox.text())


textbox.textChanged.connect(on_text_changed)

布局管理

使用布局可以更好地管理组件位置:

from PySide2.QtWidgets import QVBoxLayout, QWidget

central_widget = QWidget()

window.setCentralWidget(central_widget)

layout = QVBoxLayout()

central_widget.setLayout(layout)

layout.addWidget(QLabel("顶部标签"))

layout.addWidget(QPushButton("中间按钮"))

layout.addWidget(QLineEdit())

信号与槽机制

PySide2 使用信号(signal)和槽(slot)机制处理事件:

from PySide2.QtCore import Slot

@Slot() # 可选的装饰器,明确表示这是一个槽函数

def custom_slot():

print("自定义槽函数被调用")

button = QPushButton("触发自定义槽")

button.clicked.connect(custom_slot)

自定义信号

from PySide2.QtCore import QObject, Signal

class Communicate(QObject):

my_signal = Signal(str) # 定义一个带字符串参数的信号

sender = Communicate()

sender.my_signal.connect(lambda x: print(f"收到信号: {x}"))

# 发射信号

sender.my_signal.emit("Hello Signal!")

样式表

可以使用 CSS 类似的语法来美化界面:

window.setStyleSheet("""

QMainWindow {

background-color: #f0f0f0;

}

QPushButton {

background-color: #4CAF50;

border: none;

color: white;

padding: 8px 16px;

font-size: 14px;

}

QPushButton:hover {

background-color: #45a049;

}

""")

文件对话框

from PySide2.QtWidgets import QFileDialog

def open_file():

filename, _ =
QFileDialog.getOpenFileName(window, "打开文件", "", "All Files (*);;Text Files (*.txt)")

if filename:

print("选择的文件:", filename)

open_btn = QPushButton("打开文件", parent=window)

open_btn.clicked.connect(open_file)

多线程

使用 QThread 实现多线程:

from PySide2.QtCore import QThread, Signal

class WorkerThread(QThread):

progress = Signal(int)

finished = Signal(str)


def run(self):

for i in range(1, 101):

self.progress.emit(i)

self.msleep(50) # 模拟耗时操作

self.finished.emit("任务完成!")

thread = WorkerThread()

thread.progress.connect(lambda x: print(f"进度: {x}%"))

thread.finished.connect(lambda msg: print(msg))

thread.start()

打包应用程序

可以使用 PyInstaller 打包 PySide2 应用:

pyinstaller --windowed --onefile your_script.py

注意事项

1. PySide2 和 PyQt5 非常相似,但许可证不同(PySide2 使用 LGPL)

2. 确保在主线程中创建 QApplication 和所有 GUI 对象

3. 长时间运行的任务应该放在单独的线程中,避免阻塞 GUI

希望这个指南能帮助你开始使用 PySide2 开发 GUI 应用程序!

相关文章

Qt for Python—Qt Designer 概览

前言本系列第三篇文章(Qt for Python学习笔记—应用程序初探 )、第四篇文章(Qt for Python学习笔记—应用程序再探 )中均是使用纯代码方式来开发 PySide6 GUI 应用程序...

118.Python——PyQt窗体上显示监控视频画面

在做计算机视觉项目时,经常需要打开和显示监控视频画面,对画面进行分析处理。使用OpenCV打开摄像头显示视频画面,视频可以参看:1.3 OpenCV打开本地摄像头并显示视频画面。本文主要实现在PyQt...

进入Python的世界02外篇-Pycharm配置Pyqt6

为什么这样配置,要开发带UI的python也只能这样了,安装过程如下:一 安装工具打开终端:pip install PyQt6 PyQt6-tools二 打开设置并汉化点击plugin,安装汉化插件,...

wxPython和PyQt谁才是最赞的Python GUI库

Python是一种解释型、面向对象、动态数据类型的高级程序设计语言,Python GUI图形库允许Python程序员很方便的创建完整的、功能键全的GUI用户界面。作为Python开发者,你迟早都会用到...

走马观花看PySide6(官方examples)

准备工作1、安装PythonPython下载地址:https://www.python.org/downloads/2、安装PyCharmPyCharm下载地址:https://www.jetbrai...

从0到1:用Python的PyQt打造专属数独游戏

一、引言数独,作为一款风靡全球的数字益智游戏,凭借其简单易懂的规则和极具挑战性的玩法,吸引了无数玩家为之痴迷。从纸质谜题到电子游戏,数独的身影无处不在,无论是在闲暇时光放松大脑,还是在锻炼逻辑思维能力...