Python 特金特在画布底部留白

Python 特金特在画布底部留白,python,canvas,tkinter,Python,Canvas,Tkinter,我试图用Python3将对象放在tkinter[8.6]下的画布中。左上角下方超过256像素的所有内容均为空白。不知道为什么。下面是一个精简的代码,显示了我的意思: Python 3.7 如果您为根目录(即绿色)和测试帧(即红色)设置背景色 然后您将看到它不使用全窗口 如果为Test帧设置expand=True self.pack(fill=BOTH, expand=True) 然后您将看到Test使用了完整窗口,但Canvas仍然没有使用完整窗口 如果您还使用expand=True作为C

我试图用Python3将对象放在tkinter[8.6]下的画布中。左上角下方超过256像素的所有内容均为空白。不知道为什么。下面是一个精简的代码,显示了我的意思:

Python 3.7


如果您为
根目录
(即
绿色
)和
测试
帧(即
红色
)设置背景色

然后您将看到它不使用全窗口

如果为
Test
帧设置
expand=True

self.pack(fill=BOTH, expand=True)
然后您将看到
Test
使用了完整窗口,但
Canvas
仍然没有使用完整窗口

如果您还使用
expand=True
作为
Canvas

canvas.pack(fill=BOTH, expand=True)
然后您将看到它使用了完整的窗口,您可以看到256以下的绘图


完整代码:

import tkinter as tk

class Test(tk.Frame):

    def __init__(self, root):
        super().__init__()
        #self['bg'] = 'red'

        self.master.title("Canvas Test")
        self.pack(fill='both', expand=True)

        canvas = tk.Canvas(self)
        canvas.pack(fill='both', expand=True)

        corner_left = 30
        corner_upper = 230
        corner_right = corner_left + 400
        corner_bottom = corner_upper + 500
        canvas.create_rectangle(corner_left, corner_upper, corner_right, corner_bottom)

def main():

    root = tk.Tk()
    #root['bg'] = 'green'

    ex = Test(root)
    root.geometry("600x900")
    root.mainloop()

if __name__ == '__main__':
    main()

非常感谢。这是一个完美的答案,非常清楚,我需要的一切来修复我的代码。
canvas.pack(fill=BOTH, expand=True)
import tkinter as tk

class Test(tk.Frame):

    def __init__(self, root):
        super().__init__()
        #self['bg'] = 'red'

        self.master.title("Canvas Test")
        self.pack(fill='both', expand=True)

        canvas = tk.Canvas(self)
        canvas.pack(fill='both', expand=True)

        corner_left = 30
        corner_upper = 230
        corner_right = corner_left + 400
        corner_bottom = corner_upper + 500
        canvas.create_rectangle(corner_left, corner_upper, corner_right, corner_bottom)

def main():

    root = tk.Tk()
    #root['bg'] = 'green'

    ex = Test(root)
    root.geometry("600x900")
    root.mainloop()

if __name__ == '__main__':
    main()