PyQT5 中兩個界面之間數據傳遞


在使用PyQT5做GUI桌面應用程序設計時,經常需要對在兩個界面之間做信號的傳遞,這個時候我們需要通過建立信號pyqtSignal 然后通過Connect 相應的槽函數來完成界面之間的數據傳遞。

1、pyqtSignal 

  通過pyqtSignal  可以聲明不帶參數和帶參數的實例對象,帶參數的實例對象可以聲明整形、字符型、列表、字典等數類型,具體如下:

from PyQt5.QtCore import QObject , pyqtSignal
    #聲明無參數的信號
    signal1 = pyqtSignal()

    #聲明帶一個int類型參數的信號
    signal2 = pyqtSignal(int)

    #聲明帶int和str類型參數的信號
    signal3 = pyqtSignal(int,str)

    #聲明帶一個列表類型參數的信號
    signal4 = pyqtSignal(list)

    #聲明帶一個字典類型參數的信號
    signal5 = pyqtSignal(dict)

    #聲明一個多重載版本的信號,包括帶int和str類型參數的信號和帶str類型參數的信號
    signal6 = pyqtSignal([int,str], [str])

  對信號攜帶的數據類型做完相應的實例聲明后,通過emit的方式進行信號的發送,但是要根據你聲明的信號類型,emit中做相應類型數據的發送

        signal1.emit()
        signal2.emit(1)
        signal3.emit(1,"text")
        signal4.emit([1,2,3,4])
        signal5.emit({"name":"wangwu","age":"25"})
        signal6[int,str].emit(1,"text")      

   pyqtSignal 實例對象通過connent 對應函數的方式 ,將信號與槽函數做綁定處理

signal1.connetc(signalCall1)
def signalCall1():
    pass

  具體2個界面之間的信號傳遞如下:

class Form1():
    signal_1 = pyqtSignal(str) #主界面的信號用來綁定子界面類的函數方法
    def __init__(self, num=10):
        #創建form2的對象
        self.num = num
        self.form2 = Form2() #實例化子界面類
         #將自己的信號和Form2的接受函數綁定
        self.signal_1.connect(self.form2.get_data)
        #通過按鍵打開from2
        self.pushButton.clicked.connect(self.open_form2())

    def open_form2(self): #傳遞信號
        self.form2.show() #通過pushbutton 展示子界面  如果只是做數據的傳遞,不打開第二個界面,可以 不調用self.form2.show() 方法
        #向form2發送信號,將self.num發了出去 
        self.signal_1.emit(self.num) #通過自己的信號向子界面傳遞數據。要想多傳遞幾個值,就在emit(值1,值2) 對應到子界面get_data接受就是2個參數,即get_data(值1,值2)
        #將form2的信號_singal_2和主界面的getData_F2連接
        self.form2.signal_2.connect(self.getData_F2)
       
    def getData_F2(self,num2):
        #用於接收Form2發過來的數據
        self.num2 = num2 # num2 就是子界面傳遞過來的數據
        
class Form2(): #子界面類 
    signal_2 = pyqtSignal(str) #子界面類創建信號用來綁定主界面類的函數方法
    def __init__(self,num2=20):
        self.num2 = num2

    def get_data(self,num):
        #接受Form1傳過來的num,保存到自己的變量里面。
        self.num = num
        #子界面通過signal_2 向主界面傳遞數據
        signal_2.emit(self.num2)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM