2017-05-30 46 views
0

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

+0

您不能在一个容器中混用小部件布局管理器。您可以通过将背景图像放在Canvas上,然后[将按钮放在Canvas上]来获得所需的效果(http://effbot.org/tkinterbook/canvas.htm#Tkinter.Canvas.create_window -方法)。 –

+0

不,但是您可以使用'pack'顶部的'place'进行布局。 – Novel

回答

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

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

+0

我能够在网格上放置一个地方。这对我来说似乎非常简单,并且可能会实现您正在寻找的内容。 – bretcj7

0

“在包顶部覆盖网格”是没有意义的。 Tkinter既没有网格也没有包装对象。 gridpack是功能。

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

既然你的目标是要有一个背景图像,最简单的解决方案是使用标签,而不是一个框架。您可以拨打grid在标签内部排列小部件,其方式与您在框架内排列小部件的方式完全相同。使用标签的好处是你可以给它一张图片。

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