Python-PyQt5开发学习笔记(一):环境搭建及GUI初试


因在项目的进程中需要开发一个GUI程序,故开始对GUI编程进行学习,选择使用基于Python的PyQt5框架或者C++的MFC框架进行开发,大致了解后选择PyQt5框架进行开发,至于MFC。。。择日再学(明日复明日?)。故在此记录一些学习进程并分享个人拙见,以便之后温故知新,也欢迎各位读者指正!

言归正转。GUI是用户图形界面程序的简称,开发GUI的方法有很多,由于Python的快速普及和发展,利用PyQt5框架进行开发是性价比很高的一个选择。

环境搭建及准备工作

基本环境:Windows 10 专业版、Python 3.7、编辑器选择:Pycharm

  • 安装和使用PyQt5框架

PyQt5对Python是一个第三方包,需要下载(如果你是Anaconda好像自带了PyQt5模块),可在cmd中使用pip直接对其进行安装,除此之外,还需安装一个叫pyqt5-tools的模块,若想安装汉化或嫌下载速度太慢,可使用国内的源进行下载。(注意:pip下载pyqt5-tools时均为小写)

具体可参照博客:https://blog.csdn.net/AzureMouse/article/details/90338961

PyQt5的简单使用:

先来看一个简单的demo。

import sys
from PyQt5.QtWidgets import QApplication,QWidget
if __name__ == '__main__':
    # 创建一个程序的类
    app = QApplication(sys.argv)
    # 创建一个空的窗口
    w = QWidget()
    # 改变窗口的尺寸
    w.resize(1000,600)
    # 移动窗口位置(基于电脑屏幕的中心)
    w.move(300,300)   
    # 设置窗口的名字
    w.setWindowTitle("first")
    # 显示窗口
    w.show()
    # GUI程序运行的基本主循环
    sys.exit(app.exec_())

       这个程序运行后会产生一个简单的空白窗口。其中:参数sys.argv是指:sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键,所以那些试图从代码来说明它作用的解释一直没看明白。因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素。其第一个元素是程序本身,随后才依次是外部给予的参数。sys.exit(app.exec_()):app.exec_()的存在使得,软件不会闪退。为什么会这样,是因为app.exec_()的含义是,最后一个窗口关闭后,程序才停止。(引自CSDN博客)

        基于PyQt5模块可以用代码直接的产生对话窗口,但是单纯的只靠代码创建一个GUI程序其工作量过于巨大,所以使用QTdesigner进行辅助开发。

  •         QTdesigner的使用和基本配置

               程序界面如下:

   

Python-PyQt5开发学习笔记(一):环境搭建及GUI初试_第1张图片

        左边为工具箱,可向创建后的窗口(若关闭对话可使用:文件-新建-创建)拖动控件进行GUI窗口的可视化开发,如此便比直接用代码生成GUI程序更加高效。

        将QTdesigner添加到Pycharm(在Pycharm中打开QTdesigner软件)

        步骤为:File - Settings - Tools - External Tools 点击加号进行配置:

Python-PyQt5开发学习笔记(一):环境搭建及GUI初试_第2张图片

       其中:Name是你给你添加的工具取的名字,Description是对其的描述,可各自进行设置。至于下面三个参数可参考如下:

Python-PyQt5开发学习笔记(一):环境搭建及GUI初试_第3张图片

     配置格式转化工具(将.ui文件转化为.py文件) 

     使用QTdesigner创建的文件为ui格式的文件,需将其转化为py文件才可进行后期的GUI程序开发

     这里推荐两种转化方式:方法一:cmd 命令行转到文件对应路径,使用对应命令方法:

python -m PyQt5.uic.pyuic test.ui -o test1.py

(转文件路径没有反应时可以使用:cd /d D:\ )

     方法二:配置到Pycharm中直接转化,仍是配置额外工具(同上),参数参考如下:

Python-PyQt5开发学习笔记(一):环境搭建及GUI初试_第4张图片

