如何在我的 tkinter GUI 中为选项卡定义的不同 类 之间传递数据?

How to pass a data between different classes defined for tabs in my tkinter GUI?

我在下面有这段代码,我想在 class Data 中传递变量 n 以在 class tab1 中使用并使用作为 entry1textvariable。但是,我收到此错误:

AttributeError: 'dict' object has no attribute 'n'

或者一般来说,我希望能够在选项卡之间传递变量。

import tkinter as tk
from tkinter import ttk

class Data:
    def __init__(self):
        self.n = tk.IntVar()

class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.minsize(400, 400)
        self.maxsize(400, 400)

        self.my_notebook = ttk.Notebook(self)
        self.my_notebook.pack(fill="both", expand=True)

        self.app_data = {}

        lst = [tab1, tab2, tab3]
        for N, F in enumerate(lst):
            tab = F(self.my_notebook, self.app_data)
            self.my_notebook.add(tab, text="Tab"+str(N+1))

        self.data = Data()


class tab1(tk.Frame):
    def __init__(self, parent, data):
        super().__init__(parent)
        self.data = data

        entry1 = tk.Entry(self, textvariable=data.n)
        entry1.pack()


class tab2(tk.Frame):
    def __init__(self, parent, data):
        super().__init__(parent)
        self.data = data

        label2 = tk.Label(self, text="Tab2")
        label2.pack()


class tab3(tk.Frame):
    def __init__(self, parent, data):
        super().__init__(parent)
        self.data = data

        label3 = tk.Label(self, text="Tab3")
        label3.pack()

app = SampleApp()
app.mainloop()

您永远不会创建 Data 的实例。相反,您将 self.data 初始化为一个空字典。您需要创建 Data 的实例并将其传递给选项卡。

class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        ...
        self.app_data = Data()
        ...