PyQt5 GUI编程界面与函数相连

本文介绍了如何使用PyQt5将GUI界面与函数相结合,通过PyQtDesigner设计界面,pyuic5转换UI文件,然后在独立的Python文件中实现功能函数,通过信号与槽机制连接界面和函数。讲解了窗口部件的重写、自定义函数的绑定,以及如何通过槽函数实现部件的交互。
摘要由CSDN通过智能技术生成

PyQt5 GUI编程界面与函数相连

在使用PyQt5的时候会出现一些需求无法用代码一步步实现,而用GUI画完窗口之后,又要根据pyUIC5自动生成的界面的参数进行编程,这样增加了理解变量所需的时间。我查到了一个解决办法,就是将界面设计与函数实现分开分别写,并用一个巧妙的方法将这俩在代码层面进行连接。

图形界面的实现

首先是界面的生成,PyQt desinger是属于Qt的可视化组件创造工具,为我们提供了托拉拽的设计界面,十分简单,只要掌握了布局的设计 ,基本上可以随心所欲进行设计,一些复杂的部件也可以大胆添加而不需要进行代码层面的设计,如果使用代码,需要先添加组件,再进行布局的设计,再将部件添加在一个布局之中,最后得到的部件大小或许还不满足我们的目的,不够美观或者布局不协调都是无法可视化设计带来的不良后果。所以就先利用部件的托拉拽,放入部件,再设计好布局使其能够随窗口的变化而变化。再反向生成窗口函数就可以。使用pyuic5 -o filename.py filename.ui进行ui文件转换为python文件的操作,在terminal输入即可。如果你有配套的小工具的话就再好不过了。
一般会得到这样的一个默认的窗口:


# -*- coding: utf-8 -*-
"""
@author:xiaoyangchicao2020
@time:2022-99-99
"""
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import *


class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1057, 754)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.centralwidget)
        self.horizontalLayout_3.setObjectName("horizontalLayout_3")
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.verticalLayout_8 = QtWidgets.QVBoxLayout()
        self.verticalLayout_8.setObjectName("verticalLayout_8")
        self.graphicsView = QtWidgets.QGraphicsView(self.centralwidget)
        self.graphicsView.setObjectName("graphicsView")
        self.verticalLayout_8.addWidget(self.graphicsView)
        self.horizontalLayout = QtWidgets.QHBoxLayout()

诸如这样的窗口代码,他们本身运行后是没有任何动静的,因为没有设置窗口循环显示,我们直接运行是没有窗口生成的,属于等会儿要拿来使用的配件。

函数的重写与自定义

PyQt5提供了丰富的函数接口,所以我们随心所欲自定义的函数可以直接绑定在那些部件上面。可以利用部件里面自带的方法进行创新,也可以自定义self值,继承封装好的类进行拓展。总的来说,自定义函数与函数的重写是对窗口部件的解构,是对部件属性的自定义,是一个新类的重构,所以有一定的难度。如果想实现一个功能,先去查查有没有封装好的函数或者方法可以调用,实在不行再自己从根源上进行重写。很大可能是在重复造轮子

函数如何与界面相连

直接开辟一个新的py文件作为方法函数编写区域,并将这个窗口作为包来导入:
from g import Ui_MainWindow
其中‘g’是我的窗口代码的名字,‘Ui_MainWindow’是自动生成的窗口类的名字,大家可以自己更改名字,这个要注意的是,我们在构造包含自定义函数的类的时候要与这个名字保持一致。

信号与槽

Qt提供了信号与槽机制进行控制。信号就是人机对话过程中人的动作,譬如点击某个按钮、鼠标的移动等事件,这样会向我们的窗口部件传入一个信号,而我们的部件有很多槽,信号传到某个部件的某个槽中就会激活槽,进行槽里面的操作,而槽里面的操作就是所谓的槽函数,也就是我们定义的函数,函数怎么写、写多少、和哪个部件绑定、和几个部件绑定都是可以自定义的,只需要将接口放进去就可以。
有了这些基础,我们再来看看如何将写好的函数这个内核与界面这个外壳进行拼接。

class show(QMainWindow):
    def __init__(self):
        super(show, self).__init__()
        self.ui= Ui_MainWindow()
        self.ui.setupUi(self)

首先是创建一个新类,继承刚刚生成那个界面的父类,并将自己作为新类。初始化绘图,得到self.ui就是可视化的绘图窗口,也就是是你刚刚生成的那个ui的画面。此时下面只要加上循环显示主函数就可以得到一个所有功能都是默认的窗口。
然后就是组装你的类,先把自定义的变量写进类里面,再把自定义函数放入部件的槽里面。比如
self.ui.graphicsView.mousePressEvent= self.mypress
指的就是在ui界面的那个QGraphicsView窗口的鼠标按下操作进行新的定义。将原本的鼠标按压事件所带来的结果改成我自定义的函数带来的结果。

        self.ui.graphicsView.grabKeyboard()
        self.ui.listView.clicked.connect(self.clicked)
        self.ui.actionOPen.triggered.connect(self.openimg)
        self.ui.actionSave.triggered.connect(self.saveimg)

这些也是进行函数的连接与重建,大家可以查一下分别代表着什么意思。这样的话,可视化的窗口就可以按照这样的方法一步步增添自己想要的功能,自己的功能如果不会写的话,也可以查一查如何通过部件本事实现自己的目的,一般都是有许多的方法在里面的。

  • 3
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

♡小羊不吃草

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值