自定义信号和槽的步骤:

1、定义信号---signal1 = pyqtSignal()

2、定义槽信号---def setSlot(self):

3、连接信号和槽函数---signal1.connect(self.setSlot)

4、发射信号---signal1.emit()

案例1:

 from PyQt5.QtCore import QObject,pyqtSignal
from PyQt5.QtWidgets import *
import sys class Winfrom(QWidget):
#定义各种信号
signal1 = pyqtSignal() #无参数的信号
signal2 = pyqtSignal(int) #带一个参数(整型)的信号
signal3 = pyqtSignal(str) #带一个参数(字符串)的信号
signal4 = pyqtSignal(list) #带一个参数(列表)的信号
signal5 = pyqtSignal(dict) #带一个参数(字典)的信号
signal6 = pyqtSignal(int,str) #带两个参数(整数,字符串)的信号
signal7 = pyqtSignal([int,str],[str]) #带两个参数([整数,字符串]或者[字符串])的重载版本的信号 def __init__(self,parent = None):
super().__init__(parent)
self.setWindowTitle('自定义信号和槽函数')
self.resize(400,300)
#将信号和槽连接
self.signal1.connect(self.signal1Call)
self.signal2.connect(self.signal2Call)
self.signal3.connect(self.signal3Call)
self.signal4.connect(self.signal4Call)
self.signal5.connect(self.signal5Call)
self.signal6.connect(self.signal6Call)
self.signal7[int,str].connect(self.signal7Call)
self.signal7[str].connect(self.signal7Calloverload) #发射信号
self.signal1.emit()
self.signal2.emit(1234)
self.signal3.emit('熊')
self.signal4.emit([1,'xiong',bool])
self.signal5.emit({'xiong':'jt',"":1})
self.signal6.emit(111,'信号和槽')
self.signal7[int,str].emit(1314,'sb')
self.signal7[str].emit('wtfk') #定义槽函数
def signal1Call(self):
print('signal1 emit') def signal2Call(self,int1):
print('signal2 emit,value:',int1) def signal3Call(self,str1):
print('signal3 emit,value:',str1) def signal4Call(self,list1):
print('signal4 emit,value:',list1) def signal5Call(self,dict1):
print('signal5 emit,value:',dict1) def signal6Call(self,int1,str1):
print('signal6 emit,value:',int1,str1) def signal7Call(self,int1,str1):
print('signal7 emit,value:',int1,str1) def signal7Calloverload(self,str1):
print('signal7overload emit,value:',str1) if __name__ == '__main__':
app = QApplication(sys.argv)
win = Winfrom()
win.show()
sys.exit(app.exec_())

案例2:

 from PyQt5 import QtCore
from PyQt5.QtWidgets import QApplication ,QWidget ,QHBoxLayout , QPushButton
import sys class CustWidget( QWidget ): def __init__(self, parent=None):
super(CustWidget, self).__init__(parent) self.okButton = QPushButton("OK", self)
#使用setObjectName设置对象名称
self.okButton.setObjectName("okButton")
layout = QHBoxLayout()
layout.addWidget(self.okButton)
self.setLayout(layout)
QtCore.QMetaObject.connectSlotsByName(self) @QtCore.pyqtSlot()
def on_okButton_clicked(self):
print( "点击了OK按钮") if __name__ == "__main__":
app = QApplication(sys.argv)
win = CustWidget()
win.show()
sys.exit(app.exec_())

案例3:

 from PyQt5 import QtCore, QtGui, QtWidgets

 class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(516, 364)
Dialog.setSizeGripEnabled(True)
self.textBrowser = QtWidgets.QTextBrowser(Dialog)
self.textBrowser.setGeometry(QtCore.QRect(25, 20, 471, 192))
self.textBrowser.setObjectName("textBrowser")
self.pushButton1 = QtWidgets.QPushButton(Dialog)
self.pushButton1.setGeometry(QtCore.QRect(90, 250, 91, 31))
font = QtGui.QFont()
font.setFamily("Adobe Myungjo Std M")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.pushButton1.setFont(font)
self.pushButton1.setObjectName("pushButton1")
self.pushButton2 = QtWidgets.QPushButton(Dialog)
self.pushButton2.setGeometry(QtCore.QRect(330, 250, 91, 31))
font = QtGui.QFont()
font.setFamily("Adobe Myungjo Std M")
font.setPointSize(12)
font.setBold(True)
font.setWeight(75)
self.pushButton2.setFont(font)
self.pushButton2.setObjectName("pushButton2") self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog) def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
self.pushButton1.setText(_translate("Dialog", "button1"))
self.pushButton2.setText(_translate("Dialog", "button2"))
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *
from PyQt5 import QtWidgets
from Ui_SignalSlot import Ui_Dialog class SignalSlot0(QDialog, Ui_Dialog):
btn1_signal = pyqtSignal(int, str)
btn2_signal = pyqtSignal(int, str) def __init__(self, parent=None):
super(SignalSlot0, self).__init__(parent)
self.setupUi(self) #self.btn1_signal.connect(self.btn1Call)
#self.btn2_signal.connect(self.btn2Call) @pyqtSlot()
def on_pushButton1_clicked(self):
"""
Slot documentation goes here.
"""
self.btn1_signal.connect(self.btnCall)
self.btn1_signal.emit(1, '按钮1') @pyqtSlot()
def on_pushButton2_clicked(self):
"""
Slot documentation goes here.
"""
self.btn2_signal.connect(self.btnCall)
self.btn2_signal.emit(2, '按钮2') def btnCall(self, int1, str1):
QMessageBox.information(self, 'information notice', 'Button{0} is clicked:{1}'.format(int1, str1), QMessageBox.Yes|QMessageBox.No, QMessageBox.Yes) def btn2Call(self):
QMessageBox.information(self, 'information notice', 'Button2 clicked') if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
ui = SignalSlot0()
ui.show()
sys.exit(app.exec_())

