最近接触到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时,还可以使用扩展工具进行简化工作:这里不介绍原理:
在设定中找到扩展工具,然后添加工具:
1.QT_designer
程序路径:是在你电脑上的designer存放的位置
我的路径为:C:\Users\账户\AppData\Roaming\Python\Python37\site-packages\pyqt5_tools\Qt\bin\designer.exe
生成文件的存放路径:$ProjectFileDir$
代表当前的项目文件存在路径,该生成的文件为.ui文件
2.PY_UIC
该工具其实就是一行python的命令,不过为了简便,将他合成为工具
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文件夹下了
然后使用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,信号与槽模式下进行查看
同样,修饰器可以不使用,如果不使用,就没有那么多的麻烦事情了,下面说槽函数的第一句:
def on_pushButton_clicked(self):
在上面的语句中on_ttt_xx(self)
ttt为元件的名称
xxx为元件的信号
其余的都是固定的,就这么简单,不过这么简单的机制也是PyQt的核心内容哦,一旦掌握了核心内容后期的重点,就在于程序编写了。