Мой общий ответ на это был бы нет, это невозможно в прямой форме. Основная проблема заключается в том, что когда вы запускаете ваше приложение, оно загружает все в память, и ваши классы имеют привязанные методы и т. Д. Итак, чтобы обновить, скажем, значения, которые вы изменили для метода класса, вам придется уничтожить этот класс (или виджет) и воссоздать его в обновленном источнике (который также убил бы детей).
Плохо выглядит, но выглядит примерно так:
## 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.
По сути, не полагайтесь на эту способность. Возможно, вам лучше настроить что-то с помощью QTest для имитации ваших повторяющихся задач.