如何将Tkinter小部件居中显示?

18

我有一个Tkinter窗口,其中包括canvas和一个200x200的图片 label。 我希望label无论窗口大小如何都位于窗口中心。

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()

有没有什么办法可以做到呢?

1个回答

28

使用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)

relxrely 给出相对于窗口的位置(从0到1):0、4*500 = 200
xy 给出绝对位置:200
anchor=NW 使偏移选项参考小部件的左上角。

您可以在此处了解更多信息:

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

以及在这里:

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


4
只是为了澄清:place 是完成任务的一种方式,而不是唯一的方式。 - Bryan Oakley
9
我建议使用 pack(anchor='center'),除非你有特定的原因要使用 place - jangler
2
@jangler 怎样使用 grid 定位? - Alex Liu 33214
对于并排的图片:`framel = tk.Label(framee, bg='pink', image = None) framel.place(relx = 0.1, rely= 0.1, relwidth=0.8,relheight=0.8)sl = tk.Label(framel, bg='orange', image = self.current_img) sl.place(relx=0.5, rely=0.5, anchor=E)sr = tk.Label(framel, bg='orange', image = aa) sr.place(relx=0.5, rely=0.5, anchor=W) ` - El Bachir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接