Python Tkinter画布应在最初或调整大小时填充Tk()窗口,但不填充

Python Tkinter画布应在最初或调整大小时填充Tk()窗口,但不填充,python,canvas,tkinter,resize,fullscreen,Python,Canvas,Tkinter,Resize,Fullscreen,如果这是我的代码: from tkinter import * class Program: def __init__(self): self.tk = Tk() self.tk.attributes("-topmost", 1) self.canvas = Canvas(self.tk, height=500, width=500, highlightthickness=0)

如果这是我的代码:

from tkinter import *
    class Program:
        def __init__(self):
            self.tk = Tk()
            self.tk.attributes("-topmost", 1)
            self.canvas = Canvas(self.tk, height=500, width=500, highlightthickness=0)
            self.canvas.pack(fill="both", expand=1)
            self.width = 500
            self.height = 500
            self.tk.bind("<Configure>", self.resize)
            self.input = Entry(self.tk)
            self.input.pack(fill="x", expand=1)
            self.button = Button(self.tk, text="Start!", command=self.pressed)
            self.button.pack(fill="x", expand=1)
            self.pressed = 0
            self.start = time()
        def mainloop(self):
            while 1:
                self.canvas.delete("all")
                self.canvas.create_rectangle(0, 0, self.width, self.height, fill="#4dffff", width=0)
                self.tk.update()
        def pressed(self):
            self.pressed = 1
        def resize(self, event):
            self.width = event.width
            self.height = event.height
Program().mainloop()
从tkinter导入*
班级计划:
定义初始化(自):
self.tk=tk()
self.tk.attributes(“-top”,1)
self.canvas=canvas(self.tk,高度=500,宽度=500,highlightthickness=0)
self.canvas.pack(fill=“both”,expand=1)
自宽=500
自身高度=500
self.tk.bind(“,self.resize)
self.input=Entry(self.tk)
self.input.pack(fill=“x”,expand=1)
self.button=button(self.tk,text=“Start!”,command=self.pressed)
self.button.pack(fill=“x”,expand=1)
self.pressed=0
self.start=time()
def主回路(自):
而1:
self.canvas.delete(“全部”)
self.canvas.create_矩形(0,0,self.width,self.height,fill=“#4dfff”,width=0)
self.tk.update()
def按下(自):
self.pressed=1
def调整大小(自身、事件):
self.width=event.width
self.height=event.height
Program().mainloop()
如果我运行它,则会打开此窗口:

如果我随后移动窗口,它将如下所示:

一旦我调整它的大小(例如通过全屏),我就会看到这个窗口:


如果画布(我指的是它的彩色部分)覆盖了Tk()窗口的未覆盖部分,我如何更改代码以获得一致的结果?

您有很多错误和/或不必要的代码,这些代码会导致各种各样的问题。它归结为这样一个事实:您不应该创建自己的
mainloop
。使用
Tkinter
提供的方法,除非您深刻理解为什么会这样

在尝试执行任何其他操作之前,请从以下代码开始:

from tkinter import *
from time import time

class Program:
    def __init__(self):
        self.tk = Tk()
        self.tk.attributes("-topmost", 1)

        self.canvas = Canvas(self.tk, height=500, width=500, highlightthickness=0)
        self.input = Entry(self.tk)
        self.button = Button(self.tk, text="Start!", command=self.pressed)

        self.button.pack(side="bottom", fill="x", expand=0)
        self.input.pack(side="bottom", fill="x", expand=0)
        self.canvas.pack(fill="both", expand=1)

        self.pressed = 0
        self.start = time()

    def begin(self):
        self.tk.mainloop()

    def pressed(self):
        self.pressed = 1

Program().begin()

看起来像的副本。可能是的副本。您为什么要创建自己的
mainloop
?@BryanOakley否则我该怎么做?您只需调用
self.tk.mainloop()
,在这种情况下,我是在begin方法中还是在类之外添加更多代码,并且您是否必须重复(循环)键入self.tk.mainloop()?@RonLauterbach:这取决于你在说什么“进一步的代码”。一般来说,我会说不,在
begin
中不需要更多的代码。不,您不必“重复(循环)键入self.tk.mainloop()
。正如其名称所示,它已经是一个循环了。您应该只调用一次
mainloop`。