Невозможно изменить конфигурацию виджета из метода (Tkinter) - PullRequest
0 голосов
/ 27 января 2020

У меня есть класс, в котором я создаю метку для метода 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()

1 Ответ

0 голосов
/ 27 января 2020

В вашем конкретном случае c есть две проблемы. Во-первых, вы создаете два экземпляра tk.Tk. Вы никогда не должны этого делать.

Во-вторых, вы не создаете self.label1, поэтому любая попытка изменить его не удастся.

Решение состоит в том, чтобы сначала удалить tk.Tk как суперкласс для app. Во-вторых, нужно правильно определить self.label1

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

В дополнение к этому вы должны серьезно рассмотреть вопрос о соблюдении соглашений об именах PEP8 и назвать свой основной класс App , PEP8 почти универсален в мире python, и отклонение от него затрудняет чтение кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...