Tkinter获取选中文件路径后自动关闭窗口及Excel复制问题
解决方案
你当前代码无法实现选完文件自动关闭窗口,是两个逻辑错误导致的:
window.mainloop()是tkinter的阻塞事件循环,你将关闭窗口的相关逻辑写在这行代码之后,这些代码只会在窗口被手动关闭后才会运行,永远不可能触发自动关闭- 选中文件的回调函数
get_file_path()中没有调用窗口销毁方法,选完文件后没有触发关闭的动作
修正后完整代码
from tkinter import * from tkinter import filedialog import openpyxl as xl def get_file_path(): global file_path file_path= filedialog.askopenfilename(title = "Select A File", filetypes = (("xlsx", "*.xlsx"), ("xls", "*.xls"), ("xlsm", "*.xlsm"), ("All Files", "*.*"))) # 选中文件后直接销毁窗口 window.destroy() file_path = "" window = Tk() b1 = Button(window, text = "Open File", command = get_file_path).pack() window.mainloop() # 可选优化:判断用户是否选中了文件,避免取消选择时报错 if not file_path: print("未选择任何文件,程序退出") exit() print(file_path) path1 = file_path path2 = r'C:\Users\...\Write_Data.xlsx' wb1 = xl.load_workbook(filename=path1) ws1 = wb1["BASEL_LN_CTR"] wb2 = xl.load_workbook(filename=path2) ws2 = wb2["Loan Data"] for row in ws1: for cell in row: ws2[cell.coordinate].value = cell.value wb2.save(path2)
核心修改说明
- 在
get_file_path()函数末尾添加window.destroy(),用户选中文件确认后直接触发窗口销毁 - 删掉了冗余的未生效
close_window()函数定义 - 修正了原代码中错误的
path1 = ("r'" and file_path)写法,直接使用file_path变量即可 - 增加了未选中文件的判断逻辑,避免用户点取消后后续文件操作报错
内容的提问来源于stack exchange,提问作者hoa tran
相关产品推荐
相关产品推荐

