如何从类之外的参数函数中获取变量?

时间:2019-05-16 07:47:11

标签: python python-3.x

我正在使用tkinter库在python中为自己的项目创建GUI界面。

我在一帧上设置了一个tk.Entry来写一些文字。 我想在下一个框架中使用此信息(假设在tk.Label中很简单) 但我无法获得信息,似乎是因为这两个函数属于differents类。

试图将private_key设置为全局,但似乎覆盖了定义。 试图返回private_key,但我仍然无法访问它,因为我无法在下一个类中调用参数。 试图在下一个类中再次使用该功能,同样的问题。 试图在PVK类中设置标签,似乎也不起作用

from tkinter import *

# type and size of font
LARGE_FONT = ('MS Serif', 15)
# white writing color
FRONT_COLOR = '#ffffff'
# dark_gray background color
BACKGROUND_COLOR = '#272727'


class Bobby(Tk):

    # Used each time the function is called
    def __init__(self):
        # init tkinter
        Tk.__init__(self)

        Tk.iconbitmap(self, default='bobby.ico')
        Tk.wm_title(self, "Bobby")
        Tk.geometry(self, '500x200')

        container = 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 (PVK, Display):

            frame = f(container, self)

            self.frames[f] = frame

            frame.grid(row=0, column=0, sticky=NSEW)

        self.show_frame(Welcome)

    def show_frame(self, cont):

        frame = self.frames[cont]
        frame.tkraise()


class PVK(Frame):

    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        self.configure(background=BACKGROUND_COLOR)
        here = Label(self, text="here", font=LARGE_FONT, background=BACKGROUND_COLOR, fg=FRONT_COLOR)
        here.grid()
        self.pvk = Entry(self, show=" ")
        self.pvk.bind('<Return>', self.check)
        self.pvk.grid()

    def check(self, event):
        private_key = int(self.pvk.get()), 11413
        bobby.show_frame(Display)
        return private_key

class Display(Frame):

    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        self.configure(background=BACKGROUND_COLOR)

        #want to display it here
        Label(self, text=str(PVK.private_key)).grid()


bobby = Bobby()
bobby.mainloop()

我的期望是显示带有文本的标签,这意味着我可以使用该变量。 我目前收到未定义private_key的错误。

1 个答案:

答案 0 :(得分:0)

由于您将controller传递到__init__()的{​​{1}}中,所以您可以找到Display类的实例:

PVK

还有其他访问class PVK(Frame): def __init__(self, parent, controller): # stuff omitted def check(self, event): self.private_key = int(self.pvk.get()), 11413 # note self.private_key bobby.show_frame(Display) class Display(Frame): def __init__(self, parent, controller): Frame.__init__(self, parent) self.configure(background=BACKGROUND_COLOR) #want to display it here private_key = controller.frames[PVK].private_key Label(self, text=str(private_key)).grid() 的方式,例如PVK可以将其写回控制器:private_key