在 tkinter 中,当 canvas 用作另一个小部件的母版时,canvas 大小设置似乎停止工作。有办法解决这个问题吗?
In tkinter, the canvas size settings seem to stop working when the canvas is used as a master for another widget. Is there a way to get around this?
所以,这是我面临的问题的简化形式:
以下代码生成一个 canvas,其大小刚好足以容纳标签,即使它被配置为 400 x 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()
如果省略最后两行,那么 canvas 就是我期望的大小(400 x 400),但它不包含标签,这是我想要的它包含。
正如我所说,这是我的问题的简化形式,我实际上想将几个小部件放入 canvas,但这种行为是我的问题的原因。有没有办法使 canvas 达到我想要的大小(以像素为单位) 和 将其用作其他小部件的母版?
你可以做的是设置根的大小window:
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 configure
和 sticky
参数将完成剩下的工作。我还不够了解 pack
。
您也可以这样做:
root = tk.Tk()
root.wm_minsize(400,400)
label = tk.Label(root, text='foo')
label.pack()
但是您将无法将 window 调整到 400x400 以下。
还有这种可能性,但我不确定它是否有效:
root = tk.Tk()
root.resizable(width=False, height=False)
label = tk.Label(canvas, text='foo')
label.pack()
所以,这是我面临的问题的简化形式:
以下代码生成一个 canvas,其大小刚好足以容纳标签,即使它被配置为 400 x 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()
如果省略最后两行,那么 canvas 就是我期望的大小(400 x 400),但它不包含标签,这是我想要的它包含。
正如我所说,这是我的问题的简化形式,我实际上想将几个小部件放入 canvas,但这种行为是我的问题的原因。有没有办法使 canvas 达到我想要的大小(以像素为单位) 和 将其用作其他小部件的母版?
你可以做的是设置根的大小window:
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 configure
和 sticky
参数将完成剩下的工作。我还不够了解 pack
。
您也可以这样做:
root = tk.Tk()
root.wm_minsize(400,400)
label = tk.Label(root, text='foo')
label.pack()
但是您将无法将 window 调整到 400x400 以下。 还有这种可能性,但我不确定它是否有效:
root = tk.Tk()
root.resizable(width=False, height=False)
label = tk.Label(canvas, text='foo')
label.pack()