PyQt5的槽函数编写

最近接触到python的GUI界面开发所以就涉及到了信号与槽的机制

但是由于我是用的编辑器是Pycharm所以,QTdesigner、UIC编译器都可以很容易的通过external tool来轻松连接,唯独erci这个工具我没有下载,因为我没有发现这个库,貌似是款软件。所以我干脆直接手写槽函数。

其实,最初感觉写槽函数真的很难,不过慢慢来发现也没有太难啦!

这里也顺便说一些QTdesigner、以及UIC工具的使用

python要想进行GUI界面的开发必须先安装两个必要的库PyQt5、pyqt5-tools

安装的方法可以直接使用命令行窗口,用pip命令进行安装:

其实python3.0以上安装所有的库都可以使用pip进行安装,类似:

pip install PyQt5


pip install pyqt5-tools

安装好两个库以后可以直接使用QTdesigner了,不过如果读者的编辑器是pycharm时,还可以使用扩展工具进行简化工作:这里不介绍原理:


PyQt5的槽函数编写_第1张图片

在设定中找到扩展工具,然后添加工具:

1.QT_designer


PyQt5的槽函数编写_第2张图片

程序路径:是在你电脑上的designer存放的位置

我的路径为:C:\Users\账户\AppData\Roaming\Python\Python37\site-packages\pyqt5_tools\Qt\bin\designer.exe

生成文件的存放路径:$ProjectFileDir$

代表当前的项目文件存在路径,该生成的文件为.ui文件

2.PY_UIC

该工具其实就是一行python的命令,不过为了简便,将他合成为工具

PyQt5的槽函数编写_第3张图片

Name:自己可以随意指定

Desciption:自己描述

Program:为Python窗口程序的位置

本机路径:D:\Programs\Python\Python37-32\pythonw.exe

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

该行语句大家都一样!

Working directory :$FileDir$

表示与ui文件在一个路径。

这两个工具配置好了以后就可以编写界面了!

我们使用QTdesigner工具随意生成一个文件,名字默认为untitled

本机将其存放在,project下的designer文件夹下了


PyQt5的槽函数编写_第4张图片

然后使用UIC扩展工具即可将其编译成py的文件。

注意:最好是将designer路径添加到resource

方法是选中文件夹,单击右键然后make directory as ,然后添加到路径

这一切都搞定之后,我们需要妥善将该页面调用,并生成程序。

代码如下:

import sys

import pyqt5_tools

# 导入UI文件的元件

import untitled

from PyQt5.QtWidgetsimport QMainWindow, QApplication, QDesktopWidget

from PyQt5.QtGuiimport QIcon

from PyQt5.QtCoreimport pyqtSlot

class MainWindows(QMainWindow, untitled.Ui_MainWindow):

    def __init__(self, parent=None):

        QMainWindow.__init__(self, parent)

        self.setupUi(self)

    # 创建槽函数 槽函数直接使用元件的名称即可

    @pyqtSlot()

    def on_pushButton_clicked(self):

        print('1按钮被按下')

# 调用该函数

if __name__== '__main__':

    app= QApplication(sys.argv)

    # 设置app的图标

    app.setWindowIcon(QIcon('./Icon/1.jpg'))

    main= MainWindows()

    main.show()

    sys.exit(app.exec_())

本文主要内容:

可以看见上面有一个位置为槽函数:

    @pyqtSlot()

    def on_pushButton_clicked(self):

        print('1按钮被按下')

其中  @pyqtSlot() 为修饰器,为了区分不同触发的名字

修饰器可以不使用,一样可以识别,但是如果用户一旦使用请务必与触发的机制一一对应,如在传入值为int时,必须将修饰器写为如下:

@pyqtSlot("int")

否则不会有触发。

那么如何查看每个触发信号是否带有参数呢?

请在QTdesigner中,F4,信号与槽模式下进行查看


PyQt5的槽函数编写_第5张图片

同样,修饰器可以不使用,如果不使用,就没有那么多的麻烦事情了,下面说槽函数的第一句:

def on_pushButton_clicked(self):

在上面的语句中on_ttt_xx(self)

ttt为元件的名称

xxx为元件的信号

其余的都是固定的,就这么简单,不过这么简单的机制也是PyQt的核心内容哦,一旦掌握了核心内容后期的重点,就在于程序编写了。


你可能感兴趣的:(PyQt5的槽函数编写)