Я думаю, что это возможно, если вы сделаете следующее:
- Определите и изолируйте виджет W, который вы хотите видеть обновленным при нажатии кнопки (если вы хотите, чтобы все окно обновлялось, затем сделайте все, что вы добавляете в окно, а не само окно).
- Напишите функцию (или класс), которая создает и возвращает этот виджет
- Поместите эту функцию или класс в модульчто вы перезагрузите
- Создайте свою кнопку вне W и подключите ее к функции, которая выполняет следующие действия:
- Удалите текущий W из окна
- Перезагрузите модуль
- Создайте новый экземпляр W
- Добавьте его в окно
Конечно, критический шаг здесь - это «перезагрузить модуль».Я предполагаю, что вы должны убедиться, что код модуля не запущен, и никакой другой модуль не зависит от переменных, определенных в этом модуле.
РЕДАКТИРОВАТЬ: у меня было некоторое время, поэтому я сделал небольшой прототип.Измените метку в widget_module.py, а затем нажмите Обновить
gui.py
# Load in pygtk and gtk
import pygtk
pygtk.require('2.0')
import gtk
import widget_module
# Define the main window
class Whc:
def __init__(self):
# Window and framework
self.window = gtk.Window(gtk.WINDOW_TOPLEVEL)
self.window.connect("destroy", self.destroy)
# A Button, with an action
# Add it to the geometry
# show the button
self.button = gtk.Button("Update")
self.button.connect("clicked", self.update, None)
self.vbox = gtk.VBox()
self.vbox.pack_start(self.button)
self.widget = widget_module.get_widget()
self.vbox.pack_start(self.widget)
self.window.add(self.vbox)
# Show the window
self.window.show_all()
# Callback function for use when the button is pressed
def update(self, widget, data=None):
print "Update"
self.vbox.remove(self.widget)
reload(widget_module)
self.widget = widget_module.get_widget()
self.vbox.pack_start(self.widget)
self.widget.show()
# Destroy method causes appliaction to exit
# when main window closed
def destroy(self, widget, data=None):
gtk.main_quit()
# All PyGTK applicatons need a main method - event loop
def main(self):
gtk.main()
if __name__ == "__main__":
base = Whc()
base.main()
widget_module.py
import pygtk
import gtk
def get_widget():
return gtk.Label("hello")