Tkinter frame проблема: изменение размера не работает - PullRequest
1 голос
/ 10 апреля 2019

Я хочу иметь возможность использовать вложенные кадры, но есть странное поведение: когда я ввожу параметры высоты и ширины, они, кажется, не работают. Я использую .grid () Это то, что вызывает проблему? Я использую ttk Frame, есть ли какое-то поведение, о котором я не знаю?

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

from tkinter import *
from tkinter import ttk

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

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

root.mainloop()

Ожидаемый результат: внутри другой затонувшей рамки есть затонувшая рама. Внутри вложенной рамки есть метка с именем «Текст» Фактический результат: метка всегда находится в верхнем левом углу и не хочет двигаться.

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Вы можете присвоить ячейкам сетки минимальный размер, используя методы grid_columnconfigure() и grid_rowconfigure, как указано здесь .

Применяется к вашему коду (вместе с другими исправлениями и улучшениями):

import tkinter as tk
from tkinter import ttk

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

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

frame_2 = ttk.Frame(frame_1, height=200, width=200, relief="sunken")
frame_2.grid(row=0, column=0, sticky="NSWE")
frame_2.grid_rowconfigure(0, minsize=200)
frame_2.grid_columnconfigure(0, minsize=200)

label_1 = ttk.Label(frame_2, text="Text")
label_1.grid(row=0, column=0, sticky="NW")

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

Поскольку менеджер сетки не знает, сколько строк и столбцов должно быть в главном окне, он не выделяет кадры с определенной высотой и шириной.

Если вы добавите добавив к каждому кадру, вы увидите, что текстовый виджет находится не в верхнем левом углу.Но виджет «Текст» всегда будет в верхнем левом углу, так как он был помещен в 0-ю строку и столбец.

Кроме того, используйте rowconfigure и columnconfigure, чтобы гарантировать, что кадры занимают пространство, указанное вами на главнойокно.

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