我是GUI编程和tkinter的新手。我试图设计一个带有几帧的小界面,以显示不同的信息。我已经制作了一个框架并在其中嵌入了一个画布,但是我在尝试将调整大小方法绑定到"配置"因此,当用户调整窗口大小时,画布将调整大小。我从这个question修改了resize方法(和相关的类)。
运行代码后,将在无限循环中触发事件。我觉得我必须犯一些愚蠢的错误但却找不到。我发现的一个奇怪的是,生成的Canvas对象的属性将传递的参数的高度和宽度增加4.我不确定是否导致循环,但找不到为什么会发生这种情况的任何可辨别的原因。
非常感谢任何帮助。
#class for main window
class Window(Frame):
def __init__(self, master=None):
Frame.__init__(self, master)
self.master = master
self.init_window()
#method for initializing frames, only canvas frame shown here
def init_window(self):
self.Lsidebar = Frame(self.master, bg="white", borderwidth = 3)
self.Lsidebar.grid(row = 0, column = 0, rowspan = 2)
self.Lside_canvas = ResizingCanvas(self.Lsidebar, width = 120, height = 600)
self.Lside_canvas.grid(row = 0, column = 0)
class ResizingCanvas(Canvas):
def __init__(self,parent, width, height):
Canvas.__init__(self,parent, width=width, height=height)
self.height = self.winfo_reqheight()
self.width = self.winfo_reqwidth()
self.bind("<Configure>", self.on_resize)
#method for resizing canvas
def on_resize(self, event):
self.width = event.width
self.height = event.height
self.config(width=self.width, height=self.height)
root = Tk()
#sets some initial sizes for placing frames
root.columnconfigure(0, weight=1, minsize = 120)
root.columnconfigure(1, weight=7, minsize = 500)
root.rowconfigure(0, weight=1, minsize = 400)
root.rowconfigure(1, weight=1, minsize = 200)
app = Window(root)
root.mainloop()