自定义信号和槽的步骤:

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. RF实现多次失败重跑结果合并的基础方法和优化方法

    实现思路:通过分次执行失败案例重跑,然后通过结果文件合并命令实现多次失败重跑结果文件的合并,并输出合并后的log和report文件: 说明:具体失败案例重跑命令和结果文件合并命令请参考本博客其他相关章 ...

  2. head first python 支持网站(可下载所有的代码和示例)

    http://examples.oreilly.com/0636920003434/

  3. Django 访问数据库

    通过命令行方式访问数据库: [root@localhost web]$ python manage.py shell # 进入交互模式(先安装ipython) In [1]: from blog.mo ...

  4. php-fpm 记录慢执行日志

    有时候我们访问一个 php 的网站很慢,要想知道慢的原因,需要配置 php-fpm.conf,记录执行慢的日志: [root@localhost ~]$ cat /usr/local/php/etc/ ...

  5. CMake INSTALL 命令设置exe dll lib的安装位置

    install(TARGETS ${OUT_NAME} RUNTIME DESTINATION ${CMAKE_BINARY_DIR}/bin LIBRARY DESTINATION ${CMAKE_ ...

  6. 【delphi】delphi出现‘尚未调用CoInitialize’异常

    1. 由于使用ado等引起的异常. 2. 若是子线程或某方法操作ado可在该方法开头和结尾分别加上: function myfun begin CoInitialize(nil); // your c ...

  7. java web当中表单提交到后台出现乱码的解决方法

    1.如果提交方式为post,想不乱码,只需要在服务器端设置request对象的编码即可,客户端以哪种编码提交的,服务器端的request对象就以对应的编码接收,比如客户端是以UTF-8编码提交的,那么 ...

  8. Promise 必知必会的面试题

    Promise 想必大家都十分熟悉,想想就那么几个 api,可是你真的了解 Promise 吗?本文根据 Promise 的一些知识点总结了十道题,看看你能做对几道. 以下 promise 均指代 P ...

  9. Mac下一款门罗币挖矿木马的简要分析

    背景 最近在应急中发现了一款Mac上的挖矿木马,目标是挖门罗币,经过走访,受害用户都有从苹果电脑上安装第三方dmg的经历(其中可以确定一款LOL Mac私服安装app会导致该木马),怀疑在网上很多第三 ...

  10. SIM900A基站定位调试笔记 -转

    第1步:ATE1 握手并设置回显 第2步:AT+CGMR 查看SIM900的版本信号 第3步:AT+CSQ 查看信号质量 第4步:AT+CREG? 查看GSM是否注册成功 第5步:AT+CGREG?  ...