找回密码
 立即注册
  • QQ空间
  • 回复
  • 收藏

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

admin 2019-3-11 05:43 297人围观 Qt相关

来源于微信公众号:州的先生

点击关注州的先生


编程应用、实战教程,不容错过

本篇我们将会介绍到:

  • 查看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文件,我们打开看看:

  1. fromPyQt5importQtCore,QtGui,QtWidgets


  2. classUi_MainWindow(object):

  3. def setupUi(self,MainWindow):

  4. MainWindow.setObjectName("MainWindow")

  5. MainWindow.resize(585,477)

  6. self.centralwidget =QtWidgets.QWidget(MainWindow)

  7. self.centralwidget.setObjectName("centralwidget")

  8. self.pushButton =QtWidgets.QPushButton(self.centralwidget)

  9. self.pushButton.setGeometry(QtCore.QRect(170,140,75,23))

  10. self.pushButton.setObjectName("pushButton")

  11. MainWindow.setCentralWidget(self.centralwidget)

  12. self.menubar =QtWidgets.QMenuBar(MainWindow)

  13. self.menubar.setGeometry(QtCore.QRect(0,0,585,23))

  14. self.menubar.setObjectName("menubar")

  15. self.menu =QtWidgets.QMenu(self.menubar)

  16. self.menu.setObjectName("menu")

  17. MainWindow.setMenuBar(self.menubar)

  18. self.statusbar =QtWidgets.QStatusBar(MainWindow)

  19. self.statusbar.setObjectName("statusbar")

  20. MainWindow.setStatusBar(self.statusbar)

  21. self.actionMen1 =QtWidgets.QAction(MainWindow)

  22. self.actionMen1.setObjectName("actionMen1")

  23. self.actionMen2 =QtWidgets.QAction(MainWindow)

  24. self.actionMen2.setObjectName("actionMen2")

  25. self.menu.addAction(self.actionMen1)

  26. self.menu.addSeparator()

  27. self.menu.addAction(self.actionMen2)

  28. self.menubar.addAction(self.menu.menuAction())


  29. self.retranslateUi(MainWindow)

  30. QtCore.QMetaObject.connectSlotsByName(MainWindow)


  31. def retranslateUi(self,MainWindow):

  32. _translate =QtCore.QCoreApplication.translate

  33. MainWindow.setWindowTitle(_translate("MainWindow","州的先生zmister.com PythonGUI教程"))

  34. self.pushButton.setText(_translate("MainWindow","PushButton"))

  35. self.menu.setTitle(_translate("MainWindow","文件"))

  36. self.actionMen1.setText(_translate("MainWindow","men1"))

  37. self.actionMen2.setText(_translate("MainWindow","men2"))



  38. if __name__ =="__main__":

  39. import sys

  40. app =QtWidgets.QApplication(sys.argv)

  41. MainWindow=QtWidgets.QMainWindow()

  42. ui =Ui_MainWindow()

  43. ui.setupUi(MainWindow)

  44. MainWindow.show()

  45. sys.exit(app.exec_())

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



嗯,并无区别。

修改信号槽


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

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



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



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

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



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



万水千山总是情,点个“好看”行不行↓↓↓

----------------------------------------------------------------------------------------------------------------------
我们尊重原创,也注重分享,文章来源于微信公众号:州的先生,建议关注公众号查看原文。如若侵权请联系qter@qter.org。
----------------------------------------------------------------------------------------------------------------------

1人点赞鲜花

握手

雷人

路过

鸡蛋

刚表态过的朋友 (1 人)

yafeilinux和他的朋友们微信公众号二维码

微信公众号

专注于Qt嵌入式Linux开发等。扫一扫立即关注。

Qt开源社区官方QQ群二维码

QQ交流群

欢迎加入QQ群大家庭,一起讨论学习!

我有话说......