我目前正在使用tkinter和Python 3编写GUI。
我的问题是我制作了一个Label,用于显示我通过askopenfilename()
方法打开的文件的路径,并且当我启动程序时,此路径不是“生成的”,因此Label为空这是有道理的,但我不知道如何解决。
我将所需的代码放在下面(我将为这个问题剪切不必要的代码):
import tkinter as tk
class Graphicaluserinterface(tk.Frame):
def __init__(self,master=None):
super().__init__(master)
self.grid()
self.fileopenname=tk.StringVar()
self.menubar = tk.Menu(self)
self.create_widgets()
def create_widgets(self):
self.inputpathdisplay = tk.Label(self,textvariable=self.fileopenname,bg="white",width=30)
self.inputpathdisplay.grid(row=1,column=8,columnspan=3,sticky = "W")
def fileopening(self):
from tkinter.filedialog import askopenfilename
self.fileopenname = askopenfilename(filetypes = [("binary files","*.bin*"),("all files","*.*")])
root = tk.Tk()
app = Graphicaluserinterface(master=root)
root.config(menu=app.menubar)
app.mainloop()
我阅读了有关使用update_idletasks()
的信息。如果就我而言这是正确的,我将如何在此处实施?
答案 0 :(得分:4)
现在您正在做self.fileopenname = askopenfilename()
,它将self.fileopenname
重新定义为字符串而不是StringVar()。要更正此问题,您需要使用set()
设置StringVar的值。
也就是说,您还应该在代码顶部而不是在函数中定义所有导入。
import tkinter as tk
from tkinter.filedialog import askopenfilename
class Graphicaluserinterface(tk.Frame):
def __init__(self,master=None):
super().__init__(master)
self.grid()
self.fileopenname=tk.StringVar()
self.menubar = tk.Menu(self)
self.inputpathdisplay = tk.Label(self, textvariable=self.fileopenname, bg="white")
self.inputpathdisplay.grid(row=1,column=8,columnspan=3,sticky = "W")
self.fileopening()
def fileopening(self):
self.fileopenname.set(askopenfilename(filetypes = [("binary files","*.bin*"),("all files","*.*")]))
root = tk.Tk()
app = Graphicaluserinterface(master=root)
root.config(menu=app.menubar)
app.mainloop()