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()'))

最后,上图。

python3.4下PyQt5信号槽使用_第1张图片


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

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


你可能感兴趣的:(python3.4下PyQt5信号槽使用)