Python/tkinter:添加条目小部件会隐藏我的画布项目

Python/tkinter:添加条目小部件会隐藏我的画布项目,python,tkinter,tkinter-canvas,tkinter-entry,Python,Tkinter,Tkinter Canvas,Tkinter Entry,对于我正在制作的游戏,我需要用户输入数据,我想调用一个方法,在我的GUI中添加一个小输入框(以获取用户的名字),但当我尝试这样做时,输入小部件基本上屏蔽了所有其他东西,并使它们消失。关于为什么会发生这种情况或如何修复,有什么想法吗?下面是问题代码的一个示例: root = tkinter.Tk() root.title('2048') width = 500 height = 800 root.geometry('%sx%s' % (width, height)) canvas = tkinte

对于我正在制作的游戏,我需要用户输入数据,我想调用一个方法,在我的GUI中添加一个小输入框(以获取用户的名字),但当我尝试这样做时,输入小部件基本上屏蔽了所有其他东西,并使它们消失。关于为什么会发生这种情况或如何修复,有什么想法吗?下面是问题代码的一个示例:

root = tkinter.Tk()
root.title('2048')
width = 500
height = 800
root.geometry('%sx%s' % (width, height))
canvas = tkinter.Canvas(root, width=width, height=height, highlightthickness=0)
canvas.pack()
r = canvas.create_rectangle(0, 0, 50, 50)
canvas.move(r, 50, 50)


def keyed(event):
    e = tkinter.Entry(canvas)
    e.pack()


canvas.bind('<Key>', keyed)
canvas.focus_set()
root.mainloop()
root=tkinter.Tk()
root.title('2048')
宽度=500
高度=800
几何体(“%sx%s%”(宽度、高度))
canvas=tkinter.canvas(根,宽度=宽度,高度=高度,highlightthickness=0)
canvas.pack()
r=画布。创建矩形(0,0,50,50)
画布移动(r,50,50)
def键控(事件):
e=tkinter.Entry(画布)
e、 包()
canvas.bind(“”,键控)
canvas.focus_set()
root.mainloop()

这是使用
pack
grid
时的标准行为-小部件将增长或收缩以适应其内容。在画布中打包条目时,画布将收缩或增长以适合画布。这称为几何体传播

至少有三种方法可以解决这个问题。第一个是不要将小部件放在画布中。相反,将其放在上方、下方或一侧(例如:
e=tkinter.Entry(root)

另一种解决方案是不使用
包装
(或
网格
)。相反,使用canvas
create\u window
方法将条目小部件设置为第一类canvas对象。您必须决定将其放置在何处,因为
create\u窗口
方法需要x/y坐标

第三个选项是继续使用
pack
,但禁用几何体传播。就我个人而言,我认为这个功能几乎不应该被使用。小部件的增长或收缩是一个特性,而不是一个bug,它是一个使创建响应用户界面更容易的特性


要关闭画布的几何体传播,如果继续使用
pack
,可以调用
canvas.pack\u propagate(False)
;如果切换到画布内部使用网格,可以调用
canvas.grid\u propagate(False)

没有代码的问题是无用的。