为了账号安全,请及时绑定邮箱和手机立即绑定

在 Tkinter 中将参数向下传递给方法

在 Tkinter 中将参数向下传递给方法

有只小跳蛙 2023-07-11 14:06:36
我正在努力让我的方法正常工作。我考虑过使用lambda我为另一个问题所做的函数并且有效,但是在这里它似乎不起作用。我正在尝试将函数更改为方法,但由于某种原因,我的方法无法正常工作,因为它没有引用树。我尝试过使用一个lambda函数,尽管它不起作用。我的错误:NameError: name 'tree' is not definedException in Tkinter callbackTraceback (most recent call last):  File "/usr/lib/python3.8/tkinter/__init__.py", line 1883, in __call__    return self.func(*args)  File "/home/bitvivaz/Documents/Software Development/Python/PasswordManager/mainFrame.py", line 54, in select    print([tree.item(x) for x in tree.selection()])NameError: name 'tree' is not defined这是我的代码:import tkinter as tkimport tkinter.ttk as ttkfrom encryption import encrypted_password, decrypt_passwordimport backend as dbdef get_credentials(tree):    '''Retrieves all credentials from the database and inserts it into the tree widget'''    for row in db.show_credentials():        tree.insert("", 'end', text=row['name'], values=(            row['username'], decrypt_password(row['password'])))class MainframeApp:    def __init__(self, master=None):        # build ui        frame_main = ttk.Frame(master)        frame_main.config(height='600', width='600')        frame_main.grid()        # Creates tree widget        tree = ttk.Treeview(frame_main)        tree["columns"] = ("one", "two")        tree.column("#0")        tree.column("one")        tree.column("two")        tree.heading("#0", text="Website")        tree.heading("one", text="Username")        tree.heading("two", text="Password")        tree.grid(padx='5', pady='5', rowspan='20')        get_credentials(tree)        tree.bind("<<TreeviewSelect>>", self.select, "+")        button_add = ttk.Button(frame_main)
查看完整描述

1 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

当您使用结构时class,某些变量可跨方法使用(类或实例变量),而其他变量则不可使用(局部变量)。

在您的情况下,您需要将跨方法所需的变量定义为实例变量,即,而不是:

tree = ttk.Treeview(frame_main)

您声明:

self.tree = ttk.Treeview(frame_main)

然后您可以跨方法引用该变量作为self.tree


查看完整回答
反对 回复 2023-07-11
  • 1 回答
  • 0 关注
  • 109 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信