2013-09-11 2 views
5

У меня есть окно Tkinter с canvas и label с изображением 200x200 на нем. Я хочу, чтобы label находился в центре окна, независимо от размера окна.Как центрировать виджет Tkinter?

from Tkinter import * 
import Image, ImageTk, ImageDraw 

imgsize = (200,200) 
canvas_bg = "#000000" 

root = Tk() 
## root.geometry("350x350") 

panel = PanedWindow() 
panel.pack(expand=0) 

canvas = Canvas(panel, bg=canvas_bg) 

blank_source = Image.new('RGBA',imgsize, "#ffffff") 
blank = ImageTk.PhotoImage(blank_source) 

label = Label(canvas, image=blank) 
label.configure(image = blank) 

canvas.pack(expand=0) 
mainloop() 

Есть ли способ сделать это?

ответ

7

Используйте диспетчер геометрии place. Вот простой пример:

from tkinter import * 

wd = Tk() 
wd.config(height=500, width=500) 
can = Canvas(wd, bg = 'red', height=100, width=100) 
can.place(relx=0.5, rely=0.5, anchor=CENTER) 

В основном параметры работают следующим образом:

С anchor вы указать, какие точки виджета вы ссылаетесь и с двумя другими указать местоположение этой точки. Например, чтобы лучше понять это, допустим, вы будете уверены, что в окне всегда 500 * 500 и виджет 100 * 100, тогда вы также можете писать (глупо писать так, но только для ради объяснения):

from tkinter import * 

wd = Tk() 
wd.config(height=500, width=500) 
can = Canvas(wd, bg = 'red', height=100, width=100) 
can.place(x=200, y=200, anchor=NW) 

relx и rely дают положение относительно окна (от 0 до 1): 0,4 * 500 = 200
x и y дать абсолютные позиции: 200
anchor=NW делает варианты смещения в верхнем левом углу виджета

Вы можете узнать больше здесь:

http://effbot.org/tkinterbook/place.htm

И над здесь:

http://www.tutorialspoint.com/python/tk_place.htm

+1

Просто чтобы быть ясно: 'place' это _a_ способ выполнить задачу, не единственный способ для выполнения этой задачи. –

+0

Похоже, хорошее решение, спасибо. – Kriattiffer

+2

Я бы рекомендовал вместо этого использовать 'pack (anchor = 'center')', если у вас нет конкретной причины использовать 'place'. – jangler

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