Pyside2 中界面动作处理 (signal 和 slot)
一个引导的栗子
下面是一个简单的代码,我们创建了一个主窗口,然后创建了一个按钮在中间,但是此时我们点击它并没有任何反应。
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton
app = QApplication([])
window = QMainWindow()
window.resize(800, 480)
window.move(300, 300)
window.setWindowTitle('demo')
button = QPushButton('迪迦变身器', window)
button.move(350,210)
window.show()
app.exec_()
实际上,当我们按下按钮后,QApplication 是能感受到滴,并会分配给按钮控件来处理
但是这里我们的按钮控件我们并没有给它设置相应的处理方法,所以我们没有看到任何的反应。
严谨的分析
-
创建app 这个QT应用程序对象, QApplication 在QT中起到整个图形界面程序 底层管理的功能比如初始化、程序入口参数的处理,用户事件(对界面的点击、输入、拖拽)分发给各个对应的控件等等,所以当我们按下按钮后,QApplication 是能感受到滴,并会分配给按钮控件来处理。
-
app.exec_() 的作用就是 进入QT应用程序对象里面的事件处理循环中,是一个等待循环,此时如果你点击按钮,QApplication就会分配给按钮控件来处理。
-
所以我们需要一个控件的响应
在 Qt 系统中, 当界面上一个控件被操作时,比如 被点击、被输入文本、被鼠标拖拽等, 就会发出 信号
,英文叫 signal
。就是表明一个事件(比如被点击、被输入文本)发生了。
我们可以预先在代码中指定 处理这个 signal 的函数,这个处理 signal 的函数 叫做 slot
。
对信号的响应
在下面的代码中我们定义了一个 handleCalc()函数
通过 button.clicked.connect(handleCalc) 来使用它
用QT的术语来解释上面这行代码,就是:把 button 被 点击(clicked) 的信号(signal), 连接(connect)到了 handleCalc 这样的一个 slot上
大白话就是:让 handleCalc 来 处理 button 被 点击的操作。
from PySide2.QtWidgets import QApplication, QMainWindow, QPushButton, QMessageBox
def handleCalc():
QMessageBox.about(window,
'结果',
'你变成了一束光 !')
app = QApplication([])
window = QMainWindow()
window.resize(800, 480)
window.move(300, 300)
window.setWindowTitle('demo')
button = QPushButton('迪迦变身器', window)
button.move(350,210)
button.clicked.connect(handleCalc)
window.show()
app.exec_()