• PythonGui之PyQt5的简单运用


    pip 安装

    需要同时安装 PyQt5 和 pyqt5-tools

    $ pip install PyQt5
    $ pip install pyqt5-tools
    
    • 1
    • 2

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

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

    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

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

    
    <ui version="4.0">
     <class>MainWindowclass>
     <widget class="QMainWindow" name="MainWindow">
      <property name="geometry">
       <rect>
        <x>0x>
        <y>0y>
        <width>282width>
        <height>101height>
       rect>
      property>
      <property name="windowTitle">
       <string>MainWindowstring>
      property>
    ...
    ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    通过 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"))
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    调用生成的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_())
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    QApplication

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

    window.show()

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

    app.exec_()

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

    事件处理

    低级事件处理程序

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

    QApplication.processEvents()
    
    • 1

    信号和插槽( 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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    构造方法内绑定事件

    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.btnOpenListener.clicked.connect(self.runServer)
        self.btnCreateHtml.clicked.connect(self.formatUrl)
    
    • 1
    • 2
    • 3
    • 4
    • 5
  • 相关阅读:
    Netty——ByteBuffer的内部结构演示示例(1)
    KingbaseES例程之快速删除表数据
    sql 2
    蓝桥杯 常用STL (C++) 未完待续
    什么是CAPL编程语言
    PyQt 小程序
    Android 9.0 网络之netd详解
    前端 CSS - 如何隐藏右侧的滚动条 -关于出现过多的滚动条导致界面不美观
    05预测识别-依托YOLO V8进行训练模型的识别——对视频中的图片进行识别
    SQL必需掌握的100个重要知识点:创建计算字段
  • 原文地址:https://blog.csdn.net/ymtianyu/article/details/126123227