91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python中GUI庫圖形界面開發之PyQt5信號與槽怎么用

發布時間:2021-06-08 11:48:08 來源:億速云 閱讀:154 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關python中GUI庫圖形界面開發之PyQt5信號與槽怎么用的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

PyQt5信號與槽高級自定義信號與槽

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

  • 定義信號

  • 定義槽函數

  • 連接信號與槽函數

  • 發射信號

1、定義信號

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

  #無參數的信號
  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、發射信號

#信號發射
    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)
    #信號發射
    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()

運行結果如下

python中GUI庫圖形界面開發之PyQt5信號與槽怎么用

自定義參數的傳遞

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

button.clicked.connect(show_page)

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

def show_page(self,name):

    print(name',點擊了')

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

第一種:lamdba表達式

第二種:使用functools中的partial函數

兩種方法,下面均已寫上,自己可運行查看,注意注釋

實例如下

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 第一種方法
    #單擊信號關聯槽函數,利用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中GUI庫圖形界面開發之PyQt5信號與槽怎么用python中GUI庫圖形界面開發之PyQt5信號與槽怎么用

代碼分析

重點解釋

使用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))

感謝各位的閱讀!關于“python中GUI庫圖形界面開發之PyQt5信號與槽怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

兴宁市| 安图县| 沂源县| 达州市| 永德县| 保山市| 靖州| 临高县| 苗栗市| 宁强县| 新乡县| 鄂托克旗| 阿图什市| 三亚市| 临漳县| 南丹县| 信丰县| 旬阳县| 乌兰察布市| 榕江县| 阿瓦提县| 昌乐县| 和平县| 镇宁| 盱眙县| 泗水县| 桑植县| 临沂市| 临朐县| 普兰店市| 乐陵市| 象山县| 福安市| 修文县| 大英县| 从江县| 饶平县| 霍林郭勒市| 文安县| 保德县| 台江县|