PyQt5入门教程1-开发第一个pyqt5的程序HelloPyQt5

内容分享2天前发布
0 0 0

PyQt5入门教程1-开发第一个pyqt5的程序HelloPyQt5

文章目录

PyQt5入门教程1-开发第一个pyqt5的程序HelloPyQt5前言一、用windows的‘记事本’编写Qt Widget程序二、用pyCharm开发的第一个PyQt控制台程序三、用pyCharm开发的第一个PyQt Widget程序四、手工开发使用了布局且带有控件的PyQt程序五、手工开发未使用布局且带有空间的PyQt程序


前言

以下示例基于windows10平台,python3.13.7,PyQt5,pyCharm2025.2

一、用windows的‘记事本’编写Qt Widget程序

(1)启动Windows的‘记事本’,输入代码如下


import sys
from PyQt5 import QtWidgets,QtCore

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    widget = QtWidgets.QWidget()
    widget.resize(640,480)
    widget.setWindowTitle('Hello PyQt5')
    widget.show()
    exitCode = app.exec_()
    app.exit(exitCode)

首先,我们利用import语句导入sys模块,导入的意思就是告诉Python,我们想要使用这个模块。sys模块包含与Python解释器及其运行环境有关的函数。第二条语句告诉Python,从PyQt5中导入模块QtWidgets和QtCore。其中模块QtWidgets用于提供界面元素的函数,比如窗口缩放(resize),标题设置(setWindowTitle),窗口显示(show)等。

QtWidgets.QApplication创建一个QApplicattion对象。QtWidget.QWidget用于构造一个窗口对象,随后的三行语句分别用于设置窗口大小,窗口标题和显示窗口。当用户要关闭窗口时,最后一行语句通过调用exit()方法来结束应用程序。

现在将文件保存。单击‘记事本’程序的菜单选项‘文件’->‘另存为’,输入文件名‘helloPyQt_0.py’,保存类型选为‘所有文件(.)’,并在‘记事本’程序界面的右下方选择编码为‘UTF-8’,这里我存放在F盘的mypyqt文件下,注意一点,路径中不要包含有中文。如下图所示。
PyQt5入门教程1-开发第一个pyqt5的程序HelloPyQt5
(2)准备运行Python程序。打开命令行窗口,在命令行下进入目录‘F:/mypyqt’,然后输入‘python helloPyQt_0.py’来运行这个.py程序,如下图所示。

PyQt5入门教程1-开发第一个pyqt5的程序HelloPyQt5

二、用pyCharm开发的第一个PyQt控制台程序

(1)启动pyCharm,在向导对话框上点击‘New Project’来新建一个工程。
PyQt5入门教程1-开发第一个pyqt5的程序HelloPyQt5
此时出现New Project对话框,我们在对话框中输入工程全路径,文件夹名称就是工程名,然后勾选Create a welcome script ,Inherit packages from base interpreter和Make availiable to all projects复选框,不要忘记勾选这些复选框,因为新版的 pyCharm默认用自己带的软件库。为了让他使用我们安装的Python下的软件库,就要勾选这些复选框。最后单击Create。
PyQt5入门教程1-开发第一个pyqt5的程序HelloPyQt5
单击右下角的Create按钮,稍等一会,pyCharm将会自动新建一个名为main.py的源文件,并自动打开编辑窗口,可以看到已经自动生成了一些代码,把这些代码都删除掉,输入下面的代码:


from PyQt5.QtCore import *

if __name__ == '__main__':
    print('hello')
    QCoreApplication.exec()
    print('world')

其中,QtCore是Qt中最核心的模块,所有其他Qt模块都依赖于此模块,QCoreApplication管理了应用程序的各种资源,比如默认的字体和光标。QCoreApplication继承于QObject,而QObject就是QT中最基本的基类,也就是QT的根基。QCoreApplication类为不带用户图形界面的Qt应用程序提供事件循环,非GUI应用程序使用此类来提供事件循环。对于使用Qt的非GUI应用程序应该只有一个QCoreApplication对象。
(2)单击菜单栏中的三角形运行按钮,或者按‘Shift+F10’快捷键来运行工程,运行结果如下图所示。
PyQt5入门教程1-开发第一个pyqt5的程序HelloPyQt5
控制台输出了‘hello’和‘world’,说明程序运行成功了。当然如果控制台程序中不需要提供事件循环,那么也可以不去调用QCoreApplication.exec()。下面代码用到了Qt中的类,但只在控制台输出,是一个控制台程序。


from PyQt5.QtCore import QByteArray

if __name__ == '__main__':
    ba = QByteArray(3,'a')
    print(ba)

其中QByteArray类是Qt表示字节数组的类,以后我们会详细介绍。

三、用pyCharm开发的第一个PyQt Widget程序

(1)首先关闭原来的工程,选择菜单中的‘File->Close Project’。然后新建一个工程,工程文件夹名称我们设为HelloPyQt_2,项目文件夹路径放在在‘F:/mypyqt’下。勾选需要勾选的复选框,然后点击Create按钮。
稍等一会,pyCharm会自动新建一个main.py的源文件,并自动打开编辑窗口,可以看到已经生成了一些代码,我们把这些代码删掉,输入以下代码。


import sys
from PyQt5 import QtWidgets,QtCore

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    widget = QtWidgets.QWidget()
    widget.resize(640,480)
    widget.setWindowTitle('Hello PyQt5 from pyCharm')
    widget.show()
    exitCode = app.exec_()
    sys.exit(exitCode)

