-1
tkinter 및 객체 지향 프로그래밍을 처음 사용합니다.Tkinter가 부모 클래스에서 함수를 상속받을 수 없습니다.
Exception in Tkinter callback Traceback (most recent call last):
File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__
return self.func(*args) File "H:\Networ\multiwindowguiskeleton.py", line 44, in checkpassword
controller.show_frame(messagescreenpagevar)
NameError: name 'controller' is not defined
코드는 다음과 같습니다 :
라인 (44)에import tkinter as tk
class Guiroot(tk.Tk):
def __init__(self,*args,**kwargs):
tk.Tk.__init__(self,*args,**kwargs)
framecontainer = tk.Frame(self)
framecontainer.pack(side="top",fill="both",expand=True)
framecontainer.grid_rowconfigure(0,weight=1)
framecontainer.grid_columnconfigure(0,weight=1)
self.title("Vault Messenger")
self.frames = {}
passwordpagevar = passwordpage(framecontainer,self) # this is adding the different pages to a list so they can be called forward later.
messagescreenpagevar = messagescreen(framecontainer,self)
self.frames[passwordpagevar] = passwordpagevar
self.frames[messagescreenpagevar] = messagescreenpagevar
passwordpagevar.grid(row=0 , column = 0, sticky = "nsew")
messagescreenpagevar.grid(row=0 , column = 0, sticky = "nsew")
self.show_frame(passwordpagevar)
def show_frame(self, cont):
frame = self.frames[cont]
frame.tkraise()
class passwordpage(tk.Frame):
def checkpassword(self):
if self.usernamebox.get() == "admin" and self.passwordbox.get() == "password":
self.errorlabel['text'] = "Correct entry/pass"
controller.show_frame(messagescreenpagevar)
else:
self.errorlabel['text'] = "Incorrect entry/pass"
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
self.usernamelabel = tk.Label(self,text="Username:")
self.usernamebox = tk.Entry(self)
self.passwordlabel = tk.Label(self, text="Password:")
self.passwordbox = tk.Entry(self,show="*")
self.errorlabel = tk.Label(self, text = "")
self.enterdetails = tk.Button(self, text = "Enter", command = self.checkpassword)
self.usernamelabel.grid(row=0)
self.usernamebox.grid(row=1)
self.passwordlabel.grid(row=2)
self.passwordbox.grid(row=3)
self.errorlabel.grid(row=4)
self.enterdetails.grid(row=5)
class messagescreen(tk.Frame):
def __init__(self, parent, controller):
tk.Frame.__init__(self,parent)
self.userlist = tk.Listbox(self, width = 20, height = 20)
self.chatbox = tk.Text(self, width = 50,height = 20)
self.chatentry = tk.Entry(self, width = 60)
self.sendmessagebutton = tk.Button(self, text = "Send")
self.userlist.grid(row=0,column=0)
self.chatbox.grid(row=0,column=1, columnspan = 2)
self.chatentry.grid(row=1,column=1)
self.sendmessagebutton.grid(row=1,column= 2)
root = Guiroot()
root.mainloop()
'컨트롤러'가 정의되어 있지 않습니다. 그게 뭐야? 당신은 아마도'__init__'에서'self.controller = controller'를 잊었을 것입니다. –
__init 함수에서 self.controller = controller를 수행하고 self.controller.show_frame (messagescreenpagevar)을 수행하면 – user2191568
오류가 발생합니다 NameError : name 'messagescreenpagevar'is is 정의되지 않았습니다. – user2191568