`
sofire
  • 浏览: 146131 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

《Old-style Signal and Slot Support》文档的测试程序

阅读更多

《Old-style Signal and Slot Support》文档的测试程序 

 

#!/usr/bin/env python
#coding:utf8

__version__ = "1.0"

"""
《Old-style Signal and Slot Support》文档的测试程序 
- sofire@gmail.com @2013.02.11
http://pyqt.sourceforge.net/Docs/PyQt4/old_style_signals_slots.html

注意:
1、如果Signal、Slot相关代码写错了,它不会报错,只是不能正确运行。
2、建议学学New Style的写法
"""

from PyQt4.QtCore import *
from PyQt4.QtGui import *
import PyQt4.QtCore as QtCore
import PyQt4.QtGui as QtGui

from PyQt4.QtCore import QVariant

import os, sys, time

from signalDialog import *

def pyFunction():
    print "pyFunction"

def pyFunction2(i):
    print "pyFunction", i

class TestDialog(QDialog):

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

        self.ui = Ui_Dialog()
        self.ui.setupUi(self)

        #定义:bool QObject.connect (QObject, SIGNAL(), callable, Qt.ConnectionType = Qt.AutoConnection)
        #SIGNAL 可以是 Qt Signal,也可以是PyQt Signal
        #  Qt Signal和Slot,是指C++里面静态定义的
        #callable 可以是函数,也可以是类的方法
        QtCore.QObject.connect(self, QtCore.SIGNAL('QtSig_pyFunc()'), pyFunction)
        QtCore.QObject.connect(self, QtCore.SIGNAL('QtSig_pyMethod()'), self.pyMethod)
        QtCore.QObject.connect(self.ui.scrollBar, SIGNAL('valueChanged(int)'), pyFunction2)

        #定义:bool QObject.connect (QObject, SIGNAL(), QObject, SLOT(), Qt.ConnectionType = Qt.AutoConnection)        
        QtCore.QObject.connect(self.ui.scrollBar, SIGNAL('valueChanged(int)'), self.ui.label,  SLOT('setNum(int)'))
        #也可以这样写
        #定义:bool connect (self, QObject, SIGNAL(), SLOT(), Qt.ConnectionType = Qt.AutoConnection)
        #self.ui.label.connect(self.ui.scrollBar, QtCore.SIGNAL('valueChanged(int)'), SLOT('setNum(int)')) 

        #PySig和QtSlot/PySlot的关联
        QtCore.QObject.connect(self, SIGNAL('PySig_qtSlot(int)'), self.ui.label,  SLOT('setNum(int)'))
        QtCore.QObject.connect(self, QtCore.SIGNAL('PySig_pySlot()'), self, QtCore.SLOT('pySlot()'))


        #用PyQt_PyObject -- 它表示参数可以是任意的Python类型
        QtCore.QObject.connect(self, QtCore.SIGNAL('PySig_PyObject(PyQt_PyObject)'), pyFunction2)

        #Short-circuit Signals
        #它没有参数和括号,但是可以传递任何数量和类型的参数给Slot(传递的参数不足会给警告,多余的会丢弃)
        #它隐形定义了各个参数为 PyQt_PyObject
        #注意只能关联到Python的Slots,不能是Qt Slots
        QtCore.QObject.connect(self, QtCore.SIGNAL('PySig2'), pyFunction2)

        #SIGNAL可以和SIGNAL关联
        QtCore.QObject.connect(self, QtCore.SIGNAL('PySig2Sig'), self, QtCore.SIGNAL('PySig2'))

        #一个Sig可以和多个SLots关联
        #一个Slots可以和多个Sig关联
        #可以在线程之间关联

        self.runTest()

    #注意必须用修饰器
    #@QtCore.pyqtSignature()  #已废弃,改用pyqtSlot
    @pyqtSlot() 
    def pySlot(self):
        print "pySlot"

    def runTest(self):
        self.emit(QtCore.SIGNAL('QtSig_pyFunc()'))
        self.emit(QtCore.SIGNAL('QtSig_pyMethod()'))

        self.emit(QtCore.SIGNAL('PySig_qtSlot(int)'), 2)
        self.emit(QtCore.SIGNAL('PySig_pySlot()'))

        self.emit(QtCore.SIGNAL('PySig_PyObject(PyQt_PyObject)'), ('abc', 'def'))
        self.emit(QtCore.SIGNAL('PySig_PyObject(PyQt_PyObject)'), {'a':1, 'b':2})

        self.emit(QtCore.SIGNAL('PySig2'), 1)
        self.emit(QtCore.SIGNAL('PySig2'), (3, 4))
        self.emit(QtCore.SIGNAL('PySig2Sig'), 5)

    def pyMethod(self):
        print "pyMethod"

    

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    form = TestDialog()
    form.show()
    app.exec_()

 

signalDialog.py:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'signalDialog.ui'
#
# Created: Mon Feb 11 17:34:34 2013
#      by: PyQt4 UI code generator 4.9.6
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName(_fromUtf8("Dialog"))
        Dialog.resize(400, 300)
        self.buttonBox = QtGui.QDialogButtonBox(Dialog)
        self.buttonBox.setGeometry(QtCore.QRect(30, 240, 341, 32))
        self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
        self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Cancel|QtGui.QDialogButtonBox.Ok)
        self.buttonBox.setObjectName(_fromUtf8("buttonBox"))
        self.scrollBar = QtGui.QScrollBar(Dialog)
        self.scrollBar.setGeometry(QtCore.QRect(20, 20, 160, 16))
        self.scrollBar.setOrientation(QtCore.Qt.Horizontal)
        self.scrollBar.setObjectName(_fromUtf8("scrollBar"))
        self.label = QtGui.QLabel(Dialog)
        self.label.setGeometry(QtCore.QRect(20, 50, 161, 61))
        font = QtGui.QFont()
        font.setPointSize(22)
        self.label.setFont(font)
        self.label.setObjectName(_fromUtf8("label"))

        self.retranslateUi(Dialog)
        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("accepted()")), Dialog.accept)
        QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL(_fromUtf8("rejected()")), Dialog.reject)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))
        self.label.setText(_translate("Dialog", "0", None))

 

0
1
分享到:
评论

相关推荐

    maven-core-it-support-old-location-1.1.jar

    maven-core-it-support-old-location-1.1.jar

    easy-rsa-old-master.zip

    easy-rsa-old-master.zip . ├── configure.ac ├── COPYING ├── COPYRIGHT.GPL ├── distro │ ├── Makefile.am │ └── rpm │ ├── easy-rsa.spec.in │ └── Makefile.am ├── doc │ ...

    KM-OLD-IOS.mobileconfig

    KM-OLD-IOS.mobileconfig

    1627893376962546_KM-OLD-IOS.mobileconfig

    1627893376962546_KM-OLD-IOS.mobileconfig

    Old-Driver-Protocol, 老司机协议是用于社交网络中老司机开车的协议标准.zip

    为了规范这类行为,提高信息传播的有效性和安全性,“Old-Driver-Protocol”应运而生,这是一种专为社交网络中老司机开车行为定制的协议标准。 “Old-Driver-Protocol”开源项目旨在为社交网络提供一套标准化的操作...

    old-release.zip

    解压后,我们发现了一个名为"old-release.exe"的可执行文件,这通常代表一个Windows操作系统下的应用程序。 "old-release.exe"在文本编辑领域可能是一个早期的文本编辑器程序。老版本的文本编辑器往往以简洁、高效...

    old-ams-nodependents.rar

    使用说明文档:https://blog.csdn.net/wanghaisheng/article/details/107314417 开源服务器众多,功能强大, 但却没有可以直接拿来使用的. 原因是配置安装困难,... 详见文档. 欢迎下载使用, 功能完全没限制, 完全免费.

    IOS应用源码——radex-Yaspeg-old-4966037.rar

    【标题】"IOS应用源码——radex-Yaspeg-old-4966037.rar" 提供的是一款基于iOS平台的应用程序源代码。这个项目可能是开发者在某个特定版本(旧版)下开发的“radex”应用的Yaspeg模块。"radex"可能是一个自定义的...

    Python库 | old-major-0.0.8.tar.gz

    "old-major"可能是一个自定义的库,提供特定的服务或工具,但具体的库功能需查看其文档或源代码才能得知。版本号"0.0.8"表示这是该库的第八次更新,通常版本号的升级伴随着修复错误、添加新功能或性能优化。 ".tar....

    old-project.7z

    描述中的"old-project.7z"进一步强调了这是一个过去的项目,可能包含源代码、文档、资源或其他与项目相关的文件。通常,这样的存档对于回顾历史、复用代码或者作为备份都是很有价值的。 标签 "java" 提示我们这个...

    script56-old-cn.chm

    这个压缩包包含一个名为“script56-old-cn.chm”的文件,它实际上是一个帮助文件(Microsoft HTML Help Workshop格式),通常用于存储电子书籍或者技术文档。在这个文档中,读者可以找到丰富的JavaScript语言知识,...

    微软老照片修复 Bringing-Old-Photos-Back-to-Life

    Bringing-Old-Photos-Back-to-Life(打包)

    Bringing-Old-Photos-Back-to-Life(打包版)

    标题“Bringing-Old-Photos-Back-to-Life(打包版)”揭示了这是一个关于恢复或增强旧照片质量的项目,可能包含一系列工具、教程或软件。这个项目与微软(Microsoft)有关,根据标签“microsoft”,我们可以推断这...

    AS-23-Chen-New-Wine-in-an-Old-Bottle-Attacking-Chrome-WebSQL.pdf

    AS-23-Chen-New-Wine-in-an-Old-Bottle-Attacking-Chrome-WebSQL

    Atom-an-old-hope-syntax-atom,原子主题灵感来自遥远的星系….zip

    "Atom-an-old-hope-syntax-atom.zip" 是一个专门为Atom编辑器设计的主题包,其灵感来源于遥远的星系,暗示着这个主题可能带有科幻或者宇宙元素,旨在为用户创造一种独特的编程体验。"Old Hope"可能是一个致敬《星球...

    pengrui2009-RTL8188EUS_OLD-master.zip

    《pengrui2009-RTL8188EUS_OLD-master.zip:Linux系统下的RTL8188EUS驱动程序详解》 在Linux操作系统中,无线网卡的驱动程序是连接硬件设备与操作系统之间的桥梁,对于网络功能的正常运行至关重要。"pengrui2009-...

    iOS游戏应用源代码——radex-Yaspeg-old-4966037.zip

    《iOS游戏应用源代码解析——radex-Yaspeg-old-4966037》 在iOS开发领域,源代码是理解应用运行机制、学习技术实现和进行二次开发的关键。"radex-Yaspeg-old-4966037.zip"是一个专门针对iOS游戏的源代码包,其内容...

    Bringing-Old-Photos-Back-to-Life-master

    旧照片还原(官方PyTorch实施)| | | | :fire: 使旧照片重现生命,CVPR2020(口服) 通过深潜...要求该代码已在装有Nvidia GPU和CUDA的Ubuntu上进行了测试。 需要Python> = 3.6才能运行代码。安装克隆用于以下内容的S

Global site tag (gtag.js) - Google Analytics