在网格顶部覆盖网格

时间:2017-05-30 20:12:18

标签: python tkinter

是否可以在一个包装上放置网格?我问这个是因为我想制作一张互动地图。我想要一个背景图像占据整个窗口,然后在特定位置放置按钮。网格使得将按钮放在需要的位置很容易,但除非我使用包,否则我无法使背景图像正常工作。然后我不能轻易地将按钮放在我想要的位置(他们需要越过地图上特定位置的顶部,即建筑物)

2 个答案:

答案 0 :(得分:0)

“在网格顶部覆盖网格”毫无意义。 Tkinter既没有网格也没有包对象。 gridpack是函数。

作为函数,您不能同时使用它们来管理具有公共父级的窗口小部件。

由于您的目标是拥有背景图像,因此最简单的解决方案是使用标签而不是框架。您可以调用grid来排列标签内的小部件,其方式与在框架内排列小部件的方式完全相同。使用标签的好处是您可以为其提供图像。

另一种选择是继续使用您的相框,然后使用place将背景图像添加到相框中。 placegridpack不具有相同的限制,因为它不会影响父窗口小部件的几何。

答案 1 :(得分:0)

这不是最好的方式,它有它的缺点,但是:

import tkinter as tk
from PIL import Image, ImageTk

root = tk.Tk()
with open ('map.jpg', mode='rb') as imfile:
    im = ImageTk.PhotoImage(Image.open(imfile))

bg = tk.Label(root, image=im)
bg.grid(column=0, row=0, columnspan=10, rowspan=10, sticky='nesw')

lbl = tk.Label(root, text="Label")
lbl.grid(column=1, row=1, sticky='nesw')

entry = tk.Entry(root)
entry.grid(column=2, row=2, sticky='nesw')
root.mainloop()

这个问题最大的问题是像标签这样的小工具不会透明并显示下面的地图,请参阅图片:
window view

如果您需要透明度,最佳方法是使用画布。