精华内容
下载资源
问答
  • # -*- coding: utf-8 -*- ...from PyQt5.QtCore import QObject , pyqtSignal #信号对象 class QTypeSignal(QObject): #定义一个信号 sendmsg = pyqtSignal( str,str) def __init__( self): super( QTypeS...

      

    # -*- coding: utf-8 -*-
    
    
    from PyQt5.QtCore import QObject , pyqtSignal
    
    #信号对象
    class QTypeSignal(QObject):
        #定义一个信号
    	sendmsg = pyqtSignal( str,str)
          
    	def __init__( self):
    		super( QTypeSignal, self).__init__()
                
    	def run( self):
            # 发射信号
    		self.sendmsg.emit('第一个参数','第二个参数')
              
    # 槽对象          
    class QTypeSlot(QObject):
    	def __init__( self):
    		super( QTypeSlot, self).__init__()
        
        # 槽对象里的槽函数      
    	def get(self, msg1, msg2):
    		print("QSlot get msg => " + msg1 + ' ' + msg2)
    
    
    if __name__ == '__main__':
    	send = QTypeSignal()
    	slot = QTypeSlot()
       #1 
    	print('--- 把信号绑定到槽函数 ---')    
    	send.sendmsg.connect( slot.get)
    	send.run()
        
        #2
    	print('--- 把信号断开槽函数 ---')        
    	send.sendmsg.disconnect( slot.get )
    	send.run()   
    
    

     

    展开全文
  • PyQt 信号与槽机制

    2019-11-27 15:42:02
    1: 基本概念 信号: 是由对象发射出去的消息 ...需要信号 绑定,一个信号和多个绑定,一定也可以绑定多个信号。Qt 界面中: 2: 最简单案例: ui 文件: test.ui # -*- coding: utf-8 -*- #...

    1: 基本概念

    信号: 是由对象发射出去的消息  

     按钮的单击事件,按钮向外部发送单击的消息,发送的信号需要一些代码来拦截,这些代码就是槽。

    槽:本质是一些函数或者方法

    需要信号和槽 绑定,一个信号和多个槽绑定,一定槽也可以绑定多个信号。Qt 界面中:

    2: 最简单案例:

       

          ui 文件: test.ui

    # -*- coding: utf-8 -*-
    
    # Form implementation generated from reading ui file 'test.ui'
    #
    # Created by: PyQt5 UI code generator 5.6
    #
    # WARNING! All changes made in this file will be lost!
    import sys
    from PyQt5 import QtCore, QtGui, QtWidgets
    from PyQt5.QtWidgets import QWidget, QCheckBox, QApplication, QDialog,QMainWindow
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(583, 381)
            self.centralwidget = QtWidgets.QWidget(MainWindow)
            self.centralwidget.setObjectName("centralwidget")
            self.pushButton = QtWidgets.QPushButton(self.centralwidget)
            self.pushButton.setGeometry(QtCore.QRect(130, 70, 75, 23))
            self.pushButton.setObjectName("pushButton")
            MainWindow.setCentralWidget(self.centralwidget)
            self.menubar = QtWidgets.QMenuBar(MainWindow)
            self.menubar.setGeometry(QtCore.QRect(0, 0, 583, 23))
            self.menubar.setObjectName("menubar")
            MainWindow.setMenuBar(self.menubar)
            self.statusbar = QtWidgets.QStatusBar(MainWindow)
            self.statusbar.setObjectName("statusbar")
            MainWindow.setStatusBar(self.statusbar)
            
            self.retranslateUi(MainWindow)
            self.pushButton.clicked.connect(MainWindow.close)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
            self.pushButton.setText(_translate("MainWindow", "关闭窗口"))
        
    

    main.py

    # -*- coding: utf-8 -*-
    
    """
    Module implementing LayoutDemo.
    """
    import sys
    from PyQt5.QtCore import pyqtSlot
    from PyQt5.QtWidgets import QMainWindow, QApplication
    from  test import Ui_MainWindow
    
    class LayoutDemo(QMainWindow, Ui_MainWindow):
        """
        Class documentation goes here.
        """
        def __init__(self, parent=None):
            """
            Constructor
            @param parent reference to the parent widget
            @type QWidget
            """
            super(LayoutDemo, self).__init__(parent)
            self.setupUi(self)
        
    
    
    if __name__ == "__main__":
    
        app = QApplication(sys.argv)
        ui = LayoutDemo()
        ui.show()
        sys.exit(app.exec_())
    

     3:案例2升级:

    # -*- coding: utf-8 -*-
    
    """
        【简介】
        内置的信号/槽示例
    
    
    """
    
    from PyQt5.QtWidgets import *
    import sys
    
    class Winform(QWidget):
    	def __init__(self,parent=None):
    		super().__init__(parent)
    		self.setWindowTitle('内置的信号/槽示例')
    		self.resize(330,  50 ) 
    		btn = QPushButton('关闭', self)
    		btn.clicked.connect(self.close) 
            
    if __name__ == '__main__':
    	app = QApplication(sys.argv)
    	win = Winform()
    	win.show()
    	sys.exit(app.exec_())
    

     

    展开全文
  • PyQT信号与槽

    2020-11-02 13:48:05
    信号与槽机制PyQT中的一大特色,信号用于发射信号,而与之绑定的槽函数在接受到信号之后便开始执行。 先来看一个最简单的例子 import sys from PyQt5.QtWidgets import QMessageBox,QPushButton,QApplication,...

    信号与槽机制是PyQT中的一大特色,信号用于发射信号,而与之绑定的槽函数在接受到信号之后便开始执行。
    先来看一个最简单的例子

    import sys
    from PyQt5.QtWidgets import QMessageBox,QPushButton,QApplication,QWidget
    
    app=QApplication(sys.argv)
    widget=QWidget()
    
    def showMsg():
        QMessageBox.information(widget,'信息提示框','Ok 弹出测试信息')
    
    btn=QPushButton('测试点击按钮',widget)
    
    btn.clicked.connect(showMsg)
    
    widget.show()
    sys.exit(app.exec_())
    

    在上面的代码中,clicked是信号,showMsg是槽,当鼠标单击btn时,clicked信号发生,与之绑定的showMsg执行。

    自定义信号与槽

    如下代码:

    from PyQt5.QtCore import QObject,pyqtSignal
    
    #信号对象
    class QTypeSignal(QObject):
        #定义一个信号
        # sendmsg = pyqtSignal(object)
        #todo 优化 多个参数传递
        sendmsg=pyqtSignal(str,str)
    
    
        def __init__(self):
            super(QTypeSignal, self).__init__()
    
        def run( self ):
            #发射信号
            #self.sendmsg.emit('hell')
    
            #todo 优化 发射多个参数
            self.sendmsg.emit('第一参数','第二个参数')
    
    
    #槽对象
    class QTypeSlot(QObject):
        def __init__(self):
            super(QTypeSlot, self).__init__()
        #槽对象中的槽函数
        # def get( self,msg ):
        #     print("QSlot get msg => " + msg)
    
        #todo 优化 多个参数
        def get( self,msg1,msg2 ):
            print("QSlot get msg => " + msg1+' '+msg2)
    
    
    if __name__ == '__main__':
        #实例化信号对象
        send=QTypeSignal()
        #实例化槽对象
        slot=QTypeSlot()
    
        #1
        print('_____-把信号绑定到槽函数上_)___')
        send.sendmsg.connect(slot.get)
    
        send.run()
    
        print('_____-把信号与槽函数解绑_)___')
        send.sendmsg.disconnect(slot.get)
    
        send.run()
    

    在上边的代码中,信号对象定义了sendmsg信号,并且在run函数中发射该信号,通过send.sendmsg.connect(slot.get),将sendmsg信号与slot.get槽函数绑定,send.sun()之后,便会发现有打印信息输出,之后解绑,发现run之后并没有输出。

    参数传递

    下面的代码则显示了如何通过信号传递不同的参数

    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()
    

    即,在定义信号时,同时要说明该信号携带的参数,比如signal3=pyqtSignal(int,str),signal3携带一个int信号和一个str信号,
    self.signal3.emit(1,‘第三个’),这句话说明signal3信号发射,并且携带有1这个int信号和’第三个’这个str信号,通过self.signal3.connect(self.signalCall3)语句,signal3信号和signalCall3槽绑定,并且signalCall3通过如下语句接收信号传递的参数
    def signalCall3( self,val,text ):

    自定义参数的传递

    当信号发出的参数个数与槽函数接受的参数个数不一,应该如何解决这个问题呢,这里提供两种解决方法:
    第一种: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_())
    
    

    如上图代码
    button1.clicked.connect(lambda :self.onButtonClick(1))
    button2.clicked.connect(lambda :self.onButtonClick(2))
    用lambda函数实现了整数1,2的传递。
    button1.clicked.connect(partial(self.onButtonClick, 1))
    button2.clicked.connect(partial(self.onButtonClick, 2))
    用partial实现了整数1,2的传递。

    装饰器信号与槽

    链接

    展开全文
  • Checkbox 信号槽 setvisible 和 setEnable 的使用: te.ui te.py: # -*- coding: utf-8 -*- # Form implementation generated from reading ui file 'te.ui' # # Created by: PyQt5 UI code generator 5.6 # ...

    Checkbox  信号槽 setvisible  和 setEnable 的使用:

    te.ui

    te.py:

    # -*- coding: utf-8 -*-
    
    # Form implementation generated from reading ui file 'te.ui'
    #
    # Created by: PyQt5 UI code generator 5.6
    #
    # WARNING! All changes made in this file will be lost!
    
    from PyQt5 import QtCore, QtGui, QtWidgets
    
    class Ui_MainWindow(object):
        def setupUi(self, MainWindow):
            MainWindow.setObjectName("MainWindow")
            MainWindow.resize(800, 241)
            self.centralwidget = QtWidgets.QWidget(MainWindow)
            self.centralwidget.setObjectName("centralwidget")
            self.checkBox = QtWidgets.QCheckBox(self.centralwidget)
            self.checkBox.setGeometry(QtCore.QRect(120, 70, 71, 16))
            self.checkBox.setObjectName("checkBox")
            self.label = QtWidgets.QLabel(self.centralwidget)
            self.label.setGeometry(QtCore.QRect(110, 140, 54, 41))
            self.label.setObjectName("label")
            MainWindow.setCentralWidget(self.centralwidget)
            self.menubar = QtWidgets.QMenuBar(MainWindow)
            self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
            self.menubar.setObjectName("menubar")
            MainWindow.setMenuBar(self.menubar)
            self.statusbar = QtWidgets.QStatusBar(MainWindow)
            self.statusbar.setObjectName("statusbar")
            MainWindow.setStatusBar(self.statusbar)
    
            self.retranslateUi(MainWindow)
            self.checkBox.clicked['bool'].connect(self.label.setVisible)
            QtCore.QMetaObject.connectSlotsByName(MainWindow)
    
        def retranslateUi(self, MainWindow):
            _translate = QtCore.QCoreApplication.translate
            MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
            self.checkBox.setText(_translate("MainWindow", "CheckBox"))
            self.label.setText(_translate("MainWindow", "TextLabel"))
    
    

    main.py

    import sys
    from PyQt5.QtCore import pyqtSlot
    from PyQt5.QtWidgets import QMainWindow, QApplication
    from  te import Ui_MainWindow
    from PyQt5.QtCore import pyqtSignal , Qt 
    class MyMainWindow(QMainWindow, Ui_MainWindow): 
        def __init__(self, parent=None):  
          super(MyMainWindow,self).__init__(parent)
          self.setupUi(self)
          self.checkBox.setChecked(True) # 设置checkBox默认的初始状态为选择
          
    if __name__=="__main__":  
    	app = QApplication(sys.argv)  
    	win = MyMainWindow()  
    	win.show()  
    	sys.exit(app.exec_())  
        

    运行结果:

     

    基本知识点: 下拉选框选择  

           

    		pList.append(self.styleCombo.currentText()) 

    pList.append(self.numberSpinBox.value() )   

            self.checkBox.setChecked(True) # 设置checkBox默认的初始状态为选择

     

    展开全文
  • PyQt5快速入门(二)PyQt5信号槽机制 一、信号槽机制简介 1、信号槽简介 信号槽是Qt的核心机制,也是...在PyQt5中,信号与槽函数通过object.signal.connect()方法进行连接。信号槽特点如下:(1)一个信号可以连接...
  • 主要介绍了python GUI库图形界面开发之PyQt5信号与槽机制基础介绍,需要的朋友可以参考下
  • PyQt信号与槽之事件处理机制(八)

    千次阅读 2018-08-17 19:21:10
    信号与槽可以说是对事件处理机制的高级封装,如果说事件是用来创建窗口控件的,那么信号与槽就是用来对这个控件进行使用的,比如一个按钮,当我们使用按钮时,只关心clicked信号,至于这个按钮如何接受并处里鼠标...
  • pyqt 信号与槽的理解

    千次阅读 2016-03-03 09:53:44
    pyqt中两个object之间的通信通过“信号————”这个机制来进行的。 简单来说就是:连个object要通信,一个object创建一个信号,然后像广播那样发出去(不管是否,有人接收,是谁接收)。而另一个需要接收的...
  • PyQt4 的信号与槽机制改写为兼容 PyQT5 的形式 记录博文 一、前言 PyQt4 到 PyQt5 还是改了很多东西的,特别是信号与槽的机制。 比如: # PyQt4 self.connect(buttonBox, SIGNAL("accepted()"), self, SLOT("accept...
  • #!/usr/bin/env python #coding:utf-8 import sys from PyQt4 import QtGui from PyQt4 import QtCore class Signal(QtGui.QWidget): def __init__(se...
  • 每个继承自QWideget的控件都支持信号与槽机制。信号发射时(发送请求),连接的槽函数就会自动执行(针对请求进行处理)。本文主要讲述信号和槽最基本、最经常使用方法。就是内置信号和槽的使用的使用方法。 内置...
  • PyQt5:信号与槽机制

    2020-03-04 11:58:39
    发现一篇很好的博客,插个眼保存一下: PyQt5的信号与槽机制
  • 在QT中,每个继承自QObject的对象都可以使用信号槽机制来进行通信。 信号和槽函数通过object.signal.connect()方法来连接。当一个QObject对象发射信号之相连接的槽函数将会自动执行。 假设我们将每个继承自...
  • 控件发射的信号指定槽函数的三种方法: 在窗口的UI设计中操作添加信号和槽 通过代码连接信号和槽 通过Eric的“生成对话框代码”的功能产生信号和槽 ...信号与槽的三种使用方法: 内置信号与槽的使用 自定义...

空空如也

空空如也

1 2 3 4 5 ... 9
收藏数 167
精华内容 66
关键字:

pyqt信号与槽机制