Program            D:\PycharmProject\venv\Scripts\python.exe
Arguments          -m PyQt5.uic.pyuic $FileName$ -o $FileNameWithoutExtension$.py
Working Directory  D:\PycharmProject\pythonGUI\pyqt5

        设置完成后即可在Pycharm直接使用扩展工具,此处提醒两点:1.Program中的python路径的环境所包含的模块中应包含PyQt5,比如:你的PyQt5在文件夹Anaconda中,而你的python运行环境却是官方基础python(只有基础模块),这类情况转化会失败,应选择含PyQt5模块的python.exe,或者将PyQt5整个文件夹复制到你选择的python环境的:venv\Lib\site-packages;2.只能对设置的working Directory路径下的文件进行转化。

        使用扩展工具:右键选择External Tools即可直接使用,在对ui进行转化时切记一定要选择中文件再单击右键选择扩展工具,否则会出错。选中ui文件右键使用PyUIC工具即可在同目录下生成一个同名py文件。

 

   PyQt5开发GUI初试

  • 首先使用Qtdesigner创建窗口

可视化进行窗口设计:

Python-PyQt5开发学习笔记(一):环境搭建及GUI初试_第5张图片

保存到工程目录:
 

Python-PyQt5开发学习笔记(一):环境搭建及GUI初试_第6张图片

 

  • 将ui文件保存并转化为py文件

Python-PyQt5开发学习笔记(一):环境搭建及GUI初试_第7张图片

自动转化出来的demo1.py文件如下:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'demo1.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# 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(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(30, 170, 112, 34))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(30, 250, 112, 34))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_3.setGeometry(QtCore.QRect(50, 320, 112, 34))
        self.pushButton_3.setObjectName("pushButton_3")
        self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox.setGeometry(QtCore.QRect(280, 220, 105, 22))
        self.checkBox.setObjectName("checkBox")
        self.radioButton = QtWidgets.QRadioButton(self.centralwidget)
        self.radioButton.setGeometry(QtCore.QRect(280, 300, 132, 22))
        self.radioButton.setObjectName("radioButton")
        self.commandLinkButton = QtWidgets.QCommandLinkButton(self.centralwidget)
        self.commandLinkButton.setGeometry(QtCore.QRect(280, 140, 263, 52))
        self.commandLinkButton.setObjectName("commandLinkButton")
        self.toolButton = QtWidgets.QToolButton(self.centralwidget)
        self.toolButton.setGeometry(QtCore.QRect(470, 340, 52, 24))
        self.toolButton.setObjectName("toolButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 30))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        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", "PushButton"))
        self.pushButton_2.setText(_translate("MainWindow", "PushButton"))
        self.pushButton_3.setText(_translate("MainWindow", "PushButton"))
        self.checkBox.setText(_translate("MainWindow", "CheckBox"))
        self.radioButton.setText(_translate("MainWindow", "RadioButton"))
        self.commandLinkButton.setText(_translate("MainWindow", "CommandLinkButton"))
        self.toolButton.setText(_translate("MainWindow", "..."))
  • 编写运行程序调用生成的py文件

编写运行程序

import sys
import demo1
from PyQt5.QtWidgets import QApplication,QMainWindow

if __name__ == "__main__":
    # 设置一个空类,建立一个空窗口mainW
    app = QApplication(sys.argv)
    mainW = QMainWindow()
    # 要对窗口进行设置,增减控件和增减功能等,这些功能都有由类:Ui_MainWindow进行完成
    ui = demo1.Ui_MainWindow()
    # 类中的函数setupUi(self, MainWindow):  参数是指需要一个窗口作为参数,即需要往哪个窗口上添加控件
    # 此出选择的窗口是先前建立的空白窗口mainW,即在mainW上添加控件
    ui.setupUi(mainW)
    # 显示窗口
    mainW.show()
    # GUI程序运行主循环
    sys.exit(app.exec_())

运行结果为:

Python-PyQt5开发学习笔记(一):环境搭建及GUI初试_第8张图片

 

欢迎各位读者在评论区批评指正!!!

 

 

你可能感兴趣的:(Python-PyQt5开发,python)