2015-09-15 16 views
2

Я пытаюсь создать рамку фиксированного размера и разместить текстовую метку в центре. Я не уверен, почему это не работает. Я хочу, чтобы рамка была в левом верхнем углу основного кадра, поэтому задана NW и это работает нормально. Но изменение липкого направления этикетки ничего не делает. Помощь приветствуется.Tkinter: Центральная метка в рамке фиксированного размера?

self.f = Frame(self.master,bg="yellow",width=50,height=50) 
self.f.grid(row=0,column=0,sticky="NW") 
self.f.grid_propagate(0) 
self.f.update() 
self.l = Label(self.f,text="123",anchor="center",bg="yellow") 
self.l.grid(column=0,row=0,sticky="wens") 
+0

Упорядочить виджеты в Tkinter - непростая задача. Быстрое исправление заключалось бы в добавлении 'pady' и' padx' в сетку меток: 'self.l.grid (column = 0, row = 0, pady = 10, padx = 10, sticky =" wens ")' – VRage

+0

' W + E + N + S! = "Wens" 'и трюки @VRage – dsgdfg

ответ

0

Вы можете использовать .place() для своей маркировки, так как ваша рама и ваш ярлык имеют разных родителей. В place() вы можете использовать anchor="center" указать начальную точку вашего «якоря» с: x и y. Вот рабочий пример:

app = Tk() 
f = Frame(app,bg="yellow",width=50,height=50) 
f.grid(row=0,column=0,sticky="NW") 
f.grid_propagate(0) 
f.update() 
l = Label(f,text="123",bg="yellow") 
l.place(x=25, y=25, anchor="center") 
app.mainloop() 
+0

Спасибо. Это отлично работает. Я думал, что было бы плохо использовать пакет и сетку в том же окне. Или это касается только тех, у кого есть один и тот же родитель? – John

+0

Речь идет только о виджетах с одним и тем же родителем. Таким образом, вы можете иметь 2 разных фрейма в одном из них, вы можете использовать 'grid()' в другом, который вы можете использовать 'pack()' – VRage

+0

Если вы не хотите вводить средние значения вашего кадра самостоятельно, вы также можете использовать: 'l.place (x = f.winfo_width()/2, y = f.winfo_height()/2, anchor =" center ")', которые просто используют ширину и высоту вашего кадра. – VRage