(尝试1):按钮中的命令在不显示按钮小部件的情况下执行。(我希望用户单击浏览按钮选择文件) (尝试2):如果我使用lambda,则按钮执行后的下一段代码立即抛出错误。因为只有在执行按钮命令后,merge\u doc=MailMerge(file\u name)才会获取其文件名。请建议
from tkinter import *
from tkinter import ttk
from mailmerge import MailMerge
import tkinter as tk
import os
from tkinter import filedialog
import tkinter.font as font
root = tk.Tk()
root.geometry("")
root.title("Test")
file_name=""
def main():
global file_name
file = filedialog.askopenfile(initialdir="./")
if file:
file_name=file.name
browse_button = Button(root, text ='BROWSE',command=main())
browse_button.grid(row=1, column=0, padx=10, ipadx=25,ipady=35)
browse_button.grid_forget()
merge_doc = MailMerge(file_name)
from tkinter import *
from tkinter import ttk
from mailmerge import MailMerge
import tkinter as tk
import os
from tkinter import filedialog
import tkinter.font as font
root = tk.Tk()
root.geometry("")
root.title("Test")
file_name=""
def main():
global file_name
file = filedialog.askopenfile(initialdir="./")
if file:
file_name=file.name
browse_button = Button(root, text ='BROWSE',command=lambda:main())
browse_button.grid(row=1, column=0, padx=10, ipadx=25,ipady=35)
browse_button.grid_forget()
merge_doc = MailMerge(file_name)
尝试2时引发错误:
Traceback (most recent call last):
File "C:\Users\Rocky\Desktop\TEST\Testnew.py", line 30, in <module>
merge_doc = MailMerge(file_name)
File "C:\Python38\lib\site-packages\mailmerge.py", line 25, in __init__
self.zip = ZipFile(file)
File "C:\Python38\lib\zipfile.py", line 1251, in __init__
self.fp = io.open(file, filemode)
FileNotFoundError: [Errno 2] No such file or directory: ''
第二次尝试时,将
merge_doc = MailMerge(file_name)
语句放在main()
上的if file:
块中因为,当python读取代码时,最初
file_name
变量包含""
。因此,在按下任何按钮之前,它调用merge_doc = MailMerge(file_name)
,其中file_name
是""
。因此,如果要在选择文件后调用该方法,请将其放入if块中如果希望用户单击浏览按钮选择文件,则可以使用
wait_variable()
:请注意,当用户单击“文件选择”对话框中的“取消”按钮时,您需要满足要求
根据您的第一次尝试,您制作了一个按钮并将其网格化为:
然后调用grid_forget()函数,该函数将使按钮从tkinter窗口消失
毕竟,您必须添加
root.mainloop()
才能无限地运行窗口。 改变到
相关问题 更多 >
编程相关推荐