1

I'm beginner in Python and Tkinter. I'm trying to put an image in the top-left corner but I couldn't. I was tried with the property "justify" and "Anchor". Here is my code:

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

I would be thankful with any solution.

4

2 回答 2

3

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

网格几何管理器将小部件放在二维表中。您会惊讶于使用网格管理器而不是打包器要容易得多。

让我们以这个例子来展示网格可以做什么。使用包管理器创建此布局是可能的,但它需要一些额外的框架小部件。

tkinter 网格示例

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

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

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)

因此,您的答案将与 <label 1> 的位置相同,换句话说,网格将是row = 0, 和column = 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

在这个例子中,我使用了 tkinter 本身不支持的 .jpg 文件格式,并且由于我们使用的是 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 将愉快地度过你的余生,努力协商一个双方经理都满意的解决方案。与其等待,不如终止应用程序,然后再查看您的代码。一个常见的错误是为某些小部件使用了错误的父级。

链接:http ://effbot.org/tkinterbook/grid.htm

于 2013-05-01T06:15:05.997 回答
0

问题的具体原因是您或多或少正确地使用了 place,然后在调用pack(). placepack并且grid不是免费的——您必须只使用一个来管理任何特定的小部件。

于 2013-05-01T11:24:48.507 回答