您的位置:首页 > 编程语言 > Python开发

python3.4下PyQt5信号槽使用

2015-12-21 21:39 736 查看
自己是学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()'))


最后,上图。



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

技术改变世界,阅读改变人生。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息