PyQt5 .ui转.py 让GUI更简单

目录

大纲

概述

在PyCharm中配置转换插件(我假设你已经知道PyQt5是干嘛用的,并且你知道PyQt5生成的是.ui的文件)

举个栗子


大纲

PyQt5 .ui转.py 让GUI更简单_第1张图片

概述

PyQt5是对Qt所有类的Python封装,即可以利用Qt的强大功能,也可以利用Python丰富的生态,同时能够结合Python简洁的语法进行操作,其结果就是使用PyQt5可以高效简单地开发出自己想要的程序。

在PyCharm中配置转换插件(我假设你已经知道PyQt5是干嘛用的,并且你知道PyQt5生成的是.ui的文件)

首先不管三七二十一,先在PyCharm中配置转换插件,可以使得PyQt5中创建的.ui文件能够转换成.py文件供我们后续使用,至于具体的使用场景,下面的栗子会具体说到。

当然,ui.转.py是可以通过命令窗口通过命令去转换的,我这里介绍的是一个比较方便的操作,配置好之后,可以直接右键点击,即可完成转换。

打开PyCharm,点击Settings ——>Tools ——>External Tools而后选择右侧的“+”号,可以看到有如下弹窗:

PyQt5 .ui转.py 让GUI更简单_第2张图片

弹窗内部,填写如下信息,开始配置pyuic:

PyQt5 .ui转.py 让GUI更简单_第3张图片

Name:pyuic
Program:C:\Users\honey\AppData\Local\Programs\Python\Python37\python.exe(这里填入的是你安装的python.exe的绝对路径,这个就不要复制我的啦 .. )
Arguments:-m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
Working directory:$FileDir$

为了使用方便,我这里也把QT Designer的快捷启动方式,也一并配置了进来,你们可配置可不配,看个人,我顺便一起贴出来:

PyQt5 .ui转.py 让GUI更简单_第4张图片

Name:QtDesigner
Program:D:\Python27\Lib\site-packages\PyQt4\designer.exe(这里填入的是你的designer.exe的绝对路径,这个就不要复制我的啦 .. )
Working directory:$FileDir$

顺便说一句,不要纠结我路径里面的Python27,也不要纠结PyQt4,我原来用的是Python27现在用Python30+,原来用的是PyQt4,而现在用的是PyQt5,用的是哪个版本的designer.exe,没有太大关系,最终关注的是,它本质的转换是转换成PyQt5,写代码的时候import的是PyQt5的包就可以了。

配好之后,是这样的,具体的使用可以看下面的栗子:

PyQt5 .ui转.py 让GUI更简单_第5张图片

举个栗子

PyCharm中,我们新建一个项目。

打开QT Designer,我们创建一个新的ui,这里我选择的是Main Window,并将该ui,保存到PyCharm新建的项目的路径下,取名为test.ui:

PyQt5 .ui转.py 让GUI更简单_第6张图片

也不需要做太复杂的UI,我这里只用了一个label,做做测试而已,Ctrl+R可以预览效果:

PyQt5 .ui转.py 让GUI更简单_第7张图片

再到PyCharm看我们的项目,右键点击test.ui,选择External Tools,可以看到,我们之前配置好的pyuic与QtDesigner:

PyQt5 .ui转.py 让GUI更简单_第8张图片

而后,直接选择pyuic,等待0.x秒,可以看到它执行了-m PyQt5.uic.pyuic test.ui -o test.py而这个命令,就是我们之前在配置pyuic的时候,配置的命令。并且,在项目目录下,生成了一个test.py文件:

PyQt5 .ui转.py 让GUI更简单_第9张图片

那么打开test.py,可以看到:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'test.ui'
#
# Created by: PyQt5 UI code generator 5.12.1
#
# WARNING! All changes made in this file will be lost!

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.setObjectName("gridLayout")
        self.label = QtWidgets.QLabel(self.centralwidget)
        font = QtGui.QFont()
        font.setFamily("等线 Light")
        font.setPointSize(11)
        self.label.setFont(font)
        self.label.setAlignment(QtCore.Qt.AlignCenter)
        self.label.setObjectName("label")
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
        MainWindow.setCentralWidget(self.centralwidget)

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.label.setText(_translate("MainWindow", "这仅仅只是一个测试"))


然后接下来的所有对ui的操作,都将无比的方便!

但是注意!注意!!请注意!!!—— 所有的UI操作、对UI的事件处理,都不能直接写到这个test.py文件下,不能直接写!!!因为一旦你在designer.exe中对test.ui有任何的改变,都是需要重新使用pyuic才能将test.ui文件中的更改更新到test.py文件中的,而更新后的test.py会是一个新的.py文件,会将之前所有的,全部覆盖。如果一旦你在这里写了一些方法,或者是一些UI操作,全部都会被覆盖,消失不见。

那么这个时候,如果想对UI有一些操作,但是又不能写到test.py中,该怎么办 —— 那就另外新建一个.py,对test.py进行引用,然后,操作新建的.py就可以啦:

新建一个.py,命名为UsingTest.py:

import sys

from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QMainWindow
from test import Ui_MainWindow  # 加载我们的布局


class UsingTest(QMainWindow, Ui_MainWindow):
    def __init__(self, *args, **kwargs):
        super(UsingTest, self).__init__(*args, **kwargs)
        self.setupUi(self)  # 初始化ui
        # 在这里,可以做一些UI的操作了,或者是点击事件或者是别的
        # 也可以另外写方法,可以改变lable的内容
        self.change()

    def change(self):
        self.label.setText("试试,改变内容")


if __name__ == '__main__':  # 程序的入口
    app = QApplication(sys.argv)
    win = UsingTest()
    win.show()
    sys.exit(app.exec_())

运行一下代码,可以看到,label由原来的“这仅仅只是一个测试”变成了“试试,改变内容”:

PyQt5 .ui转.py 让GUI更简单_第10张图片

Over.

 

你可能感兴趣的:([,Python,],[,学习笔记,])