如何从scrollimage.py获取ScrollableImage类中的self.start_x与self.start_y变量?
解决方法
下面提供几种实用的方式,让你在Arayuz.py中访问ScrollableImage类的start_x和start_y变量:
方法1:提前初始化实例属性(最直接)
在scrollimage.py的ScrollableImage类的__init__方法中,先初始化self.start_x和self.start_y为默认值,这样on_button_pressed方法只是给它们赋值,外部就能直接通过实例访问:
# scrollimage.py import tkinter as tk class ScrollableImage(tk.Frame): def __init__(self, master=None, **kwargs): super().__init__(master, **kwargs) # 提前初始化实例属性 self.start_x = 0 self.start_y = 0 # 其他初始化代码... self.bind("<ButtonPress-1>", self.on_button_pressed) def on_button_pressed(self, event): # 给已初始化的属性赋值 self.start_x = event.x self.start_y = event.y # 其他方法逻辑...
然后在Arayuz.py中,创建ScrollableImage的实例后,就能直接访问这两个变量:
# Arayuz.py import tkinter as tk from scrollimage import ScrollableImage root = tk.Tk() scroll_img = ScrollableImage(root) scroll_img.pack() # 当需要获取start_x和start_y时(确保on_button_pressed已被触发过) def get_start_coords(): print(f"起始X坐标: {scroll_img.start_x}, 起始Y坐标: {scroll_img.start_y}") # 示例:添加按钮触发获取 tk.Button(root, text="获取起始坐标", command=get_start_coords).pack() root.mainloop()
方法2:通过回调传递(适合实时响应)
如果需要在on_button_pressed触发时,立刻把坐标传递给Arayuz.py的逻辑,可以给ScrollableImage类添加一个回调函数参数:
# scrollimage.py import tkinter as tk class ScrollableImage(tk.Frame): def __init__(self, master=None, coords_callback=None, **kwargs): super().__init__(master, **kwargs) self.coords_callback = coords_callback # 保存回调函数 self.bind("<ButtonPress-1>", self.on_button_pressed) def on_button_pressed(self, event): self.start_x = event.x self.start_y = event.y # 如果设置了回调,就传递坐标 if self.coords_callback: self.coords_callback(self.start_x, self.start_y) # 其他方法逻辑...
在Arayuz.py中,定义处理坐标的函数并传入:
# Arayuz.py import tkinter as tk from scrollimage import ScrollableImage def handle_start_coords(x, y): print(f"按钮按下,起始坐标: X={x}, Y={y}") # 这里可以添加你的业务逻辑,比如用x和y控制机器人 root = tk.Tk() # 创建实例时传入回调函数 scroll_img = ScrollableImage(root, coords_callback=handle_start_coords) scroll_img.pack() root.mainloop()
注意事项
- 如果用方法1,要确保
on_button_pressed已经被触发过(用户点击过组件),否则start_x和start_y会是初始化的默认值;如果担心未触发的情况,可以加个判断,比如if hasattr(scroll_img, 'start_x')。 - 两种方法都是基于实例属性的访问,因为
self代表类的实例,只要实例存在,就能访问它的属性。
内容的提问来源于stack exchange,提问作者Gökhan DOĞAN
相关产品推荐
相关产品推荐

