打开文件时python tkinter更新标签的内容

时间:2018-11-07 13:41:59

标签: python-3.x tkinter

我目前正在使用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()的信息。如果就我而言这是正确的,我将如何在此处实施?

1 个答案:

答案 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()