首页 > 解决方案 > 无法从方法更改小部件配置(Tkinter)

问题描述

我有一个类,我在init方法上创建一个标签:

import tkinter as tk
from tkinter.filedialog import askopenfilename

class app(tk.Tk):
    def __init__(self, master):
        label1 = tk.Label(master, text="Select file...")
        label1.pack()

然后我用一个按钮调用一个方法来选择一个文件并将标签文本更改为文件名路径。

    def files(self):
        filename = askopenfilename()
        self.label1.config(text=filename)

问题是当我选择文件时,应用程序会在没有错误的情况下关闭,所以我不知道发生了什么。

课外我有:

root = tk.Tk()
app_gui = app(root)
root.mainloop()

标签: pythonpython-3.xtkinterwidget

解决方案


在您的具体情况下,有两个问题。第一个是您正在创建两个tk.Tk. 你不应该那样做。

第二个是您没有创建self.label1,因此任何修改它的尝试都会失败。

解决方案是首先删除tk.Tk作为app. 二是正确定义self.label1

class app():
    def __init__(self, master):
        self.label1 = tk.Label(...)
        ...

附带说明一下,您应该认真考虑遵循PEP8的命名约定并命名您的 main class App。PEP8 在 python 世界中几乎是通用的,偏离它会使你的代码更难阅读。


推荐阅读