我有一个程序正在无休止地编辑,每次进行更改时,我都必须退出并重新启动。我希望能够重新加载和重新启动,而不必退出并再次返回。
这是一个名为 reload.py 的文件中的一个简单程序,如果有类似 reexec 的东西可用,它将执行我想要的操作:
from tkinter import *
class Application(Frame):
def do_load(self):
print("time to reload")
reexec("reload.py")
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
self.my_reload = Button(self)
self.my_reload["text"] = "Reload",
self.my_reload["command"] = self.do_load
self.my_reload.pack()
if __name__ == '__main__':
root = Tk()
app = Application(master=root)
app.mainloop()
Run Code Online (Sandbox Code Playgroud)
我尝试使用重新加载 Application 类:
def do_load(self):
print("time to reload")
reload(Application)
Run Code Online (Sandbox Code Playgroud)
我收到一个错误:
File "python3.4/importlib/__init__.py", line 122, in reload
raise TypeError("reload() argument must be module")
TypeError: reload() argument must be module
Run Code Online (Sandbox Code Playgroud)
这是我需要了解有关模块的更多信息的 RTFM 案例吗?
任何帮助或建议将被欣然接受。
为了在importlib这里使用,您必须重新加载主模块,并杀死 TK 实例,这样 python 将成功地使用编辑过的源代码重新创建另一个。
主文件
from tkinter import *
class Application(Frame):
def __init__(self, master=None, on_reload=None):
Frame.__init__(self, master)
self.pack()
self.my_reload = Button(self)
self.my_reload["text"] = "Reload",
self.my_reload["command"] = on_reload
self.my_reload.pack()
Run Code Online (Sandbox Code Playgroud)
执行器.py
import tkinter
import importlib
import main
class Executor:
def __init__(self):
self.root = tkinter.Tk()
self.app = main.Application(master=self.root, on_reload=self.on_reload)
self.app.mainloop()
def on_reload(self):
self.root.destroy()
importlib.reload(main)
self.root = tkinter.Tk()
self.app = main.Application(master=self.root, on_reload=self.on_reload)
self.app.mainloop()
if __name__ == '__main__':
Executor()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1381 次 |
| 最近记录: |