我想把一个小图像和其他小部件放在显示图像的画布上。我尝试过诸如compound
等选项。在
背景图片很好,我想放在背景图片上的小图像显示的很好,但它总是在窗口的顶部或底部。我想把它放在背景图像的任何区域。我已经尝试了所有几何图形管理器的许多选项(包、网格、位置),但都不起作用。请帮忙,我的代码是:
from Tkinter import *
root = Tk()
root.iconbitmap('E:/a.ico')
root.title('Unick Locker')
canvas = Canvas(root, width=730, height=600)
canvas.grid()
bgImg = PhotoImage(file="E:/a.gif")
canvas.create_image(370, 330, image=bgImg)
login = PhotoImage(file="E:/login.gif")
lo = Label(root, image=login)
lo.grid()
root.mainloop()
这个问题根本不是关于图像的,它只是一个基本的布局问题。不管有没有图像,你都会遇到同样的问题。问题很简单,你没有给网格提供任何选择,所以它自然会把事情放在首位。Tkinter还有一个行为,即一个包含小部件(例如:您的画布)将收缩或展开以完全适合其内容。在
下面是一个在背景图像上创建几个小部件的版本。注意使用了}来指定如何分配额外的空间。在
pack
和grid
,并使用了grid_rowconfigure
和{您是否考虑过使用
paste
方法,该方法允许您通过box参数定义粘贴图像的位置?在见http://effbot.org/imagingbook/imagetk.htm。在
也请看一下这个帖子:Tkinter, overlay foreground image on top of a background image with transparency,它看起来和你的问题非常相似。在
您希望在画布上绘制小部件,这意味着您必须将画布指定为父小部件,而不是像您那样指定
root
。为此,请将lo = Label(root, image=login)
修改为lo = Label(canvas, image=login)
另外,不要忘记指定要放置不同小部件的行和列。这意味着您需要编写,例如,}。目前您还没有看到大问题,因为您只有一个标签小部件。但是如果您尝试添加其他小部件而不提及确切的位置(行和列),您将得到意外的结果。在
lo.grid(row=0, column=0)
而不是{相关问题 更多 >
编程相关推荐