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

如何在不同模块中向tkinter Treeview函数传递事件与变量?

解决Tkinter Treeview事件函数移至独立模块的变量访问问题

方案1:利用事件对象的widget属性(推荐)

Tkinter事件绑定会自动传递事件对象给处理函数,该对象的widget属性就是触发事件的控件(即你的tree对象)。直接通过这个属性访问即可,无需额外传递变量:

修改Main_functions.py:

def selectItem(event):
    # 通过事件对象获取触发事件的Treeview控件
    tree = event.widget
    cur_item = tree.focus()
    print(tree.item(cur_item))

Main.py的绑定代码无需修改,保持tree.bind('<ButtonRelease-1>', Main_functions.selectItem)即可。

方案2:用Lambda表达式传递额外参数

如果需要显式传递tree对象,可以通过lambda包装事件参数和自定义参数,避免参数数量不匹配的问题:

修改Main.py的绑定代码:

tree.bind('<ButtonRelease-1>', lambda e: Main_functions.selectItem(e, tree))

修改Main_functions.py的函数,接收事件和tree两个参数:

def selectItem(event, tree):
    cur_item = tree.focus()
    print(tree.item(cur_item))

方案3:面向对象方式(适合大型项目)

将主窗口和控件封装为类,把tree作为类实例的属性,事件处理函数作为类方法,模块间变量访问会更清晰:

Main.py改为类结构:

from tkinter import *
from tkinter import ttk
import Main_functions as mf

class App:
    def __init__(self, root):
        self.root = root
        self.tree = ttk.Treeview(root, columns=("size", "modified"))
        self.tree["columns"] = ("date", "time", "loc")
        
        self.tree.column("date", width=65)
        self.tree.column("time", width=40)
        self.tree.column("loc", width=100)
        
        self.tree.heading("date", text="Date")
        self.tree.heading("time", text="Time")
        self.tree.heading("loc", text="Loc")
        # 绑定类方法作为事件处理函数
        self.tree.bind('<ButtonRelease-1>', self.on_tree_click)
        
        self.tree.insert("", "end", text="Name", values=("Date", "Time", "Loc"))
        self.tree.grid()
    
    def on_tree_click(self, event):
        # 调用模块中的函数,传入tree对象
        mf.selectItem(self.tree)

if __name__ == "__main__":
    root = Tk()
    App(root)
    root.mainloop()

Main_functions.py简化为:

def selectItem(tree):
    cur_item = tree.focus()
    print(tree.item(cur_item))

内容的提问来源于stack exchange,提问作者Honzik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 01:40:25