自定义信号和槽的步骤:

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. SharePoint如何模拟用户

    try { SPSecurity.RunWithElevatedPrivileges(delegate() //用此方法模拟管理员账户运行此事件处理程序 { SPWeb web = SPContext ...

  2. commons-beanutils的使用

    commons-beanutils是通过内省来完成的. 需要两个包: commons-beanutils-1.8.3.jar commons-logging-1.1.1.jar JavaBean类: ...

  3. C#实现HTTP请求文件下载,GET、POST请求的数据流接收

    做项目的时候由于插件Phaser请求audio的时候,不允许跨域,具体提示====> 已拦截跨源请求:同源策略禁止读取位于 http://ttyouni.com/1.mp3 的远程资源.(原因: ...

  4. 小北微信小程序之小白教程系列之 -- 样式(WXSS)

    为了适应广大的前端开发者,WXSS 具有 CSS 大部分 特性.同时为了更适合开发微信小程序,WXSS 对 CSS 进行了扩充以及修改.与 CSS 相比,WXSS 扩展的特性有:尺寸单位和样式导入. ...

  5. 【前端积累】javascript事件

    什么是事件? 事件是一种异步编程的实现方式,本质上是程序各个组成部分之间的通信.就是文档或浏览器窗口发生的一些特定的交互瞬间(某种动作). 1.事件流 事件流描述的是从页面中接收事件的顺序. 1)事件 ...

  6. jQuery的回调管理机制

    // 对option的一个缓存,避免每次都需要createOptions,option是创建Callback对象时的传入的参数// 每个option被存入optionsCache中类似于{memory ...

  7. swagger环境搭建

    下面所用工具下载   http://editor.swagger.io/#/  demo   一.安装 swagger editor   说明:安装swagger前需要安装node工具   工具安装 ...

  8. ESlint全局变量报错

    场景: 在main.js下申明了全局变量: /* eslint no-undef: "error" */ window.vm = new Vue({ el: '#app', rou ...

  9. sencha touch list + carousel scrollable(与其他控件共用滚动条)

    有些时候我们需要实现这种效果 上边是一张图片或者一个跑马灯控件,这个布局实现起来比较容易 但是如何让他们共用一个滚动条,来实现以下效果就比较麻烦了. 在官方论坛查找资料得知,可以用以下写法实现: /* ...

  10. 5-5 ES6的模块化的基本规则或特点

    一.AMD, CMD, CommonJs和ES6对比 1.AMD ==> 是RequireJS在推广过程中对模块定义的规范化产出 // RequireJS定义标准, 导步加载依赖, 依赖前置 d ...