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

如何从tkinter中的不同类访问变量?

如何从tkinter中的不同类访问变量?

POPMUISE 2019-07-30 17:16:41
如何从tkinter中的不同类访问变量?我一直在搜索很多,但我仍然不知道如何从python中的不同类中访问变量。在这种情况下,我想self.v从PageOne类到PageTwo类访问变量。这是我的代码。import tkinter as tkimport smtplib TITLE_FONT = ("Helvetica", 18, "bold")class SampleApp(tk.Tk):     def __init__(self):         tk.Tk.__init__(self)         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, PageTwo):             frame = F(container, self)             self.frames[F] = frame             frame.grid(row=0, column=0, sticky="nsew")         self.show_frame(StartPage)     def show_frame(self, c):         frame = self.frames[c]         frame.tkraise()class StartPage(tk.Frame):     def __init__(self, parent, controller):         tk.Frame.__init__(self, parent)         label = tk.Label(self, text="PyMail",foreground = "Red", font=("Courier", 30, "bold"))         label.pack(side="top")         sublabel = tk.Label(self, text="Bringing you the\n the easiest way of communication",                             font=("Courier", 15))         sublabel.pack()         wallpaper = tk.PhotoImage(file='Python-logo-notext.gif')         img = tk.Label(self, image=wallpaper)         img.image = wallpaper         img.pack(side="top", expand = True)         button1 = tk.Button(self, text="Click Here to Login to your account",fg="red",                             command=lambda: controller.show_frame(PageOne))         button2 = tk.Button(self, text="Go to Page Two",                             command=lambda: controller.show_frame(PageTwo))         button2.pack(side="bottom")         button1.pack(side="bottom")class PageOne(tk.Frame):
查看完整描述

2 回答

?
Helenr

TA贡献1780条经验 获得超3个赞

这与全球框架有关。


如果在类中创建变量,它将仅存在于该函数内部。如果要将类(或函数)中的变量“转移”到全局框架,则使用global。


class firstClass():

    global my_var_first

    my_var_first = "first variable"


print(my_var_first) # This will work, because the var is in the global frame


class secondClass():

    my_var_second = "second variable"

    print(my_var_first) # This will work, as the var is in the global frame and not defined in the class


print(my_var_second) # This won't work, because there is no my_var_second in the global frame

为了可视化内存,您可以使用pythontutor,因为它将逐步显示内存的创建方式。


我希望我能帮到你!


编辑


我想我应该补充一点,如果在类/函数中定义一个与全局框架中的变量同名的变量,它将不会删除全局变量。相反,它将在自己的框架中创建一个新的(具有相同名称)。如果可用,类或函数将始终在其自己的框架中使用该变量。


x = 5

def print_variable():

    x = 3

    print(x)

print(x)

print_variable()


# OUTPUT:

# 5

# 3


查看完整回答
反对 回复 2019-07-30
  • 2 回答
  • 0 关注
  • 676 浏览
慕课专栏
更多

添加回答

举报

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