python pyqt交互使用

python pyqt interactive usuage

我想在我的 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" 和 "goodbye" 都会被打印出来。我只想打印 "goodbye"。

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

编辑:

重新定义函数后,我重新连接插槽。因此,点击操作导致执行旧功能(打印"hi")和新功能(打印"goodbye")

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

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

或者,将您的函数包装在另一个函数中:

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

ui.pushButton.clicked.connect(wrap)

然后重新定义helloworld就会达到预期的效果。