2017-05-30 82 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不具有相同的限制,因爲它不影響父窗口小部件的幾何圖形。