Метка выходит из вложенного кадра при использовании сетки (tkinter) - PullRequest
0 голосов
/ 09 апреля 2019

Это простой вопрос, но не должен ли ярлык оставаться внутри вложенного фрейма, когда вы используете «липкий»? В моем коде он остается только в родительском фрейме. Если это нормально, у вас есть решение?

Я попытался просмотреть документацию, но не нашел ничего, что могло бы помочь.

from tkinter import *
from tkinter import ttk

root = Tk()
root.title("Tk test")
root.geometry("800x800")

frame_1 = ttk.Frame(root, relief="sunken", height="400", width="400").grid(row=0, column=0, rowspan=1, columnspan=1)
frame_2 = ttk.Frame(frame_1, relief="sunken", height="200", width="200").grid(row=0, column=0, rowspan=1, columnspan=1)
label_1 = ttk.Label(frame_2, text="Text").grid(row=0, column=0, sticky="N, E")

root.mainloop()

Ожидаемый результат: метка остается внутри своего фрейма, который вложен в родительский фрейм. Фактические результаты: он остается только внутри родительского фрейма

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Функция .grid(...) возвращает None. Поэтому, когда вы делаете

frame_1 = ttk.Frame(root, relief="sunken", height="400", width="400").grid(row=0, column=0, rowspan=1, columnspan=1)

Вы назначаете None на frame_1. И то же самое относится к frame_2 и label_1.

Поскольку frame_1 == None, вызов ttk.Frame(frame_1, ...) фактически совпадает с ttk.Frame(None, ...). Поэтому вы не передаете мастер, который по умолчанию имеет корневое окно в качестве мастера. Снова, то же самое касается создания label_1.

Исправление - разделить создание и размещение виджетов на две отдельные строки:

from tkinter import *
from tkinter import ttk

root = Tk()
root.title("Tk test")
root.geometry("800x800")

frame_1 = ttk.Frame(root, relief="sunken", height="400", width="400")
frame_1.grid(row=0, column=0, rowspan=1, columnspan=1)
frame_2 = ttk.Frame(frame_1, relief="sunken", height="200", width="200")
frame_2.grid(row=0, column=0, rowspan=1, columnspan=1)
label_1 = ttk.Label(frame_2, text="Text")
label_1.grid(row=0, column=0, sticky="N, E")

root.mainloop()
0 голосов
/ 09 апреля 2019

добавить .pack () в конце каждой строки, где вы определяете frame_1, frame_2 и label_1

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