PythonGui之PyQt5的简单运用

本文介绍了如何使用pip安装PyQt5和pyqt5-tools,然后通过Designer工具可视化拖拽创建UI界面,接着使用PyUic将.ui文件转换为Python代码。在VSCode中配置相关插件,实现便捷的UI设计和代码生成。最后展示了如何调用生成的UI文件并处理用户事件,重点讲解了信号和插槽的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

pip 安装

需要同时安装 PyQt5 和 pyqt5-tools

$ pip install PyQt5
$ pip install pyqt5-tools

以上安装缓慢,可以使用国内源安装

$ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyqt5
$ pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyqt5-tools

Designer 工具可视化拖拽创建UI

designer.exe

参考查找路径: .venv\Lib\site-packages\qt5_applications\Qt\bin\designer.exe
.venv是本人创建的虚拟环境目录,根据自身环境位置进行查找

VS Code 插件

PYQT Integration

请添加图片描述
首次建立窗体时,会弹出一个文件选择框,用来选择 Designer.exe 所在路径

也可以点击扩展设置按钮手动配置
d:\Code\ZGPythonCode\.venv\Lib\site-packages\qt5_applications\Qt\bin\designer.exe

请添加图片描述

另外,还需设置Pyuic路径
D:\Code\ZGPythonCode\.venv\Scripts\pyuic5.exe
请添加图片描述

生成UI文件

通过可视化的拖动工具Designer 生成的UI文件后缀为.ui
即为XML结构的图形界面数据,实际使用时,需要将其转化成Python可使用的QT语法

SocketServer.ui

请添加图片描述
请添加图片描述

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>282</width>
    <height>101</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
...
...

通过 PyUic 编译成UI_xxx.py文件

Ui_SocketServer.py

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(327, 132)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.btnOpenListener = QtWidgets.QPushButton(self.centralwidget)
        self.btnOpenListener.setGeometry(QtCore.QRect(40, 30, 75, 23))
        self.btnOpenListener.setObjectName("btnOpenListener")
        self.btnCreateHtml = QtWidgets.QPushButton(self.centralwidget)
        self.btnCreateHtml.setGeometry(QtCore.QRect(140, 30, 75, 23))
        self.btnCreateHtml.setObjectName("btnCreateHtml")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 327, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.btnOpenListener.setText(_translate("MainWindow", "开启监听"))
        self.btnCreateHtml.setText(_translate("MainWindow", "生成Html"))

调用生成的Ui画面

文件结构

请添加图片描述

SocketServer.py

import sys
from PyQt5.QtWidgets import QMainWindow, QApplication, QWidget
from ui.Ui_SocketServer import Ui_MainWindow # 在此导入自定义界面类

''' 创建类继承自 QMainWindow, Ui_MainWindow '''
class SocketServer(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.btnOpenListener.clicked.connect(self.runServer)
        self.btnCreateHtml.clicked.connect(self.formatUrl)
        
    def runServer(self):
        print("runServer Clicked")
        
    def formatUrl(self):
        print("formatUrl Clicked")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = SocketServer()
    win.show()
    sys.exit(app.exec_())

QApplication

提供了整个图形界面程序的底层管理功能,比如:初始化、程序入口参数的处理,用户事件(对界面的点击、输入、拖拽)分发给各个对应的控件,等等…
因为QApplication要做很多初始化操作,所以必须在任何界面控件对象创建前,先创建它。

window.show()

放在主窗口的控件,要能全部显示在界面上, 必须调用show()方法

app.exec_()

进入QApplication的事件处理循环,接收用户的输入事件,并且分配给相应的对象去处理。

事件处理

低级事件处理程序

作用类似于C#的 Application.DoEvents() 即在耗时或跨线程时刷新界面UI

QApplication.processEvents()

信号和插槽( Signals and Slots)

注意事项:
事件在绑定时不要带括号,即直接传入方法名即可

# 第一种绑定方式
QtCore.QObject.connect(widget, QtCore.SIGNAL(‘signalname’), slot_function) # 如:
QObject.connect(b2, SIGNAL("clicked()"), b2_clicked)
# 第二种绑定方式
widget.signal.connect(slot_function) # 如:
b1.clicked.connect(b1_clicked)

构造方法内绑定事件

def __init__(self):
    super().__init__()
    self.setupUi(self)
    self.btnOpenListener.clicked.connect(self.runServer)
    self.btnCreateHtml.clicked.connect(self.formatUrl)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值