是否可以提供事件征兆?

问题描述 投票:0回答:1

我尝试创建滚动框架类,但event's >>对我来说仍然是新事物。

所以我的框架工作正常,但是当我尝试使鼠标滚轮发生事件时,出现错误提示我提供“事件”参数。我理解这一点,但我不明白我需要在此处提出哪种类型的论点。

通过快速的google搜索,我得到了一些答案,但是代码没有放在一个类中,当我尝试将其放在我的类上时,出现错误,提示我忘记给事件参数。

我读了一些我要用设置的地方将纠正该错误,但我收到另一个错误,告诉我lambda不接受任何参数,但给出了一个参数...

我不要求解决问题,如果能得到我的帮助,那么记录该活动的工作方式将得到更多帮助。或者也许有人可以向我解释它如何在类中处理它,因为我发现了一些有关事件如何工作的信息,但只是一些一般性的事情。

我的测试代码在这里:

from tkinter import Tk, Frame, Canvas, Scrollbar, Grid from tkinter import Label from tkinter.ttk import Sizegrip root = Tk() appWidth = 500 appHeight = 300 appError = "[ ERROR ] >> " class ASI: def Extend(master=None, row=0, column=0): if master != None: Grid.rowconfigure(master, row, weight=1) Grid.columnconfigure(master, column, weight=1) else: print(f"{appError}You still need to type witch frame to expend!") class ScrollFrame(Frame): def __init__(self, master, *args, **kwargs): #super().__init__(master, *args, **kwargs) super(ScrollFrame, self).__init__(master, *args, **kwargs) # Display container canvas = Canvas(self) ASI.Extend(canvas) # Scrollbar for the display container scrollbarV = Scrollbar(self, orient="vertical", command=canvas.yview) scrollbarH = Scrollbar(self, orient="horizontal", command=canvas.xview) resize = Sizegrip(self) # Frame inside the container self.frame = Frame(canvas, bg="red") ASI.Extend(self.frame) # Configure some settings # Bind the "frame" to the canvas size self.frame.bind( "<Configure>", lambda e: canvas.configure( scrollregion=canvas.bbox("all") ) ) # Place the "frame" inside the canvas on top left canvas.create_window((0,0), window=self.frame, anchor="nw") # Set scrollbars to the canvas functions canvas.configure(yscrollcommand=scrollbarV.set) canvas.configure(xscrollcommand=scrollbarH.set) # Paking canvas.grid(row=0, column=0, sticky="nesw") scrollbarV.grid(row=0, column=1, sticky="ns") scrollbarH.grid(row=1, column=0, sticky="we") resize.grid(row=1, column=1) # Events def ScrollEvent(self, event): self.canvas.yview_scroll(init(-1*(event.delta/120)), "units") def ScrollEvent_Bound(self, event): self.canvas.bind_all("<MouseWheel>", self.ScrollEvent) def ScrollEvent_UnBound(self, event): self.canvas.unbind_all("<MouseWheel>") canvas.bind("<Enter>", ScrollEvent_Bound) canvas.bind("<Leave>", ScrollEvent_UnBound) # This will solve error messages but the event will still not work #canvas.bind("<Enter>", lambda e:ScrollEvent_Bound) #canvas.bind("<Leave>", lambda e:ScrollEvent_UnBound) # This will show me same error like with not lambda #canvas.bind("<Enter>", lambda e:ScrollEvent_Bound(e)) class App: def __init__(self, master): self.master = master ASI.Extend(master) # Main App Configurations master.title("Scroll Frame") centerW = int((master.winfo_screenwidth() - appWidth) / 2) centerH = int((master.winfo_screenheight() - appHeight) / 2) master.geometry(f"{appWidth}x{appHeight}+{centerW}+{centerH}") # App Content info = ScrollFrame(master) info.grid(row=0, column=0, sticky="nesw") ASI.Extend(info) for i in range(30): if i <= 9: row = f"0{i}" else: row = i txt = f"Row: {row} // Column: 00" Label(info.frame, text=txt, bg="pink" ).grid(row=i, column=0) # Run if this is the main file opened if __name__ == "__main__": App(root) root.mainloop()

Python 3.8.1

// OS:Window
(7)我尝试创建滚动框架类,但事件对我来说仍然是新事物。因此,我的框架工作正常,但是当我尝试进行鼠标滚轮事件时,出现一个错误,我会给出“事件”参数。我...
events canvas tkinter mouseevent scrollbar
1个回答
0
投票
我正在和Google上找到的其他示例代码一起玩,所以所有问题都是宽度[。我从事件函数中删除了所有自变量,现在一切正常。
© www.soinside.com 2019 - 2024. All rights reserved.