在tkinter中,当画布用作另一个窗口小部件的主窗口时,画布大小设置似乎停止工作。有办法解决这个问题吗?

时间:2015-06-30 18:31:39

标签: python tkinter tkinter-canvas

所以,这是我面临的问题的简化形式:

以下代码生成一个画布,其大小足以容纳标签,即使它被配置为400乘400

import tkinter as tk
root = tk.Tk()

canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()

label = tk.Label(canvas, text='foo')
label.pack()

如果省略最后两行,那么画布的大小与我期望的一样(400乘400),但它不包含标签,这是我希望它包含的内容。

正如我所说的,这是我问题的一种简化形式,我实际上想把几个小部件放到画布上,但这种行为是我问题的原因。有没有办法让画布达到我想要的大小(以像素为单位)将它用作其他小部件的主控制器?

2 个答案:

答案 0 :(得分:1)

您可以做的是设置根窗口的大小:

import tkinter as tk
root = tk.Tk()
root.geometry('400x400')
canvas = tk.Canvas(root)
canvas.pack()

label = tk.Label(canvas, text='foo')
label.pack()

root.mainloop()

如果您可以使用grid方法,则使用row/column configuresticky参数将执行剩余的工作。我不太了解pack

答案 1 :(得分:1)

你也可以这样做:

root = tk.Tk()
root.wm_minsize(400,400)
label = tk.Label(root, text='foo')
label.pack()

但是你会失去在400x400下调整窗口大小的能力。 还有这种可能性,但我不确定它是否有效:

root = tk.Tk()
root.resizable(width=False, height=False)
label = tk.Label(canvas, text='foo')
label.pack()