(2)按下运行按钮或者按下Shift+F10运行程序,如下图所示
PyQt5入门教程1-开发第一个pyqt5的程序HelloPyQt5
我们使用集成开发环境pyCharm开发并顺利运行了第一个PyQt Widget程序,这也说明PyQt的开发环境也成功搭建好了。这个程序只有框架,对话框空空如也,接下来我们为对话框加点控件。所谓控件,在Qt中也被称为小部件(Widget),也就是供用户使用的图形界面元素,比如按钮,编辑框,进度条等。下面我们来手工开发一个带有按钮控件和编辑框控件的Qt程序。为什么叫手工开发呢?因为界面设计通常是由可视化界面设计器来完成的,也就是只需要从控件工具箱中选择所需要的控件,然后拖放到对话框上即可,在下面的这个程序中我们不使用界面设计器来辅助,完全通过手工输入代码来实现控件。

四、手工开发使用了布局且带有控件的PyQt程序

(1)启动pyCharm,新建一个名为HelloPyQt_3的工程,然后在main.py中输入如下代码。


from PyQt5.QtWidgets import *
import sys

class CMyDialog(QDialog):
    def __init__(self):
        super(CMyDialog,self).__init__()
        self.resize(640,480)
        self.setWindowTitle('Hello Dialog')
        self.initUI()

    def initUI(self):
        #实例化一个垂直布局
        layout = QVBoxLayout()
        #实例化3个按钮
        #QPushButton是Qt提供的按压按钮类,参数是按钮标题
        button1 = QPushButton('Button1')
        button2 = QPushButton('Button2')
        button3 = QPushButton('Close')
        #实例化一个文本编辑框,并且textEdit1作为类CMyDialog的成员变量,self指向CMyDialog
        #QTextEdit是Qt提供的文本编辑框类
        self.textEdit1 = QTextEdit('hello')
        #连接俺就的clicked信号和槽(事件处理函数)
        button1.clicked.connect(self.myclick)
        button2.clicked.connect(self.myclick)
        button3.clicked.connect(self.close)

        #在界面布局中添加各个控件
        layout.addWidget(button1)
        layout.addWidget(button2)
        layout.addWidget(button3)
        layout.addWidget(self.textEdit1)
        #把一个界面布局添加到一个界面布局上
        self.setLayout(layout)

    def myclick(self):
        button = self.sender()
        print(button.text())
        self.textEdit1.setText('you click the ' + button.text())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    main = CMyDialog()
    main.show()
    exitCode = app.exec_()
    sys.exit(exitCode)

在上述代码中,我们定义了一个对话框类CMyDialog,它的父类是Qt提供的对话框类QDialog。在类CMyDialog中定义了3个函数(在面向对象程序中也称为方法method):第一个是构造函数__init__,这个函数名是固定的,所有python定义的类的构造函数都是这样的函数名,我们在这个构造函数里设置了对话框的尺寸和标题,并调用了成员函数initUI;第二个是成员函数initU,在这个自定义函数中,我们实例化了一个垂直布局,然后实例化按钮和文本编辑框,最后连续绑定到按钮信号的槽函数;第三个是槽函数myclick,槽函数也就是事件的信号处理函数(有时也会简称为事件处理函数),槽函数myclick对应的事件是用户单击按钮事件,该事件会发送单击按钮信号,此时只需要把这个信号连接(通过connect)到按钮的槽函数(此例中是myclick函数),后者在接收到这个信号时,就会作出相应的处理操作。这里所说的布局有点不好理解,它对应的英文是layout,有布局,布置,设计或安排的意思,这里就是指界面或页面上的布局安排或设计,我们简称为布局。布局管理系统是Qt中提供的一个简单而有效的方式来自动组织各种控件,以保证他们能够很好地利用可用空间(此例中是对话框),当可用空间发生变化时,布局将自动调整控件的位置和大小,以确保这些控件的布局变化保持一致且用户界面主体可用。布局分为水平布局和垂直布局,我们在此例中定义的是垂直布局(QVBoxLayout),就是可以自动让各个控件垂直排列,而不需要一个一个手动安排每个控件的位置。当然,也可以不用布局,自己通过坐标来逐一设置控件的位置。
(2)点击运行按钮或者Shift+F10,运行该程序,如下图所示:
PyQt5入门教程1-开发第一个pyqt5的程序HelloPyQt5

五、手工开发未使用布局且带有空间的PyQt程序

(1)启动pyCharm,新建一个名为HelloPyQt_4的工程,然后在main.py中输入下面代码


import sys
from PyQt5 import QtWidgets,QtCore
from PyQt5.QtWidgets import *

class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.resize(200,100)
        #实例化按钮
        self.lb1 = QPushButton('button 1',self)
        #设置坐标
        self.lb1.setGeometry(10,20,80,50)
        self.lb2 = QPushButton('button 2',self)
        self.lb2.setGeometry(110,20,80,50)
        #把信号clicked连接到槽函数myclick
        self.lb1.clicked.connect(self.myclick)
        self.lb2.clicked.connect(self.myclick)

    def myclick(self):
        button = self.sender()
        QMessageBox.information(self,'Notice',button.text() + ' is cool!',QMessageBox.Yes)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    exitCode = app.exec_()
    sys.exit(exitCode)

在上述代码中,我们定义了连个按钮并且没有用到布局对象,因此需要调用按钮类的成员函数setGeometry来设置按钮的位置。例如self.setGeometry(10,20,80,50),其中,10和20是左上角的顶点坐标,80和50是按钮的长度和高度。
(2)点击运行按钮或者Shift+F10来运行程序,运行后单击任一按钮,会出现一个信息框,如图所示:
PyQt5入门教程1-开发第一个pyqt5的程序HelloPyQt5

© 版权声明

相关文章

暂无评论

none
暂无评论...