gpt4 book ai didi

python - 如何在不重新启动的情况下调试 PyQt 应用程序?

转载 作者:太空狗 更新时间:2023-10-30 00:11:49 24 4
gpt4 key购买 nike

我使用 Qt + PyQt 进行开发。我的应用程序非常非常大(20 MB 的源代码)。它包括许多不同的菜单和小部件。我经常在某些小部件的方法上只更改 1 个字符串。但是为了检查更改,我关闭了我的应用程序,重新启动它,转到 menu1 -> menu2 …。只有在这一步之后我才能检查更改。

如何只为一个类/小部件重新加载方法?没有关闭/打开整个应用程序?

最佳答案

我对此的一般回答是否定的,这不可能以直截了当的方式进行。主要问题是当你启动你的应用程序时,它会将所有内容加载到内存中,并且你的类绑定(bind)了它们的方法等等......所以为了更新说,你改变了一个类的方法的值,你必须销毁该类(或小部件)并在更新后的源下重新创建它(这也会杀死 child )。

它看起来很糟糕,但它看起来像这样:

## main.py ##

class MainWindow(QtGui.QMainWindow):

def __init__(self, *args, **kwargs):
super(MainWindow, self).__init__(*args, **kwargs)
self.resize(640,480)
self.central = widget.Widget()
self.setCentralWidget(self.central)

self.toolbar = QtGui.QToolBar()
self.toolbar.addAction("Reload Entire Widget", self._reloadWidget)
self.addToolBar(QtCore.Qt.TopToolBarArea, self.toolbar)

def _reloadWidget(self):
print "Reloading", widget
reload(widget)
self.central.deleteLater()
self.central = widget.Widget()
self.setCentralWidget(self.central)

## widget.py ##

class Widget(QtGui.QWidget):

def __init__(self, *args, **kwargs):
super(Widget, self).__init__(*args, **kwargs)
self.layout = QtGui.QVBoxLayout(self)
self.button = QtGui.QPushButton("Click")
self.layout.addWidget(self.button)

self.button.clicked.connect(self.testMethod)

def testMethod(self):
print "testmethod(): FOO"

同样,我认为这种方法存在问题且难以处理,因为您必须销毁并重新创建小部件。当您的应用程序的某些部分将信号绑定(bind)到正在更新的小部件的插槽时,会出现更多问题。然后您还必须重新加载他们的模块并重新链接他们的信号。它变成了一个大的依赖树情况。用标准的 python 脚本来做已经够难了,更不用说尝试用像 PyQt 框架这样更持久和动态的东西来做了。

基本上,不要依赖这个能力。也许你会过得更好setting up something with QTest模拟您的重复性任务。

关于python - 如何在不重新启动的情况下调试 PyQt 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9666588/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com