iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0
Python

pythonGUI學習筆記系列 第 19

Day 19: PySide6 自訂信號

  • 分享至 

  • xImage
  •  

自訂信號

在前面幾天,使用了許多預訂的信號,但實際上,我們也是可以自訂信號,以滿足特定的需求

自訂信號的工具

在進入步驟之前,先簡單了解一些功能

  • Signal(type) : 創建一個信號,裡面設定的參數類型,是要傳入槽函數裡的參數類型。例如,Signal(int) 表示信號會傳遞一個整數
  • emit() : 發出信號,括號中放要傳遞的數據。

自訂信號的步驟

  1. PySide6.QtCore 导入 QObjectSignal
  2. 創建自定義類,繼承 QObject 並在裡面添加自訂的信號。
  3. 用 emit 方法發射信號
  4. 再將信號連結到特定的槽

自訂信號範例

如果傳入的是5的話,就會觸發信號,否則會列印 「數字不對」

  1. 導入模塊
from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QLabel, QPushButton
from PySide6.QtCore import QObject, Signal
  1. 自訂 QObject : 自訂一個信號 ifValue5 = Signal(int) ,他會將整數值傳遞給槽函數。同時創建判斷函數 Is5 如果是 5 會發送信號,否則會列印「數字不對」。
class MyObject(QObject):
    # 自訂信號,設定數據類型是整數
    ifValue5 = Signal(int)

    # 判斷是不是5的函數
    def Is5(self, value):
        if value == 5:
            self.ifValue5.emit(5)
        else:
            print("數字不對")
  1. 主窗口的設定 : 創建一個窗口,包含兩個按鈕和一個標籤。點擊按鈕後,會將標籤設置為 3 或 5,並檢查是否為5。
class MyWindow(QWidget):
    def __init__(self):
        super().__init__()

        # 創建元件
        self.lb = QLabel("0")
        self.btn = QPushButton("Set to 3")
        self.btn2 = QPushButton("Set to 5")
        # 連結 Object
        self.object = MyObject()
        self.object.ifValue5.connect(self.setText)

        # 點按鈕信號
        self.btn.clicked.connect(self.Set3)
        self.btn2.clicked.connect(self.Set5)

        # 佈局
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.lb)
        self.layout.addWidget(self.btn)
        self.layout.addWidget(self.btn2)
        self.setLayout(self.layout)

    def Set3(self):
        self.lb.setText("3")
        self.object.Is5(int(self.lb.text()))

    def Set5(self):
        self.lb.setText("5")
        self.object.Is5(int(self.lb.text()))

    def setText(self,value):
        print("數字正確")
        self.lb.setText(f"數字設定成{str(value)}")
  • 如果點擊 Set to 3 ,則會列印「數字不對」。
  • 如果点击 Set to 5 ,則信號發出,setText 函數被使用,標籤顯示「數字設定成5」。

總結

  • 自訂信號會用到

    1. Signal(type) : 定義信號,並指定給槽函數的參數類型。
    2. emit() : 發射信號
    3. QObject : 創建自訂類。
  • 自訂信號的步驟

  1. PySide6.QtCore 导入 QObjectSignal
  2. 創建自定義類,繼承 QObject 並在裡面添加自訂的信號。
  3. 用 emit 方法發射信號
  4. 再將信號連結到特定的槽

上一篇
Day18: PySide6 計時器(QTimer)
下一篇
Day 20 PySide6 線程(QThread)
系列文
pythonGUI學習筆記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言