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

liftword1周前 (04-22)技术文章8

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 应用程序...

PySide:基于 Qt 框架的 Python 高级 UI 库

PySide 是 Python 的官方 Qt 库绑定,由 Qt for Python 提供支持。它允许开发者使用 Python 编写基于 Qt 框架的图形用户界面(GUI)应用。作为一个功能强大的跨平...

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

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

Python Qt GUI设计:将UI文件转换Python文件三种妙招(基础篇—2)

在开始本文之前提醒各位朋友,Python记得安装PyQt5库文件,Python语言功能很强,但是Python自带的GUI开发库Tkinter功能很弱,难以开发出专业的GUI。好在Python语言的开放...

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

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

Qt的版本

Qt可以分为商业版和免费版。商业版又分为专业版和企业版。Qt免费版是Qt的非商业版本,是开源的,可以免费下载,遵循GPLv3版权协议。对于学习者来说,使用免费版即可。Qt 5.12 LTS(长期支持版...