基本上,我有一个程序可以制作两个单独的帧。当用户单击“登录”时,我要保存用户输入的内容,并在其他框架的类中使用它们。但是,我不知道如何继承这些。
import tkinter as tk
import tkinter.messagebox as msgbox
class emailCore(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.title("Email Prime")
self.geometry("800x480")
self.resizable(0, 0)
self.config(bg="white")
self.columnconfigure(0, weight=1)
self.windowFrame = tk.Frame(self)
self.windowFrame.pack(side="top", fill="both", expand=True)
self.windowFrame.grid_rowconfigure(0, weight=1)
self.windowFrame.grid_columnconfigure(0, weight=1)
frame = StartPage(self.windowFrame, self)
frame.grid(row=0, column=0, sticky="nsew")
class StartPage(tk.Frame, emailCore):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
self.emaildict = {"GMail":"Smtp.gmail.com", "Yahoo":"Mail.yahoo.com", "Outlook":"Smtp.live.com"}
self.emailstring = tk.StringVar()
self.emailstring.set("GMail")
self.email = tk.OptionMenu(self, self.emailstring, "GMail", "Yahoo", "Outlook")
self.email.grid(column=1, row=1)
accLabel = tk.Label(self, text="Emailaddress")
accLabel.grid(column=1, row=2, pady=5)
pwLabel = tk.Label(self, text="Lösenord")
pwLabel.grid(column=1, row=3)
self.accEntry = tk.Entry(self)
self.accEntry.grid(column=2, row=2, ipadx=15, ipady=3)
self.pwEntry = tk.Entry(self, show="*")
self.pwEntry.grid(column=2, row=3, ipadx=15, ipady=3)
self.loginButton = tk.Button(self, text="Logga in", command=self.sendpagemail)
self.loginButton.grid(column=1, row=4, pady=5)
def sendpagemail(self):
self.acctest = str(self.accEntry.get())
self.pwtest = str(self.pwEntry.get())
self.emailtest = str(self.emailstring.get())
frame = SendPage(s.windowFrame, self)
frame.grid(row=0, column=0, sticky="nsew")
class SendPage(StartPage):
def __init__(self, parent, controller):
tk.Frame.__init__(self, parent)
print(StartPage.acctest) # Here is where I want to print the variable I created in the method sendmailpage inside the class StartPage
ToLabel = tk.Label(self, text="To: ")
ToLabel.grid(column=1, row=1, sticky="w")
self.ToEntry = tk.Entry(self)
self.ToEntry.grid(column=2, row=1, sticky="w", ipadx=15, ipady=3)
SubjectLabel = tk.Label(self, text="Subject:")
SubjectLabel.grid(column=1, row=2, sticky="w")
self.SubjectEntry = tk.Entry(self)
self.SubjectEntry.grid(column=2, row=2, sticky="w", ipadx=15, ipady=3)
TextBoxLabel = tk.Label(self, text="Mail: ")
TextBoxLabel.grid(column=1, row=3)
self.TextBoxEntry = tk.Text(self)
self.TextBoxEntry.grid(column=2, row=3)
sendButton = tk.Button(self, text="Skicka")
sendButton.grid(column=2, row=4, sticky="w")
if __name__ == '__main__':
s = emailCore()
s.mainloop()
基本上,我希望第print(StartPage.acctest)
行可以访问分配给第一堂课的任何考试。
答案 0 :(得分:0)
执行此行时:
frame = SendPage(s.windowFrame, self)
您正在调用函数SendPage.__init__
,该函数的声明如下:
def __init__(self, parent, controller):
因此,在调用中被命名为“ s.windowFrame”的对象在函数中被命名为“ parent”。在调用中被命名为“ self”的对象在函数中被命名为“ controller”。它们是相同的对象,只是名称不同。
在调用中以“ self.acctest”命名的变量将在函数中由“ controller.acctest”命名。这是因为调用中的“自我”在函数中被命名为“控制器”。这是Python工作方式的基础。它们是同一对象,因此您可以使用“。”访问该对象的变量。符号。
将打印对帐单更改为:
print(controller.acctest)
我看到您的程序还有其他问题,但这应该可以使您继续前进。