Python GUI教程(七):转换qt设计师的ui代码为Python代码

本篇我们将会介绍到:

  • 查看qt设计师生成的UI代码;
  • 通过pyuic5工具转换qt设计师UI为Python代码;

查看qt设计师生成的UI文件

我们在qt设计师中设计好的GUI窗口都会被保存为.ui格式的文件。

实质上,.ui文件依然是文本格式文件,我们使用notepad++打开刚刚保存的.ui文件:

可以发现,.ui文件其实是一个xml文件,其通过不同的标签来表示不同的窗口部件或是行为和信号槽的声明和描述。

通过pyuic5转换UI文件为Python文件

设计好的UI文件如何需要转换为Python文件,该怎么办?毕竟我们需要使用Python来扩展GUI的功能。

我们可以使用PyQt自带的pyuic5工具,对Qt设计师保存的.ui文件进行转换。

pyuic5是一个命令行工具,直接在cmd命令行界面运行即可。下面我们使用pyuic5将刚刚保存的UI文件转换问Python代码:

运行之后,便会自动生成一个ui2py.py的python文件,我们打开看看:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(585, 477)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(170, 140, 75, 23))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 585, 23))
        self.menubar.setObjectName("menubar")
        self.menu = QtWidgets.QMenu(self.menubar)
        self.menu.setObjectName("menu")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.actionMen1 = QtWidgets.QAction(MainWindow)
        self.actionMen1.setObjectName("actionMen1")
        self.actionMen2 = QtWidgets.QAction(MainWindow)
        self.actionMen2.setObjectName("actionMen2")
        self.menu.addAction(self.actionMen1)
        self.menu.addSeparator()
        self.menu.addAction(self.actionMen2)
        self.menubar.addAction(self.menu.menuAction())

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

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "州的先生zmister.com PythonGUI教程"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))
        self.menu.setTitle(_translate("MainWindow", "文件"))
        self.actionMen1.setText(_translate("MainWindow", "men1"))
        self.actionMen2.setText(_translate("MainWindow", "men2"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

生成的是标准的Python代码,运行一下,看看是否和qt设计师中的一致:

嗯,并无区别。

修改信号槽

除了直接使用UI文件转换而来的PythonGUI代码,我们有时候也需要对部分事件进行修改。
我们可以在qt设计师中添加简单的信号槽,复制的信号槽还是得自己在python代码中定义。

首先,我们在窗口中添加一个label标签,设置一个信号槽为:点击按钮的时候,label标签就清空。

然后使用pyuic5将其转换为Python代码,运行正常,按钮的信号槽也正常:

下面,我们并不想在点击button按钮的时候label标签消失,而是换一个文字。我们该怎么做呢?

直接在Python代码中进行修改,添加一个方法,并连接到信号槽上:

现在点击按钮之后,label标签会变为“zmister”而不是像之前那样清空。

猜你也喜欢

  1. 匿名说道:

    生成的是标准的Python代码,运行一下,看看是否和qt设计师中的一致:

  2. qkx说道:

    在“生成的是标准的Python代码,运行一下,看看是否和qt设计师中的一致:”这句下面的那个动画里,第一句代码里的QtGui显示灰色,应该是无法导入QtGui,楼主怎么解决的?

  3. 说道:

    这里有一个笔误,
    "复制的信号槽还是得自己在python代码中定义。"
    应该为
    "复杂的信号槽还是得自己在python代码中定义。"

  4. 说道:

    "复制的信号槽还是得自己在python代码中定义。"
    应为
    "复杂的信号槽还是得自己在python代码中定义。"

    1. 州的先生说道:

      多谢指正

  5. php说道:

    教程很好,获益匪浅

  6. 说道:

    为什么我转化py文件之后,没有if __name__=='__main__'之后的代码

    1. 州的先生说道:

      那些是需要自己添加的

  7. Aaron说道:

    教程非常好,等于手把手的教.

    获益颇多多, 非常感谢辛苦码字录动态图分享.

发表评论

邮箱地址不会被公开。