PyQt的信号与槽机制(1)

本文详细介绍了PyQt中的信号与槽机制,通过实例展示了如何利用这些机制实现在窗体中响应用户操作并进行相应的处理。具体包括了如何创建按钮、布局管理以及如何通过connect函数连接信号与槽,使得在点击特定按钮时能够执行特定的操作,如退出应用程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#!/usr/bin/env python
#coding:utf-8

import sys 
from PyQt4 import QtGui
from PyQt4 import QtCore

class Signal(QtGui.QWidget):
    def __init__(self,parent = None):
        QtGui.QWidget.__init__(self,parent)

        self.setGeometry(300,300,250,150)
        self.setWindowTitle('Button')
        okButton = QtGui.QPushButton('OK')
        closeButton = QtGui.QPushButton('CLOSE')
    
        layout = QtGui.QHBoxLayout()
        layout.addStretch(1)
        layout.addWidget(okButton)
        layout.addWidget(closeButton)
    
        self.setLayout(layout)
        self.connect(closeButton,QtCore.SIGNAL('clicked()'),QtGui.qApp,QtCore.SLOT('quit()'))

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

整个程序实现的功能是点击CLOSE按钮,就会退出窗体,这个过程中应用到了PyQt的信号与槽机制,代码实现如下,代码:


self.connect(closeButton,QtCore.SIGNAL('clicked()'),QtGui.qApp,QtCore.SLOT('quit()')


connect函数中,第一个参数是发送信号的对象,这里为closeButton; 第二个参数表示传递的信号。在程序运行后的窗体中会有一个CLOSE按钮,那么我们点击CLOSE按钮,就会触发时间,传递一个信号给接收对象; 第三个参数表示信号接收对象; 第四个参数是槽函数,也就是处理信号的方法,这个方法可以是任何Python调用,在本程序中,信号的处理方法是退出窗体。为什么会退出主界面了?因为我们这里用的是主界面的connect()方法。除了这个方法之外,还有另外一个连接事件的方法-----控件本身的connect方法。下面再看一个脚本


#!/usr/bin/python

# quitbutton.py

import sys 
from PyQt4 import QtGui, QtCore

class Event(QtGui.QWidget):
    def __init__(self,parent = None):
        QtGui.QMainWindow.__init__(self,parent)
        self.initGUI()
        self.resize(100,300)    
    def initGUI(self):
        closeButton = QtGui.QPushButton('CLOSE',self)
        #closeButton.clicked.connect(self.close)
        closeButton.clicked.connect(closeButton.close)

def main():
    app = QtGui.QApplication(sys.argv)
    widget = Event()
    
    widget.show()
    sys.exit(app.exec_())

if __name__ == '__main__':
    main()

注意这两行代码


 #closeButton.clicked.connect(self.close)
 closeButton.clicked.connect(closeButton.close)

第一行代码达到的效果是:点击CLOSE按钮,将退出窗口;而第二行代码,因为调用close()函数的对象变成了closeButton,因此,运行程序之后,点击CLOSE按钮,并不会退出窗口,而是将closeButton这个button部件给“删除”了,窗口依然存在,但是你会发现CLOSE按钮“消失”了!当然,如果只是让CLOSE按钮消失,我们也可以这样写:

self.connect(closeButton,QtCore.SIGNAL(’clicked()‘),closeButton,QtCore.SLOT('close')),注意第一个参数和第三个参数,是同一个对象,因为我们操作的就是同一个对象!这样同样会达到让CLOSE按钮“消失”的效果。不过两种方法比较,“控件本身的”conncet方法看起来更加符合Python的标准。

因此,我们说连接事件的方法有两种,一种是通过主界面的connect,第二种是通过某个空间本身的connect方法,比如这里的按钮控件。(不知道这么说对不对,看到的同学如果认为有问题的,还请指正!)


文章我会不断的完善,程序运行在linux下通过,程序没有做注解,运行结果图也没有贴上来,有兴趣的朋友可以自己尝试一下。






转载于:https://my.oschina.net/yanxiaoshuai/blog/528346

PyQt信号槽机制是一种用于在对象之间传递数据的方法。当一个特定事件发生时,信号会被发射出来,函数则用来响应相应的信号。在PyQt5中,对象已经包含了许多预定义的信号函数,但也可以根据使用的场景添加新的信号函数。这个机制的主要特点包括:一个信号可以使用多个函数,一个函数可以监听多个信号信号信号之间可以互联,信号之间的连接可以跨线程,连接方式可以是同步或异步,信号的参数可以是任何Python类型。在PyQt5中,信号是通过对象的signal.connect()方法进行连接的。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [PyQt5(五)信号槽机制](https://blog.youkuaiyun.com/kobepaul123/article/details/122934359)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [PyQt学习笔记-信号](https://blog.youkuaiyun.com/qq_44653420/article/details/122413334)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值