PyQt5 .ui转.py 让GUI更简单

目录

大纲

概述

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

举个栗子


大纲

概述

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

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

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

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

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

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

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的快捷启动方式,也一并配置了进来,你们可配置可不配,看个人,我顺便一起贴出来:

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的包就可以了。

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

举个栗子

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

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

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

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

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

那么打开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由原来的“这仅仅只是一个测试”变成了“试试,改变内容”:

Over.

 

  • 28
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值