帧之间的共享数据Tkinter

时间:2018-01-29 22:16:02

标签: python tkinter

我希望有人能告诉我哪里出错了。我希望能够从我的任何一个类中访问这个shared_Data字典,但是我得到了错误" AttributeError:' _tkinter.tkapp'对象没有属性' shared_Data'"当我运行脚本。我正在尝试实现此答案https://stackoverflow.com/a/33650527/7336464

中描述的内容
import tkinter as tk
from tkinter import ttk

LARGE_FONT = ("Verdana", 20)

class APTInventoryapp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        tk.Tk.iconbitmap(self, default='barcode_scanner.ico')
        tk.Tk.title(self, 'Inventory Scanning')
        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        container.grid_rowconfigure(0, weight=1)
        container.grid_columnconfigure(0, weight=1)

        self.frames = {}

        for F in (StartPage, PageOne):
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row=0, column=0, sticky='nsew')

        self.shared_Data = {'String1': tk.StringVar(),
                            'String2' : tk.StringVar(),
                            'number1' : tk.IntVar()
            }

        self.show_frame(StartPage)

    def show_frame(self, cont):
        frame = self.frames[cont]
        frame.tkraise()    

class StartPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        upcOutputLabel = ttk.Label(self, text = self.controller.shared_Data['String1'].get(), font=LARGE_FONT)
        upcOutputLabel.pack(pady=10,padx=10)
        upcEntryField = ttk.Entry(self)
        upcEntryField.focus()
        upcEntryField.pack()
        upcEnterButton = ttk.Button(self, text = 'Enter', command=print('Enter Clicked!'))
        upcEnterButton.pack()


class PageOne(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller
        mgrOutputLabel = ttk.Label(self, text = '', font=LARGE_FONT)
        mgrOutputLabel.pack(pady=10,padx=10)
        mgrbackButton = ttk.Button(self,text = 'Back to home', command=lambda: controller.show_frame(StartPage))
        mgrbackButton.pack()

app = APTInventoryapp()
app.mainloop()

1 个答案:

答案 0 :(得分:3)

在创建页面之前,您不会创建self.shared_Data,但在创建页面时使用它。应用中似乎存在其他错误,但这就是您收到此特定错误的原因。