PyQt由QtCreator转向Python测试验证
如何从QT转向python如何将UI文件转为PY文件如何在pyQT中实现消息槽
本篇博文对于熟悉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的童鞋是要有些思想准备的。
更多推荐
所有评论(0)