2016-09-29 3 views
0

Я царапаю мне голову здесь. Я очень новичок в Tkinter. Я пытаюсь понять что-то основное, как размещение метки внутри рамки. Проблема, с которой я столкнулась, - это когда отображается метка, она не наследует размер родителя. Фактически, он фактически изменяет размер рамки, в которой он помещен. Что я делаю не так? В конце я хочу добавить больше ярлыков и кнопок в разные рамки без цвета BG в них.Этикетка в рамке (Tkinter)

main = Tk() 

main.geometry('1024x768+0+0') 

fm1 = LabelFrame(main, width = 1024, height = 68, bg = 'RED') 
fm1.grid(row = 0, columnspan = 2) 

label = Label(fm1, text = 'test') 
label.grid(row = 0, sticky = N+E+S+W) 

fm2 = Frame(main, width = 1024, height = 200, bg = 'BLUE') 
fm2.grid(row = 1, columnspan = 2) 

fm3 = Frame(main, width = 512, height = 300, bg = 'GREEN') 
fm3.grid(row = 2, column = 0) 

fm4 = Frame(main, width = 512, height = 300, bg = 'BLACK') 
fm4.grid(row = 2, column = 1) 

fm5 = Frame(main, width = 1024, height = 200, bg = 'YELLOW') 
fm5.grid(row = 3, columnspan = 2) 
+1

Что вы подразумеваете под «[ярлык] не наследует размер родителя»? Ожидаете ли вы изменения шрифта? Кроме того, виджеты tkinter предназначены для сжатия (или расширения), чтобы точно соответствовать их детям. –

ответ

0

Из моего опыта, если вы размещаете несколько кадров в главном окне и хотите, чтобы заполнить строки/столбцы, где вы положили их, вам нужно настроить строки/столбцы главного окна с помощью grid_rowconfigure и grid_columnconfigure и придать им вес.

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

main = Tk() 
main.geometry('1024x768+0+0') 

# Congigure the rows that are in use to have weight # 
main.grid_rowconfigure(0, weight = 1) 
main.grid_rowconfigure(1, weight = 1) 
main.grid_rowconfigure(2, weight = 1) 
main.grid_rowconfigure(3, weight = 1) 

# Congigure the cols that are in use to have weight # 
main.grid_columnconfigure(0, weight = 1) 
main.grid_columnconfigure(1, weight = 1) 


# Define Frames - use sticky to fill allocated row/column # 
fm1 = Frame(main, bg = 'RED') 
fm1.grid(row = 0, columnspan = 2, sticky='news') 

fm2 = Frame(main, bg = 'BLUE') 
fm2.grid(row = 1, columnspan = 2, sticky='news') 

fm3 = Frame(main, bg = 'GREEN') 
fm3.grid(row = 2, column = 0, sticky='news') 

fm4 = Frame(main, bg = 'BLACK') 
fm4.grid(row = 2, column = 1, sticky='news') 

fm5 = Frame(main, bg = 'YELLOW') 
fm5.grid(row = 3, columnspan = 2, sticky='news') 

# Notice 'pack' label - fine to use here as there are no conflicting grid widgets in this frame # 
lab = Label(fm1, text = 'TEST LABEL') 
lab.pack() 

main.mainloop() 

PS - я снял свою заданную высоту и ширину - это не обязательно, как вы рассказываете рамку, чтобы заполнить все пространство в сконфигурированной строке/столбце, в котором он «сетке».

И наконец, ваш первый кадр был определен как «LabelFrame», который им не совсем необходим в этом примере.

Надеюсь, это поможет! Luke

Смежные вопросы