在Tk和Python中,如何使Frame或Canvas随窗口调整大小?

3 投票
1 回答
2042 浏览
提问于 2025-04-16 18:29

我对Tk和打包(Packing)这个概念完全是新手,所以请多多包涵。这里是我的代码:

from Tkinter import *

class frm_main:

    def __init__(self, parent):
        self.frame = Frame(parent, bg="green") #green for testing
        self.frame.pack(fill="both")

        self.canvas = Canvas(self.frame, bg="black", width=1000, height=700)
        self.canvas.pack(fill="both")

root = Tk()
main_frm = frm_main(root)
root.mainloop()

我尝试了几种不同的选项和测试,发现框架(frame)和画布(canvas)在水平方向上是固定的并且可以扩展,但在垂直方向上调整大小时却留下了很多空白空间。

我该如何让框架固定在窗口的四个边上,然后让画布固定在框架的四个边上呢?我还应该使用框架吗?

1 个回答

5

在调用 pack() 的时候,把 expand = 1 设置上,这样当容器大小改变时,里面的小部件就会自动调整。

self.frame.pack(fill = "both", expand = 1)
...
self.canvas.pack(fill = "both", expand = 1)

你可以用一个框架来把一组小部件放在一起,或者加个额外的边框,但在这个例子里,其实不需要框架。

撰写回答