【问题标题】:Python/tkinter: Adding an Entry widget hides my canvas itemsPython/tkinter:添加一个条目小部件隐藏我的画布项目
【发布时间】:2020-04-12 19:38:30
【问题描述】:

对于我正在制作的游戏,我需要用户输入数据,并且我想调用一个向我的 GUI 添加一个小条目框的方法(以获取用户名),但是当我尝试这样做时Entry 小部件基本上掩盖了所有其他事物并使它们消失。关于为什么会发生这种情况或如何解决的任何想法?以下是有问题的代码示例:

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()

【问题讨论】:

  • 你的问题没有代码是没用的。

标签: python tkinter tkinter-canvas tkinter-entry


【解决方案1】:

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

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

另一个解决方案是使用pack(或grid)。相反,使用画布create_window 方法使条目小部件成为第一类画布对象。由于create_window 方法需要x/y 坐标,因此您必须决定将其放置在何处。

第三种选择是继续使用pack,但关闭几何传播。我个人认为这个功能几乎不应该被使用。小部件增长或缩小这一事实是一种特性,而不是一个错误,它使创建响应式用户界面变得更加容易。

要关闭画布的几何传播,如果您继续使用pack,可以调用canvas.pack_propagate(False),如果您切换到在画布内使用网格,请调用canvas.grid_propagate(False)

【讨论】:

    猜你喜欢
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    相关资源
    最近更新 更多