最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python?PyQt5(自定義)信號與槽使用及說明

 更新時間:2022年12月16日 14:51:59   作者:來包番茄沙司  
這篇文章主要介紹了python?PyQt5(自定義)信號與槽使用及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

所謂PyQt5高級自定義信號與槽,指的就是我們可以以自己喜歡的方式定義信號與槽函數,并傳遞參數,自定義信號的一般流程如下

  • 定義信號
  • 定義槽函數
  • 連接信號與槽函數
  • 發(fā)射信號

1 定義信號

PyQt5通過類成員變量定義信號對象

from PyQt5.QtCore import pyqtSignal
# 無參數的信號
signal1 = pyqtSignal()
# 帶一個參數(整數)的信號
signal2 = pyqtSignal(int)
# 帶兩個參數(整數,字符串)的信號
signal3 = pyqtSignal(int, str)
# 帶一個參數(列表)的信號
signal4 = pyqtSignal(list)
# 帶一個參數(字典)的信號
signal5 = pyqtSignal(dict)
# 帶(整數 字符串)或者(字符串)的信號
signal6 = pyqtSignal([int, str], [str])

2 定義槽函數

定義一個槽函數,它有多個不同的輸入參數

def signalCall1(self):
  print("signal1 emit")
def signalCall2(self, val):
  print('signal2 emit, value:', val)
def signalCall3(self, val, text):
  print('signall3 emit, value:', val, text)
def signalCall4(self, val):
  print('signal4 emit, value:', val)
def signalCall5(self, val):
  print('signal5 emit, value', val)
def signalCall6(self, val, text):
  print('signal6 emit,value', val, text)
def signalCall7(self, val):
  print('signal6 ovetload emit',val)

3 連接信號與槽函數

# 信號與槽函數的連接
self.signal1.connect(self.signalCall1)
self.signal2.connect(self.signalCall2)
self.signal3.connect(self.signalCall3)
self.signal4.connect(self.signalCall4)
self.signal5.connect(self.signalCall5)
self.signal6[int, str].connect(self.signalCall6)
self.signal6[str].connect(self.signalCall7)

4 發(fā)射信號

#信號發(fā)射
self.signal1.emit()
self.signal2.emit(1)
self.signal3.emit(1,'第三個')
self.signal4.emit([1,2,3,4])
self.signal5.emit({"name":'JIA','age':'21'})
self.signal6[int,str].emit(1,"第六")
self.signal6[str].emit('第六')

5 實例

from PyQt5.QtCore import QObject,pyqtSignal
class CusSignal(QObject):
  #無參數的信號
  signal1 = pyqtSignal()
  #帶一個參數(整數)的信號
  signal2 = pyqtSignal(int)
  #帶兩個參數(整數,字符串)的信號
  signal3 = pyqtSignal(int,str)
  #帶一個參數(列表)的信號
  signal4 = pyqtSignal(list)
  #帶一個參數(字典)的信號
  signal5 = pyqtSignal(dict)
  #帶(整數 字符串)或者(字符串)的信號
  signal6 = pyqtSignal([int,str],[str])
  def __init__(self, parent=None):
    super(CusSignal, self).__init__(parent)
    #信號與槽函數的鏈接
    self.signal1.connect(self.signalCall1)
    self.signal2.connect(self.signalCall2)
    self.signal3.connect(self.signalCall3)
    self.signal4.connect(self.signalCall4)
    self.signal5.connect(self.signalCall5)
    self.signal6[int,str].connect(self.signalCall6)
    self.signal6[str].connect(self.signalCall7)
    #信號發(fā)射
    self.signal1.emit()
    self.signal2.emit(1)
    self.signal3.emit(1,'第三個')
    self.signal4.emit([1,2,3,4])
    self.signal5.emit({"name":'JIA','age':'21'})
    self.signal6[int,str].emit(1,"第六")
    self.signal6[str].emit('第六')
  #槽函數
  def signalCall1( self ):
    print("signal1 emit")
  def signalCall2( self,val ):
    print('signal2 emit,value:',val)
  def signalCall3( self,val,text ):
    print('signall3 emit,value:',val,text)
  def signalCall4( self,val ):
    print('signal4 emit,value:',val)
  def signalCall5( self,val ):
    print('signal5 emit,value',val)
  def signalCall6( self,val,text ):
    print('signal6 emit,value',val,text)
  def signalCall7(self, val ):
    print('signal6 ovetload emit', val)
if __name__ == '__main__':
  custSignal = CusSignal()

運行結果:

在這里插入圖片描述

自定義參數的傳遞及實例

在pyqt編程過程中,經常會遇到給槽函數傳遞自定義參數的情況,比如有一個信號與槽函數的連接是

我們知道對于clicked信號,它是沒有參數的,對于show_page函數來說,希望他可以接受參數,希望show_page函數如下這樣

def show_page(self,name):
    print(name',點擊了')

于是就會產生一個問題,信號發(fā)出的參數個數與槽函數接受的參數個數不一,那么如何解決這個問題呢,這里提供兩種解決方法;

lamdba表達式

使用lambda表達式傳遞按鈕數字給槽函數,當然還可以傳遞其他東西,甚至是按鈕本身

button1.clicked.connect(lambda :self.onButtonClick(1))
button2.clicked.connect(lambda :self.onButtonClick(2))

