我使用Qt + PyQt进行开发。我的应用程序非常大(20 MB的源代码)。它包括许多不同的菜单和小部件。非常常见我在某个小部件中只更改了方法上的1个字符串。但是为了检查更改,我关闭了我的应用程序,重新启动它,转到menu1 - > menu2 ....只有在这一步之后我才能检查变化。
如何只为一个类/小部件重新加载方法?没有关闭/打开整个应用程序?
答案 0 :(得分:3)
我对此的一般回答是否定的,不可能以直接的方式进行。主要问题是,当你启动你的应用程序时,它会将所有内容加载到内存中,并且你的类会绑定它们的方法等...所以为了更新说明,你改变了类的方法的值,你必须销毁该类(或小部件)并在更新的源下重新创建它(这也会杀死子级)。
看起来很糟糕,但它看起来像这样:
## 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"
同样,我认为这种方法存在问题且难以处理,因为您必须销毁并重新创建窗口小部件。当应用程序的某些部分具有绑定到此窗口小部件的插槽的信号时,会出现更多问题。然后你还必须重新加载他们的模块并重新链接他们的信号。它成为一个很大的依赖树情况。它很难用于标准的python脚本,更不用说尝试使用像PyQt框架一样更持久和动态的东西。
基本上,不要依赖这种能力。你最好还是setting up something with QTest来模拟你的重复性任务。