3

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

 2 years ago
source link: https://zmister.com/archives/162.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本篇我们将会介绍到:

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

文章目录 [显示]

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

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

1240

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

840

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

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

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

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

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

1240

运行之后,便会自动生成一个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设计师中的一致:

1240

嗯,并无区别。

修改信号槽

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

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

1240

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

1240

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

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

1240

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK