iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 17
1
自我挑戰組

Deeplearning and PyQt5 tutorial系列 第 17

Day 17 初學者補給站 PyQt 小細節-3

  • 分享至 

  • xImage
  •  

大家好~~歡迎來到第十七篇 PyQt 介紹-3

本篇要來跟大家說明關於槽與訊號的問題,想必大家如果有自己找資料或是有看書的話會看到這個詞彙。

  • 訊號
    這兩個到底有甚麼差別。
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 的方便度有多高。

那麼在這謝謝大家,本篇就是跟大家提一下槽與訊號到底是什麼,釐清一下大家可能會有的迷思。

訊號呼叫,方便處理,整體規劃完整,就能讓事情減輕不少壓力。


上一篇
Day 16 初學者補給站 PyQt 小細節-2
下一篇
Day 18 初學者補給站 PyQt 小細節-4
系列文
Deeplearning and PyQt5 tutorial30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言