Label() отображает метку без label_1=Label()?

#tkinter #widget #label

#tkinter #виджет #метка

Вопрос:

У меня есть небольшое приложение, в котором я тестирую различные виджеты, прежде чем внедрять их в основной файл кода, и я заметил, что у меня был, похоже, ошибочный способ отображения метки, но он все равно работал и не вызывал ошибок. Вместо того, что я обычно делал бы, что было бы: Label2=Label(frame1, text='second label').place(x=30,y=90) у меня было Label(frame1, text='frame1').place(x=30,y=50) , и оба отображались правильно. Итак, мне интересно, почему вторая строка сработала и не будет ли на нее невозможно ссылаться, поскольку ей не присвоена переменная?

Ответ №1:

Итак, мне интересно, почему сработала вторая строка

Вторая строка сработала просто потому, что так оно и задумано. Вам не нужно сохранять ссылку на виджет tkinter, чтобы он работал.

… и разве на него нельзя было бы ссылаться, поскольку ему не присвоена переменная?

Да, это недостаток отсутствия сохранения ссылки — у вас нет простого способа ссылаться на виджет после его создания. Вы все равно можете получить ссылку различными способами, но проще просто всегда сохранять ссылку.

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

Комментарии:

1. Не только удобочитаемость, но я только что обнаружил, что использование .place() строки присваивания переменной вызвало у меня проблемы с размещением метки на фрейме, который находится на вкладке. (Затем я также разместил вкладки в другом фрейме, и эта гибкость очень классная)