Python Tkinter Canvas事件绑定激活错误

时间:2017-03-15 00:57:19

标签: python-3.x tkinter tkinter-canvas

我是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()

0 个答案:

没有答案