Tkinter' Frame'对象没有属性' entry_U'

时间:2017-04-25 19:18:22

标签: python login tkinter

目前尝试使用tkinter中的框架创建登录页面并获取错误'框架'对象没有属性' entry_U'并且不知道如何解决它。我见过一些类似的问题,但没有一个答案似乎适用于我的代码:

import tkinter as tk
from tkinter import ttk

root = tk.Tk()
def Page1():
    f1.pack()
    f2.pack_forget()
    f3.pack_forget()

def Page2():
    f1.pack_forget()
    f2.pack()
    f3.pack_forget()

def Page3():
    f1.pack_forget()
    f2.pack_forget()
    f3.pack()

root.title('Frames')

f1 = tk.Frame(root)
label_1 = tk.Label(f1, text='Login')
label_1.pack()

label_U = tk.Label(f1, text="Username")
label_U.pack()
entry_U = tk.Entry(f1)
entry_U.pack()

label_P = tk.Label(f1, text="Password")
label_P.pack()
entry_P = tk.Entry(f1, show="*")
entry_P.pack()

checkbox = tk.Checkbutton(f1, text="Keep me logged in")
checkbox.pack()
#error here
username = f1.entry_U.get()
password = f1.entry_P.get()

if username == "user1" and password == "password":
    userid == True
else:
    userid == False

if userid == True:
    logbtn = tk.Button(f1, text="Login", command = Page2)
    logbtn.pack()
else:                   
    tk.messagebox.showerror("Login error", "Incorrect username or password")


but_quit = tk.Button(f1, text='Quit', command = quit)
but_quit.pack()

f2 = tk.Frame(root)
label_2 = tk.Label(f2, text='Page2')
label_2.pack()
but_3 = tk.Button(f2, text='Go to Page 3', command = Page3)
but_3.pack()
but_quit = tk.Button(f2, text='Quit', command = quit)
but_quit.pack()

f3 = tk.Frame(root)
label_3 = tk.Label(f3, text='Page3')
label_3.pack()
but_1 = tk.Button(f3, text='Go to Page 1', command = Page1)
but_1.pack()
but_quit = tk.Button(f3, text='Quit', command = quit)
but_quit.pack()

f1.pack()
root.mainloop()

我对编程很新,并且不知道我尝试做什么是可能的,但任何帮助都会受到赞赏。感谢。

2 个答案:

答案 0 :(得分:1)

尽管entry_U是主人为f1(框架)的小工具,但名称为' entry_U'只是一个全球名称,与名称' f1'没有特别的关系。删除' f1。'前缀。

答案 1 :(得分:1)

因为entry_U使用f1作为主窗口小部件并不使其成为该窗口小部件的属性。只需使用您提供的变量名称:

username = entry_U.get()

您还需要将登录代码移动到Page2功能中。