使用QT设计师-信号和槽signal-slot(第一弹)的更多相关文章

  1. QML于C++交互之信号与槽(signal&slot )

    connect c++ SIGNAL with QML SLOT 简介 QML 与 C++ 混合编程时,总结了一下qml和c++互相直接调用.及信号与槽连接 的几种情况,详细使用情况看示例代码 所有的 ...

  2. QT 建立信号和槽的联系(事件处理)

    Qt中事件处理机制叫做“信号”和“槽”signal &slot. 其模型为: 对象a中有一个信号signal:XXX(代表一个事件) 对象b中有一个槽slot:YYY(事件处理函数) 用con ...

  3. QT点击"X"按钮,调用closeEvent()函数来实现调用特定事件(附:粗略介绍QT的信号与槽的使用方法)

    背景: QT在用户关闭窗口(直接点击"X"键)时,程序一般都需要做一些善后的事情,就我现在的程序来说,既关闭USB.如何实现? 正文: 首先,在对应窗体的".h" ...

  4. qt中信号与槽机制

    一. 简介 就我个人来理解,信号槽机制与Windows下消息机制类似,消息机制是基于回调函数,Qt中用信号与槽来代替函数指针,使程序更安全简洁. 信号和槽机制是 Qt 的核心机制,可以让编程人员将互不 ...

  5. QT 的信号与槽

    转载: QT 的信号与槽机制介绍 QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 ...

  6. QT的信号与槽机制介绍

      信号与槽作为QT的核心机制在QT编程中有着广泛的应用,本文介绍了信号与槽的一些基本概念.元对象工具以及在实际使用过程中应注意的一些问题. QT是一个跨平台的C++ GUI应用构架,它提供了丰富的窗 ...

  7. Qt 的信号与槽机制介绍(10个要注意的问题)

    QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...

  8. C++框架_之Qt的信号和槽的详解

    C++_之Qt的信号和槽的详解 1.概述 信号槽是 Qt 框架引以为豪的机制之一.所谓信号槽,实际就是观察者模式.当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal ...

  9. 【qt】QT 的信号与槽机制

    QT 是一个跨平台的 C++ GUI 应用构架,它提供了丰富的窗口部件集,具有面向对象.易于扩展.真正的组件编程等特点,更为引人注目的是目前 Linux 上最为流行的 KDE 桌面环境就是建立在 QT ...

随机推荐

  1. Linux怎样创建FTP服务器--修改用户默认目录

    在创建FTP服务器之有先命令: ps -ef |grep vsftpd 查一下系统有没有安装vsftpd这个服务器,如果出现如下图所示的界面说明没有安装.     然后再执行:yum install ...

  2. vue里面引入jq的方法

    1:因为已经安装了vue脚手架,所以需要在webpack中全局引入jquery 打开package.json文件,在里面加入这行代码,jquery后面的是版本,根据你自己需求更改. dependenc ...

  3. iOS 在已有项目添加CoreData

    本文转载至 http://cnbin.github.io/blog/2016/03/11/ios-zai-yi-you-xiang-mu-tian-jia-coredata/ 如果是新项目很好说,新建 ...

  4. Mac下Intellij IDea发布JavaWeb项目 详解二 (新建Module)

    Step3 添加两个module 3.1 右键[WebWorkSpace]-[New]-[Module] 3.2 重复 准备工作1:新建第一个JavaWeb项目[1.6-1.11]的操作,建好一个名为 ...

  5. Android学习之Handler消息

    Android系统规定,一些耗时的操作不能放在UI线程中去执行,这样会报一个ANR错误.所以为了避免该问题,我们需要开启一个新的线程去执行一些耗时操作:开启新的线程,将耗时的操作在新线程里面去执行, ...

  6. Shell 中的反引号(`),单引号('),双引号(")

    在写shell的时候老是傻傻分不清楚,今天来理一理. 1.反引号位 (`) 位于键盘的Tab键的上方.1键的左方.注意与单引号(')位于Enter键的左方的区别. 在Linux中起着命令替换的作用.命 ...

  7. 关于Nagios通过NRPE监控客户端的安装与配置

    环境介绍>>>>>>>>>>>>>>>>>>>>>>>> ...

  8. 【CF908G】New Year and Original Order 数位DP

    [CF908G]New Year and Original Order 题意:令S(i)表示将i中所有数位上的数拿出来,从小到大排序后组成一个新的数的值.如S(50394)=3459.求$\sum\l ...

  9. s3接口认证说明

    S3 Authorization太绕,太头痛,下面解释说明: XS3 REST API基于HMAC(哈希消息身份验证码)密钥使用自定义HTTP方案进行身份验证.要对请求进行身份验证,您首先需要合并请求 ...

  10. sublime添加到鼠标右键打开文件的方法?

    步骤: 1.win+R 打开运行,并输入regedit. 2.在左侧依次打开HKEY_CLASSES_ROOT\*\shell 3.在shell下新建“Sublime Text”项,在右侧窗口的“默认 ...