AttributeError: Button实例没有'set'属性

-1 投票
1 回答
1700 浏览
提问于 2025-04-18 15:48

我想打印上传文件的路径,所以我用了 .set() 方法。我试着用全局变量,但当我更改文件时,它没有更新文件名。

def callback():
    file_name.set(askopenfilename(filetypes=(("Music File", "*.mp3"),("Video files", "*.mpg"))))


file_name = Button(root, text="open", command=callback)
file_name.pack(side=Tkinter.TOP)

我遇到了这个错误,有什么建议吗?

Exception in Tkinter callback
Traceback (most recent call last):
  File "D:\Python27\lib\lib-tk\Tkinter.py", line 1486, in __call__
    return self.func(*args)
  File "C:\Users\Xavier_\Desktop\PROJECT_FINAL(please don't edit)\segmentation_GUI.py", line 20, in callback
    file_name.set(askopenfilename(filetypes=(("Music File", "*.mp3"),("Video files", "*.mpg"))))
AttributeError: Button instance has no attribute 'set'

1 个回答

0

假设你想把按钮上的文字换成你选择的文件名。

根据错误信息,按钮没有 set 方法。你可以使用 configure...

def callback():
    file_name.configure(text=askopenfilename(...))

但更好的做法是使用一个 Variable。你可以创建一个 StringVar,然后把它和 Button 绑定在一起。接着,你可以用 set 方法来更新这个变量的值,用 get 方法来获取这个变量的值,也就是按钮上的文字。

def callback():
    var.set(askopenfilename(filetypes=(("Music File", "*.mp3"),("Video files", "*.mpg"))))

root = Tk()
var = StringVar()
var.set("select file...")
file_name = Button(root, textvariable=var, command=callback)
file_name.pack(side=TOP)
root.mainloop()

撰写回答