欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

  • 定義信號(hào)
  • 定義槽函數(shù)
  • 連接信號(hào)與槽函數(shù)
  • 發(fā)射信號(hào)

1 定義信號(hào)

PyQt5通過類成員變量定義信號(hào)對(duì)象

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

2 定義槽函數(shù)

定義一個(gè)槽函數(shù),它有多個(gè)不同的輸入?yún)?shù)

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 連接信號(hào)與槽函數(shù)

# 信號(hào)與槽函數(shù)的連接
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ā)射信號(hào)

#信號(hào)發(fā)射
self.signal1.emit()
self.signal2.emit(1)
self.signal3.emit(1,'第三個(gè)')
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 實(shí)例

from PyQt5.QtCore import QObject,pyqtSignal
class CusSignal(QObject):
  #無(wú)參數(shù)的信號(hào)
  signal1 = pyqtSignal()
  #帶一個(gè)參數(shù)(整數(shù))的信號(hào)
  signal2 = pyqtSignal(int)
  #帶兩個(gè)參數(shù)(整數(shù),字符串)的信號(hào)
  signal3 = pyqtSignal(int,str)
  #帶一個(gè)參數(shù)(列表)的信號(hào)
  signal4 = pyqtSignal(list)
  #帶一個(gè)參數(shù)(字典)的信號(hào)
  signal5 = pyqtSignal(dict)
  #帶(整數(shù) 字符串)或者(字符串)的信號(hào)
  signal6 = pyqtSignal([int,str],[str])
  def __init__(self, parent=None):
    super(CusSignal, self).__init__(parent)
    #信號(hào)與槽函數(shù)的鏈接
    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)
    #信號(hào)發(fā)射
    self.signal1.emit()
    self.signal2.emit(1)
    self.signal3.emit(1,'第三個(gè)')
    self.signal4.emit([1,2,3,4])
    self.signal5.emit({"name":'JIA','age':'21'})
    self.signal6[int,str].emit(1,"第六")
    self.signal6[str].emit('第六')
  #槽函數(shù)
  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()

運(yùn)行結(jié)果:

在這里插入圖片描述

自定義參數(shù)的傳遞及實(shí)例

在pyqt編程過程中,經(jīng)常會(huì)遇到給槽函數(shù)傳遞自定義參數(shù)的情況,比如有一個(gè)信號(hào)與槽函數(shù)的連接是

我們知道對(duì)于clicked信號(hào),它是沒有參數(shù)的,對(duì)于show_page函數(shù)來說,希望他可以接受參數(shù),希望show_page函數(shù)如下這樣

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

于是就會(huì)產(chǎn)生一個(gè)問題,信號(hào)發(fā)出的參數(shù)個(gè)數(shù)與槽函數(shù)接受的參數(shù)個(gè)數(shù)不一,那么如何解決這個(gè)問題呢,這里提供兩種解決方法;

lamdba表達(dá)式

使用lambda表達(dá)式傳遞按鈕數(shù)字給槽函數(shù),當(dāng)然還可以傳遞其他東西,甚至是按鈕本身

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

使用functools中的partial函數(shù)

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

實(shí)例

import sys
from PyQt5.QtWidgets import *
from functools import partial
class WinForm(QMainWindow):
  def __init__(self,parent=None):
    super(WinForm, self).__init__(parent)
    #實(shí)例化兩個(gè)按鈕
    button1=QPushButton('Button1')
    button2=QPushButton('Button2')
    #todo 第一種方法
    #單擊信號(hào)關(guān)聯(lián)槽函數(shù),利用Lanbda表達(dá)式傳遞一個(gè)參數(shù)
    # 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))
    #實(shí)例化窗口
    main=QWidget()
    #設(shè)置窗口的布局,并向其中添加控件
    layout=QHBoxLayout(main)
    layout.addWidget(button1)
    layout.addWidget(button2)
    #設(shè)置為中央控件
    self.setCentralWidget(main)
  def onButtonClick( self,n ):
    #彈窗信息提示框,輸出被點(diǎ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_())

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • scrapy+scrapyd+gerapy?爬蟲調(diào)度框架超詳細(xì)教程

    scrapy+scrapyd+gerapy?爬蟲調(diào)度框架超詳細(xì)教程

    Scrapy吸引人的地方在于它是一個(gè)框架,任何人都可以根據(jù)需求方便的修改。它也提供了多種類型爬蟲的基類,如BaseSpider、sitemap爬蟲等,最新版本又提供了web2.0爬蟲的支持,這篇文章主要介紹了scrapy+scrapyd+gerapy?爬蟲調(diào)度框架超詳細(xì)教程,需要的朋友可以參考下
    2022-06-06
  • Python實(shí)時(shí)監(jiān)控網(wǎng)站瀏覽記錄實(shí)現(xiàn)過程詳解

    Python實(shí)時(shí)監(jiān)控網(wǎng)站瀏覽記錄實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了Python實(shí)時(shí)監(jiān)控網(wǎng)站瀏覽記錄實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Python實(shí)現(xiàn)批量將word轉(zhuǎn)換成pdf

    Python實(shí)現(xiàn)批量將word轉(zhuǎn)換成pdf

    這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)批量將word文檔轉(zhuǎn)換成pdf文件,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-08-08
  • tensorflow 重置/清除計(jì)算圖的實(shí)現(xiàn)

    tensorflow 重置/清除計(jì)算圖的實(shí)現(xiàn)

    今天小編就為大家分享一篇tensorflow 重置/清除計(jì)算圖的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • 如何用python給數(shù)據(jù)加上高斯噪聲

    如何用python給數(shù)據(jù)加上高斯噪聲

    這篇文章主要介紹了如何用python給數(shù)據(jù)加上高斯噪聲問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 下載糗事百科的內(nèi)容_python版

    下載糗事百科的內(nèi)容_python版

    代碼是沒問題的,可以正常運(yùn)行,但是希望做到以下2方面: 1、多線程下載 2、代碼分離度更高,跟面向?qū)ο?
    2008-12-12
  • Python利用字節(jié)串或字節(jié)數(shù)組來加載和保存PDF文檔

    Python利用字節(jié)串或字節(jié)數(shù)組來加載和保存PDF文檔

    處理PDF文件的可以直接讀取和寫入文件系統(tǒng)中的PDF文件,然而,通過字節(jié)串(byte string)或字節(jié)數(shù)組(byte array)來加載和保存PDF文檔在某些情況下更高效,本文將介紹如何使用Python通過字節(jié)串或字節(jié)數(shù)組來加載和保存PDF文檔,需要的朋友可以參考下
    2024-09-09
  • 用python的seaborn畫數(shù)值箱型圖

    用python的seaborn畫數(shù)值箱型圖

    大家好,本篇文章主要講的是用python的seaborn畫數(shù)值箱型圖,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • python?實(shí)現(xiàn)syslog?服務(wù)器的詳細(xì)過程

    python?實(shí)現(xiàn)syslog?服務(wù)器的詳細(xì)過程

    這篇文章主要介紹了python?實(shí)現(xiàn)syslog服務(wù)器的詳細(xì)過程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-08-08
  • python使用自定義user-agent抓取網(wǎng)頁(yè)的方法

    python使用自定義user-agent抓取網(wǎng)頁(yè)的方法

    這篇文章主要介紹了python使用自定義user-agent抓取網(wǎng)頁(yè)的方法,涉及Python使用urllib2模塊操作網(wǎng)頁(yè)的技巧,需要的朋友可以參考下
    2015-04-04

最新評(píng)論