Python龟图形窗口中的tkinter小部件问题

时间:2016-01-11 04:37:51

标签: python python-3.x tkinter widget turtle-graphics

我已经用Python龟图形创建了一个程序,并创建了一些小部件放在窗口中。但是,小部件存在一个主要问题:它们只是停留在窗口的底部,而且我无法在屏幕的任何地方移动它们。它们只是从左到右依旧停留在底部窗口中,这在拥有许多小部件时成为一个真正的问题。为了澄清,这里是我正在谈论的图像:Widgets issue

我想要的是能够将窗口小部件移动到窗口的顶部,左侧或右侧,而不是仅仅粘贴到窗口的底部。并且,正如您所看到的,由于我创建了大量小部件,因此我无法做到这一点成为一个真正的问题。 那么,为什么会发生这种情况以及我该如何解决呢?另外,以下是我的菜单中一个的代码块和 one < / strong>我的按钮:

菜单代码块:

tb = Menubutton(text = "Change pen thickness")
tb.pack(side = 'left')
tb.menu = Menu(tb, tearoff = 0)
tb["menu"] = tb.menu
thick = tb.menu
thick.add_command(label = "1", command = width1)
thick.add_command(label = "2", command = width2)
thick.add_command(label = "3", command = width3)
thick.add_command(label = "4", command = width4)
thick.add_command(label = "5", command = width5)
thick.add_command(label = "6", command = width6)
thick.add_command(label = "7", command = width7)
thick.add_command(label = "8", command = width8)
thick.add_command(label = "9", command = width9)
thick.add_command(label = "10", command = width10)
tb.pack()

按钮代码块:

change = Button(text = "Change letter dimensions", command = NewLetterDimensions)
change.pack(side = 'left')

小部件打包到左侧的事实不是问题,因为即使在我这样做之前,小部件仍然会停留在窗口的底部。唯一的区别是它们是从上到下而不是从左到右堆叠。

谷歌在寻找解决方案方面没有多大帮助,所以我转向了SO。非常感谢任何帮助!

编辑:我尝试添加master = getcanvas()并使其中一个小部件的主人像这样:

master = getcanvas()
mb = Menubutton(master, text = "Change color")

现在当我运行该程序时,它只是挂起并最终每次都崩溃。之前我曾经尝试过这个,当时我只有一个小部件,它仍然产生了相同的结果。我真的不知道还能做什么,所以非常感谢帮助。

编辑#2:我还尝试创建一个tkinter框架,我将其打包到画布底部,然后将该框架作为菜单的主框架,如下所示:

master = Frame()
master.pack(side = 'top')
mb = Menubutton(master, text = "Change color")
mb.pack(side = 'top')

然而,即使两者都设置为side = 'top',它仍然保持在屏幕的底部,只有小部件位于其他屏幕的顶部,如下所示:

New method failure

还有什么问题?

编辑#3:这是我现在根据答案建议得到的:

What I have now

1 个答案:

答案 0 :(得分:0)

您的问题是您调用几何管理器pack

的顺序

pack会将小部件添加到主窗口小部件/框架/窗口上的可用空间,并将其粘贴到指定的边缘(默认为top)。因此,在您的情况下,您首先在画布上调用pack,它会将其粘贴到窗口的顶部,然后添加的任何内容都将添加到它下面,因为它粘贴在顶部边缘,并且你的可用空间不足。

您可以通过多种方式执行您想要执行的操作,您可以更改小部件声明的顺序,首先声明最重要的内容,或者左侧,然后将其打包。这不是很漂亮。或者你可以声明你所有的小部件,并在最后留下所有pack命令,然后按照你需要的顺序调用它们,这是更好但仍然不是最好的选择。

我建议为每组元素创建不同的框架,例如菜单框架,按钮框架和画布框架,管理每个框架中元素的内部几何图形,然后管理几何图形窗口中的帧。

或者您可以使用grid代替pack来管理几何图形。请注意,不建议混合使用两者,它可能会变得混乱。