python3.4下PyQt5信号槽使用

自己是学C++的,自从接触Pyhon并使用,发现写代码非常顺畅方便,甚爱之。在用Python写一个小的工具软件时,苦于没有用户操作的界面接口。得知PyQt界面库就专为Python而生,于是乎便用上了。

使用时创建了2个按钮,但是在连接按钮的点击事件到自定义的槽函数时,迟迟未能连上。经过奋战与各种搜索,终于解决了问题。

1、自定义槽函数。

(1)如果加了

@QtCore.pyqtSlot(int)
这个装饰,可以通过如下代码进行信号槽连接。

self.connect(self.btnStart, QtCore.SIGNAL('clicked()'), self.startwatch)
槽函数代码如下:

@QtCore.pyqtSlot(int)
def startwatch(self):
    msgBox=QtGui.QMessageBox.about(self, "test", "clicked")
    print('ok clicked')
    pass

(2)如果未加装饰,而是像一个普通函数一样的方法,可通过如下方式进行连接。

self.btnStart.clicked.connect(lambda: self.startwatch())

槽函数定义如下:

def startwatch(self):
    msgBox=QtGui.QMessageBox.about(self, "test", "clicked")
    print('ok clicked')
    pass

如果不加lambda:这个修饰,编译会报错的。报错如下

TypeError: connect() slot argument should be a callable or a signal, not 'NoneType'

基本含义就是定义的函数是一个无返回值的函数,connect时将函数进行了返回类型判断是一个无效类型,从而导致编译报错。

亦可参考国外大拿的说明 http://stackoverflow.com/questions/10730131/create-dynamic-button-in-pyqt

2、系统常用槽函数

比如一个退出按钮点击后退出槽函数,可通过如下代码进行连接。

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

最后,上图。



嗯,弄好之后,感觉世界又美好了一些。   :)

技术改变世界,阅读改变人生。


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值