tkinter的askopenfilename()无法多次调用应如何修改代码?
根因说明
你在全局创建的Tk根窗口没有被变量持有,第一次调用文件选择框完成后,该匿名实例就被Python垃圾回收机制清理了。第二次调用askopenfilename()时找不到有效的根窗口上下文,因此程序无响应。
修正后代码
from tkinter import Tk from tkinter.filedialog import askopenfilename # 显式持有根窗口引用,避免被GC回收 root = Tk() root.withdraw() def my_filebrowser(command): filename = askopenfilename() print(filename, command) while True: # 增加异常处理,避免非数字输入导致程序崩溃 try: command = int(input('enter command: ')) except ValueError: break if command in (1, 2): my_filebrowser(command) else: break
可选实现方案
如果不需要长期持有根窗口,也可以每次调用文件选择框时临时创建实例,用完即销毁:
from tkinter import Tk from tkinter.filedialog import askopenfilename def my_filebrowser(command): # 临时创建根窗口 root = Tk() root.withdraw() filename = askopenfilename() # 调用完成后销毁窗口释放资源 root.destroy() print(filename, command) while True: try: command = int(input('enter command: ')) except ValueError: break if command in (1, 2): my_filebrowser(command) else: break
内容的提问来源于stack exchange,提问作者Pouria
相关产品推荐
相关产品推荐

