7、PyQt构建用户界面应用程序

1、PyQt安装与构建用户界面

GUI就是图形用户界面的意思,在Python中使用PyQt可以快速搭建自己的应用,使得自己的程序看上去更加高大上,学会GUI编程可以使得自己的软件有可视化的结果,更方便地参加“互联网+”或其他创新创业大赛。

1.1PyQt安装

安装 PyQt

pip install pyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple

随后继续安装 QtDesigner (Python版本过高导致安装失败,创建虚拟环境Python版本3.9及以下即可)

pip install pyqt5-tools  -i https://pypi.tuna.tsinghua.edu.cn/simple --user

安装 pyqt5_tools 报错,直接安装 PyQt5Designer

pip install PyQt5Designer

点击 PyCharm File->Settings->Tools->External tools 打开外部工具界面,点 "+" 号进入添加外部工具界面。在 "Name" 处输入工具名称,这个名称可以随便取,只要自己清楚就行,我这里写的是 Qt designer

在python安装目录下找到安装的 designer.ext 所在的路径

将路径复制到 "Programs" 处,注意要包含 designer.exe 的文件名。Working directory 处设置自己的工作路径,qtdesigner生成的 ui 文件会默认保存在该路径。"Arguemnts" 不用设置,确认即可。

接下来,按同样的方法添加 PyUIC,pyuic 用于将 qtdesigner 生成的 .ui 文件转换成 python 可以识别的 .py 文件。其设置过程如下图所示, Programs 处输入 python.exe 所在的路径和文件名, Argument 处输入:

-m PyQt5.uic.pyuic -o $FileNameWithoutExtension$.py $FileName$

在 Working directory 处输入:

$FileDir$

这样生成的 py 文件就会和被转换的 ui 文件位于相同的文件夹下。点击ok完成设置。

1.2界面设计测试小程序

打开 PyCharm,选择菜单 File->New Project 新建一个工程项目,如下图所示,输入该项目的路径和名称,这里设置项目名称为 PyQtTest。

完成后,单击 Tools->External Tools->Qt designer 打开QtDesigner。

QtDesigner打开后会自动弹出新创建窗口的对话框,如果没有弹出的话可以单击 File->New 来打开该对话框。如下图所示,选择 Main Windows,然后单击 Create 来创建一个主窗口。

点击 File->Save as,将当前界面保存到我们刚创建的PyQtTest项目文件夹下,文件名设为QtTest.ui。

保存完成后,回到 PyCharm 中,可以看到我们的PyQtTest项目下多了一个 QtTest.ui 文件。

鼠标右键打击该文件调出右键菜单,单击 External tools->PyUIC,程序会调用 pyuic,将 ui 文件转换为 py 文件,执行完成后还在该项目中生成一个 QtTest.py 文件。

接下来右键单击 PyQtTest 项目,选择 New->Python File 新建一个 Python 文件,文件名设为 QtUi.py,打开该文件输入如下代码:

from QtTest import Ui_MainWindow
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow


class CamShow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(CamShow, self).__init__(parent)
        self.setupUi(self)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ui = CamShow()
    ui.show()
    sys.exit(app.exec_())

运行后,显示创建的窗口表示PyQt和QtDesigner安装成功。

1.3PyQt制作界面实战图片展示功能

使用上面的方式打开 QtDesigner,在 Widget Box 中 Input Widgets->Combo Box 拖入窗口中

再将 Buttons->Push Button 拖入 Combo Box 的框中,点击修改名字,在将 objectName 修改为 OpenFileButton

再将 Display Widgets->Label 拖入 Combo Box 的框中,再将 objectName 修改为 ImageLabel

CTRL + s 保存,再在 PyCharm 中使用扩展工具 PyUIC 将 .ui 文件转换为 .py 文件

在再 main.py 文件中输入以下代码

from QtTest import Ui_MainWindow
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog
from PyQt5 import QtGui


class CamShow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(CamShow, self).__init__(parent)
        self.setupUi(self)
        # 信号与槽
        self.OpenFileButton.clicked.connect(self.loadImage)  # 按钮被按下后会触发 loadImage 函数

    def loadImage(self):
        print("按钮被按下了")
        self.fname, _ = QFileDialog.getOpenFileName(self, '选择图片', '.', '图像文件(*.jpg *.png)')
        print(self.fname)  # 图片地址

        pix = QtGui.QPixmap(self.fname).scaled(self.ImageLabel.width(), self.ImageLabel.height())  # scaled 图片压缩
        self.ImageLabel.setPixmap(pix)  # 显示图片


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ui = CamShow()
    ui.show()
    sys.exit(app.exec_())

2、优化PyQt构建用户界面应用程序

2.1PyQt制作界面优化

修改窗口名称

工具栏<在这里输入>

预览

窗口下面显示提示文字

使用 Label 控件

2.2PyQt制作界面代码完善

from QtTest import Ui_MainWindow
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QMessageBox
from PyQt5 import QtGui


class CamShow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(CamShow, self).__init__(parent)
        self.setupUi(self)
        # 信号与槽
        self.OpenFileButton.clicked.connect(self.loadImage)  # 按钮被按下后会触发 loadImage 函数
        self.actionOpen.triggered.connect(self.loadImage)
        self.actionexit.triggered.connect(self.exit)
        self.actionabout.triggered.connect(self.about)

    def loadImage(self):
        # print("按钮被按下了")
        self.infoLabel.setText("打开文件按钮被按下了")
        self.fname, _ = QFileDialog.getOpenFileName(self, '选择图片', '.', '图像文件(*.jpg *.png)')
        print(self.fname)  # 图片地址

        pix = QtGui.QPixmap(self.fname).scaled(self.ImageLabel.width(), self.ImageLabel.height())  # scaled 图片压缩
        self.ImageLabel.setPixmap(pix)  # 显示图片

    def exit(self):
        sys.exit(app.exec_())  # 退出程序

    def about(self):
        self.infoLabel.setText("帮助按钮被按下了")
        QMessageBox.information(self, "软件说明", "该文件由xxx制作而成,软件版本为1.0")



if __name__ == '__main__':
    app = QApplication(sys.argv)
    ui = CamShow()
    ui.show()
    sys.exit(app.exec_())

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值