pyqt笔记1模块 信号和插槽

资料

  1. PyQt5图形界面编程
  2. PyQt5指南

模块

PyQt5本身拥有超过620个类和6000函数及方法。

  1. QtCore模块涵盖了包的核心的非GUI功能,此模块被用于处理程序中涉及到的 time、文件、目录、数据类型、文本流、链接、mime、线程或进程等对象。
  2. QtWidgets模块包含了一整套UI元素组件,用于建立符合系统风格的classic界面。
  3. QtGui模块涵盖多种基本图形功能的类; 包括但不限于:窗口集、事件处理、2D图形、基本的图像和界面 和字体文本。

信号和插槽

信号和槽是用来在对象间传递数据的方法:当一个特定事件发生的时候,signal会被发射出来,和信号连接的slot会被调用。连接信号和槽的语法为SenderObject.signal.connect(ReceiverObject.Slot)
很多GUI编程使用的是回调机制,而PyQt5具有独特的信号和插槽机制来处理事件。。在编写一个类时,要先定义该类的信号与槽,在类中信号与槽进行连接,实现对象之间的数据传输,信号发出的参数个数一定要大于槽函数接收的参数个数。

特点

  1. 一个信号可以连接多个槽。
  2. 一个信号可以连接另一个信号。
  3. 信号参数可以是任何Python类型。
  4. 一个槽可以监听多个信号。
  5. 信号与槽的连接方式可以是同步连接,也可以是异步连接。
  6. 信号与槽的连接可能会跨线程。
  7. 信号可能会断开。

定义新的信号:使用pyqtSignal()方法,新的信号作为类的属性。

#示例
class MyWidget(QWidget):   
    #定义信号
    Signal1 = pyqtSignal() # 无参数的信号      
    Signal2 = pyqtSignal(int) # 带一个参数(整数)的信号 
    Signal3= pyqtSignal(int,str)  # 带两个参数(整数,字符串)的信号         

    def __init__(self,parent=None):
        super(CustSignal,self).__init__(parent)

        #将信号连接到指定槽函数
        self.Signal1.connect(self.signalCall1)
        self.Signal2.connect(self.signalCall2)
        self.Signal3.connect(self.signalCall3)
    

      
    #实现槽函数
    def signalCall1(self):
        print("signal1 emit")

    def signalCall2(self,val):
        print("signal2 emit,value:",val)

    def signalCall3(self,val,text):
        print("signal3 emit,value:",val,text)

    def mousePressEvent(self, e):
        #重写点击事件 发射信号
        self.Signal1.emit()
        self.Signal2.emit(1)
        self.Signal3.emit(1,"text")
 

给槽函数传递数据

sender()方法确定信号源https://zhuanlan.zhihu.com/p/28415799

#在槽中
def buttonclicked(self):
        computer = randint(1,3)
        player = 0
        sender = self.sender()
        if sender.text() == '剪刀':
            player = 1
        elif sender.text() == '石头':
            player = 2
        else:
            player = 3

自定义参数的传递:使用lambda表达式https://blog.csdn.net/broadview2006/article/details/80132757

        button1.clicked.connect(lambda: self.onButtonClick(1)) 
        button2.clicked.connect(lambda: self.onButtonClick(2))
posted @ 2018-10-19 15:58  灰太狼的喜羊羊  阅读(195)  评论(0编辑  收藏  举报