本篇要來跟大家說明關於槽與訊號的問題,想必大家如果有自己找資料或是有看書的話會看到這個詞彙。
import sys
import re
from functools import partial
from PyQt5.QtWidgets import *
from PyQt5.Qt import QWidget
from PyQt5 import QtGui,QtWidgets
from PyQt5.QtCore import *
from PyQt5.QtSql import QSqlDatabase , QSqlQueryModel , QSqlQuery
from PyQt5.QtGui import *
from Test_test import *
class MyMainWindow(QMainWindow,Ui_MainWindow):
def __init__(self,parent = None):
super(MyMainWindow,self).__init__(parent)
self.setupUi(self)
self.Text_btn.clicked.connect(self.button)
def button(self):
self.Text_display.setText("OK")
if __name__ == "__main__":
app = QApplication(sys.argv)
myWin = MyMainWindow()
myWin.show()
sys.exit(app.exec_())
self.Text_btn.clicked.connect(self.button)
def button(self):
self.Text_display.setText("OK")
其實我所用的 connect 與 def button 這樣其實就是槽與訊號的概念,可以簡單的想像槽就是一個接收的地方,而所謂的訊號就是傳送資料的意思,我們所做的傳送以及定義各項方法的方式其實就已經達到槽與訊號的概念,那為何在 PyQt 上都會提到槽與訊號這件事情呢?
因為如果我們不要做 def 的方式,那麼以上面程式來看我們要怎麼改呢?
if self.Text_btn.clicked:
self.Text_display.setText("OK")
else:
pass
我一個舉例來說,上方程式碼就是改成的樣子,但是這個寫法卻會有時讓他呈現錯誤,在某些情況這種寫法都會通,但是偏偏他這個方法不是每個方式都適用,可能是 PyQt 本身的性質關係,在這個部份我還在研究中,不過在這裡我非常就建議各位,就連書本以及大部份資料都會說明利用呼叫的方式,那麼就真的建議使用 def 的方式來完成,其實這個方式如果養成的話,對於你未來寫程式效率也會大大提升,就如我之前介紹 def 與 class 的方便度有多高。
那麼在這謝謝大家,本篇就是跟大家提一下槽與訊號到底是什麼,釐清一下大家可能會有的迷思。
訊號呼叫,方便處理,整體規劃完整,就能讓事情減輕不少壓力。