使用functools中的partial函數

button1.clicked.connect(partial(self.onButtonClick, 1))
button2.clicked.connect(partial(self.onButtonClick, 2))

實例

import sys
from PyQt5.QtWidgets import *
from functools import partial
class WinForm(QMainWindow):
  def __init__(self,parent=None):
    super(WinForm, self).__init__(parent)
    #實例化兩個按鈕
    button1=QPushButton('Button1')
    button2=QPushButton('Button2')
    #todo 第一種方法
    #單擊信號關聯(lián)槽函數,利用Lanbda表達式傳遞一個參數
    # button1.clicked.connect(lambda :self.onButtonClick(1))
    # button2.clicked.connect(lambda :self.onButtonClick(2))
    #
    #todo 第二種方法
    button1.clicked.connect(partial(self.onButtonClick, 1))
    button2.clicked.connect(partial(self.onButtonClick, 2))
    #實例化窗口
    main=QWidget()
    #設置窗口的布局,并向其中添加控件
    layout=QHBoxLayout(main)
    layout.addWidget(button1)
    layout.addWidget(button2)
    #設置為中央控件
    self.setCentralWidget(main)
  def onButtonClick( self,n ):
    #彈窗信息提示框,輸出被點擊的信息
    print("Button {0}".format(n))
    QMessageBox.information(self,'信息提示框','Button {0}'.format(n))
if __name__ == '__main__':
  app=QApplication(sys.argv)
  form=WinForm()
  form.show()
  sys.exit(app.exec_())

總結

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • 利用python數據分析處理進行炒股實戰(zhàn)行情

    利用python數據分析處理進行炒股實戰(zhàn)行情

    這篇文章主要介紹了利用python數據分析進行炒股實戰(zhàn)行情,本文主要介紹三部分:數據采集,數據預處理,利用SVM算法進行建模,本文僅供參考借鑒
    2021-08-08
  • 淺談pytorch中的BN層的注意事項

    淺談pytorch中的BN層的注意事項

    這篇文章主要介紹了淺談pytorch中的BN層的注意事項,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • python實現(xiàn)tail實時查看服務器日志示例

    python實現(xiàn)tail實時查看服務器日志示例

    今天小編就為大家分享一篇python實現(xiàn)tail實時查看服務器日志示例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Python JWT認證與pyjwt包詳細介紹

    Python JWT認證與pyjwt包詳細介紹

    JWT的聲明一般被用來在身份提供者和服務提供者間傳遞被認證的用戶身份信息,以便于從資源服務器獲取資源,也增加一些額外的其它業(yè)務邏輯所必須的聲明信息,該token也可直接被用于認證,也可被加密,這篇文章主要介紹了Python JWT認證與pyjwt包簡介,需要的朋友可以參考下
    2023-05-05
  • Python遍歷目錄下文件、讀取、千萬條數據合并詳情

    Python遍歷目錄下文件、讀取、千萬條數據合并詳情

    這篇文章主要介紹了Python遍歷目錄下文件、讀取、千萬條數據合并詳情,對文件夾和文件進行屬性判斷,首先對文件夾進行遍歷,看文件夾里有什么樣的文件,讀取出文件夾中的所有文件,下面文章將詳細介紹該內容,需要的小伙伴可以參考一下
    2022-01-01
  • 完美解決在oj中Python的循環(huán)輸入問題

    完美解決在oj中Python的循環(huán)輸入問題

    今天小編就為大家分享一篇完美解決在oj中Python的循環(huán)輸入問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06
  • python實現(xiàn)飛機大戰(zhàn)小游戲

    python實現(xiàn)飛機大戰(zhàn)小游戲

    這篇文章主要為大家詳細介紹了python實現(xiàn)飛機大戰(zhàn)游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • Python實現(xiàn)Word和TXT文件格式之間的相互轉換

    Python實現(xiàn)Word和TXT文件格式之間的相互轉換

    Word文檔(.doc或.docx)和純文本文件(.txt)是兩種常用的文件格式,本文將詳細介紹如何使用Python實現(xiàn)Word和TXT文件格式之間的相互轉換,文中有詳細的代碼示例供大家參考,需要的朋友可以參考下
    2024-07-07
  • python生成單位陣或對角陣的三種方式小結

    python生成單位陣或對角陣的三種方式小結

    這篇文章主要介紹了python生成單位陣或對角陣的三種方式小結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Python實現(xiàn)向PPT中插入表格與圖片的方法詳解

    Python實現(xiàn)向PPT中插入表格與圖片的方法詳解

    這篇文章將帶大家學習一下如何在PPT中插入表格與圖片以及在表格中插入內容,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2022-05-05

最新評論

二连浩特市| 商都县| 紫金县| 磐安县| 上饶县| 利辛县| 承德县| 剑川县| 天柱县| 磴口县| 瑞丽市| 西林县| 台东市| 皋兰县| 高平市| 石屏县| 防城港市| 大洼县| 稻城县| 启东市| 婺源县| 巴南区| 石林| 濮阳县| 津市市| 白银市| 巨野县| 广汉市| 鹿泉市| 巴林右旗| 晋州市| 大同市| 新宾| 星座| 佛冈县| 醴陵市| 信阳市| 盘山县| 安陆市| 黄山市| 通江县|