python pyqt交互式使用

时间:2015-07-23 21:40:46

标签: python pyqt4

我想在我的pyqt gui运行时使用编辑定义插槽的函数,以便我可以调试程序而无需重新启动它。在导入pyuic

生成的py文件后,我所拥有的一个例子
##-------------------------##

app=QApplication([])
window = QMainWindow()
window.show()
ui = Ui_MainWindow()
ui.setupUi(window)
##-------------------------##
def helloworld():
     print "hi"

ui.pushButton.clicked.connect(helloworld)

现在,在启动此程序后,我可以在控制台中执行命令。我想要做的是在运行程序后,使用控制台重新定义helloworld函数

def helloworld():
    print "goodbye"

但是,如果我这样做,那么" hi"并且"再见"都印了。我只想和#34;再见"打印。

我将使用此功能来调试我的功能,而gui是实时的。我正在使用spyder IDE与python 2.7.6和pyqt4

编辑:

重新定义功能后,我重新连接插槽。因此,点击的动作导致执行旧功能(打印" hi")和新功能(打印"再见")

1 个答案:

答案 0 :(得分:1)

重新定义功能不会断开原始信号,也不会破坏原始功能。它只是创建一个具有相同名称的新函数,阻止任何尚未引用它的任何东西访问原始函数。由于Qt已经有一个引用,两个函数都被调用(我假设你将新函数连接到按钮?)

解决此问题的一种方法是在重新定义函数之前显式调用ui.pushButton.clicked.disconnect(helloworld)

或者,将您的功能包装在另一个中:

def wrap(*args, **kwargs):
    return helloworld(*args, **kwargs)

ui.pushButton.clicked.connect(wrap)

然后重新定义helloworld将产生预期的效果。