在角落中加载Tkinter中的图像

时间:2013-05-01 04:54:36

标签: python tkinter

我是Python和Tkinter的初学者。我想把图像放在左上角,但我不能。我被审判了属性“justify”和“Anchor”。这是我的代码:

logo_upb = PhotoImage(file="upb.gif")
label = Label(root, image=logo_upb, justify=LEFT)
label.image = logo_upb
label.place(bordermode=INSIDE, x=0, y=0)
label.pack()

我会对任何解决方案表示感谢。

2 个答案:

答案 0 :(得分:3)

您是否尝试过网格几何管理器。

网格几何管理器将小部件放在二维表中。您会惊讶地发现使用网格管理器而不是打包器会更容易。

让我们举个例子来说明网格可以做什么。可以使用包管理器创建此布局,但它需要许多额外的框架小部件。

tkinter grid example

但是使用网格几何管理器,您还可以让窗口小部件跨越多个单元格。 columnspan选项用于让窗口小部件跨越多个列< checkbutton>和<图像>,rowspan选项允许它跨越多行<图像>。

以下代码创建显示的布局:

label1.grid(sticky=E)
label2.grid(sticky=E)

entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)

checkbutton.grid(columnspan=2, sticky=W)

image.grid(row=0, column=2, columnspan=2, rowspan=2,
           sticky=W+E+N+S, padx=5, pady=5)

button1.grid(row=2, column=2)
button2.grid(row=2, column=3)

所以你的回答与<的位置相同。标签1>换句话说,网格将是row = 0column = 1。 Tkinter本身支持GIF,因此不需要额外的库。

import Tkinter as tk

root = tk.Tk()
img = tk.PhotoImage(file ="somefile.gif")
panel = tk.Label(root, image = img)
panel.grid(row=0,column=1)
root.mainloop()

我的个人建议是使用Python Imaging Library(PIL)链接:http://www.pythonware.com/products/pil/为游戏添加更多支持的文件格式。支持的文件格式列表:http://infohost.nmt.edu/tcc/help/pubs/pil/formats.html

在这个例子中我使用了.jpg文件格式,这在tkinter中并不是本机支持的,并且所有这些格式都完美,因为我们使用的是PIL。

import Tkinter as tk
from PIL import ImageTk,Image

root = tk.Tk()
img = ImageTk.PhotoImage(Image.open("somefile.jpg"))
panel = tk.Label(root, image = img)
panel.grid(row=0,column=1)
root.mainloop()

警告:切勿在同一主窗口中混合网格和打包。 Tkinter很乐意度过余生,试图协商一个管理人员都满意的解决方案。而不是等待,杀死应用程序,再看看你的代码。一个常见的错误是对某些小部件使用了错误的父级。

LINK:http://effbot.org/tkinterbook/grid.htm

答案 1 :(得分:0)

问题的具体原因是您正确地使用了地方,然后在致电pack()时抛弃所有展示位置。 placepackgrid不是免费的 - 您只能使用一个来管理任何特定的小部件。