作为一个使用C++开发QT五年的“老”程序猿,总觉得使用C++开发GUI,是一个很费时费力或者说没有“钱”途的事情,因为现在有大量的轻量化的编程语言可以做很绚丽的交互界面,所以笔者现在逐渐向Python转移,逐渐使用PyQt5开发Qt项目,作为一个python新手,请大家多多指教。
一、PyCharm+PyQt5的环境配置
具体配置可以在网上搜其它帖子,在这里不作过多论述。
个人在使用过程中,有个习惯,当我们新建了xxx.ui文件,然后使用pyuic5生成xxx.py文件的时候,为了更清楚的看出来这个py文件是由ui文件生成的,也为了防止我们修改这个文件,可以在setting中将pyuic5的Arguments配置中改为“$FileName$ -o ui_$FileNameWithoutExtension$.py”,这样生成的py文件都是加了“ui_”前缀的。
二、使用Qt Designer将界面显示与业务逻辑分离
大部分的教程都是将使用Qt Designer进行界面布局和Qt中控件的使用分开来讲,讲Qt Designer的时候直接在.ui文件生成的.py文件里面进行修改,这样虽然可以理解界面和代码之间是如何互联共通的,但是不方便.ui文件的修改。在讲Qt的各种控件的使用的时候,又几乎全部用代码在布局界面,这对于初识Qt的新手来说倒还可以,但对于像笔者这种只换语言不换框架的工程师来讲,未免有点太拖沓,所以我们直接讲将界面显示与业务逻辑分离的方式开发。
1、例如我新建一个mainpage.ui文件,里面放几个控件。
2、将mainpage.ui文件转换成ui_mainpage.py文件
当然,也可以直接使用命令生成,不过需要配置环境变量,需要大家自己去配置,“pyuic5 -o ui_mainpage.py mainpage.ui”
生成的mainpage.py文件,其完整代码如下:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'mainpage.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainPage(object):
def setupUi(self, MainPage):
MainPage.setObjectName("MainPage")
MainPage.resize(739, 449)
self.layoutWidget = QtWidgets.QWidget(MainPage)
self.layoutWidget.setGeometry(QtCore.QRect(90, 80, 521, 271))
self.layoutWidget.setObjectName("layoutWidget")
self.gridLayout = QtWidgets.QGridLayout(self.layoutWidget)
self.gridLayout.setContentsMargins(8, 8, 8, 8)
self.gridLayout.setObjectName("gridLayout")
self.drive