You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 23:35:30