自己是学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()'))
最后,上图。
嗯,弄好之后,感觉世界又美好了一些。 :)
技术改变世界,阅读改变人生。