本篇博文对于熟悉QT的童鞋而言很好理解,对于熟悉QT和Python的人那就更是小菜菜,其实就差测试验证而已。本博文我们验证的是:1、QTdesigner中的UI界面是否可以成功转换到python中显示出来;2、QT中的消息槽在python中是否好用。如果这些都没有问题,对于一个QT项目要转变为python中的pyQT项目那就基本没有很多障碍了。下面我们就从这两个方面来展开验证

一、QTdesigner中的UI界面是否可以成功转换到python中显示出来
1、设计form
首先,我们在QTDesigner中,设计一个很简单的Form,如下图(我们知道这个form保存后就是一个以UI为扩展名的文件,在当前的工程目录下面)
在这里插入图片描述
2、转化为python文件
接下来是关键,如何将上面的UI文件其转换为python文件,也就是转换为py为扩展名的文件。我们来看怎么转换。
来到命令模式下,通过以下命令转换(假定我们的文件名为mainWindow.ui,我们要转换为mainWindow.py)
pyuic5 -o mainwindow.py mainwindow.ui
在这里插入图片描述
3、运行UI界面
新建一个运行python的主程序文件,刚刚转化过来的py文件不能作为主运行文件,或者说就是强行改为主运行文件也不便于维护,下面是新建的主运行文件的代码

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow

import mainwindow

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

运行效果
在这里插入图片描述

二、QT中的消息槽在python中是否好用
上面的界面虽然运行成功,但不代表组件可以用。其实这在QT里面也是一样的,咱们需要通过消息槽将事件和组件进行绑定(这个在C#或者VC中也不例外),咱们来直接看代码

# 这里是绑定的代码
self.pushButton.clicked.connect(self.click_btn)
self.checkBox.stateChanged.connect(self.on_checkbox_statchange)
# 这里是函数,分别在点击按钮后先是按钮上的文字,点击checkbox后状态改变后文字改变
def click_btn(self):
      print(self.pushButton.text() + " is pressed down!")


  def on_checkbox_statchange(self):
      if not self.checkBox.checkState():
          self.checkBox.setText("ChangedMeBack")
      else:
          self.checkBox.setText("ChangedMe")

整体代码如下

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'mainwindow.ui'
# Created by: PyQt5 UI code generator 5.15.6
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.

from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(457, 359)
        self.centralWidget = QtWidgets.QWidget(MainWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.pushButton = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton.setGeometry(QtCore.QRect(140, 130, 161, 23))
        self.pushButton.setObjectName("pushButton")
        self.checkBox = QtWidgets.QCheckBox(self.centralWidget)
        self.checkBox.setGeometry(QtCore.QRect(150, 190, 100, 16))
        self.checkBox.setObjectName("checkBox")
        self.label = QtWidgets.QLabel(self.centralWidget)
        self.label.setGeometry(QtCore.QRect(140, 70, 131, 16))
        self.label.setObjectName("label")
        MainWindow.setCentralWidget(self.centralWidget)
        # self.mainToolBar = QtWidgets.QToolBar(MainWindow)
        # self.mainToolBar.setObjectName("mainToolBar")
        # MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
        # self.statusBar = QtWidgets.QStatusBar(MainWindow)
        # self.statusBar.setObjectName("statusBar")
        # MainWindow.setStatusBar(self.statusBar)
        self.pushButton.clicked.connect(self.click_btn)
        self.checkBox.stateChanged.connect(self.on_checkbox_statchange)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "python UI testButton"))
        self.checkBox.setText(_translate("MainWindow", "CheckBox"))
        self.label.setText(_translate("MainWindow", "python QT Label"))


    def click_btn(self):
        print(self.pushButton.text() + " is pressed down!")


    def on_checkbox_statchange(self):
        if not self.checkBox.checkState():
            self.checkBox.setText("ChangedMeBack")
        else:
            self.checkBox.setText("ChangedMe")


运行效果如下
请添加图片描述
很显然,消息槽的实现与QT中基本没有什么差别,只不过消息槽参数编程了Self。
上面的验证都已经完成,只要一步一步来,实现都很顺利很轻松!

三、第三方库与软件版本
使用了这些软件及第三方库
QtCreator 4.6.1
pycharm2021.3.3(python的一个编辑器)
pyQT5(第三方库,支持在python里实现QT)
python3.8

虽然一切看起来那么简单和顺利,其实要配置好上面这些个软件,还是需要费一些精力的,一步跨入pyqt的童鞋是要有些思想准备的。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