在tkin的画布上添加小部件

2024-04-25 14:19:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我想把一个小图像和其他小部件放在显示图像的画布上。我尝试过诸如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()

Tags: 图像imagelo部件选项画布loginroot
3条回答

这个问题根本不是关于图像的,它只是一个基本的布局问题。不管有没有图像,你都会遇到同样的问题。问题很简单,你没有给网格提供任何选择,所以它自然会把事情放在首位。Tkinter还有一个行为,即一个包含小部件(例如:您的画布)将收缩或展开以完全适合其内容。在

下面是一个在背景图像上创建几个小部件的版本。注意使用了packgrid,并使用了grid_rowconfigure和{}来指定如何分配额外的空间。在

from Tkinter import *

root = Tk()

canvas = Canvas(root, width=730, height=600)
canvas.pack(fill="both", expand=True)

bgImg = PhotoImage(file="E:/a.gif")

canvas.create_image(370, 330, image=bgImg)

l1 = Label(canvas, text="Hello, world")
e1 = Entry(canvas)
t1 = Text(canvas)

l1.grid(row=0, column=0, sticky="ew", padx=10)
e1.grid(row=1, column=1, sticky="ew")
t1.grid(row=2, column=2, sticky="nsew")

canvas.grid_rowconfigure(2, weight=1)
canvas.grid_columnconfigure(2, weight=1)

root.mainloop()

您是否考虑过使用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)而不是{}。目前您还没有看到大问题,因为您只有一个标签小部件。但是如果您尝试添加其他小部件而不提及确切的位置(行和列),您将得到意外的结果。在

相关问题 更多 >