您是否尝试过网格几何管理器。
网格几何管理器将小部件放在二维表中。您会惊讶于使用网格管理器而不是打包器要容易得多。
让我们以这个例子来展示网格可以做什么。使用包管理器创建此布局是可能的,但它需要一些额外的框架小部件。
但是使用网格几何管理器,您还可以让小部件跨越多个单元格。该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