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
就会达到预期的效果。
我想在我的 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
就会达到预期的效果。