【问题标题】:Authentication program认证程序
【发布时间】:2016-02-12 15:57:05
【问题描述】:

我有 2 个界面:登录和注册。

我在将用户名和密码数据保存到文本文件时出错。

我在读回数据以进行身份​​验证时遇到问题。

这是我的代码:

import Tkinter 
WindowBox = Tkinter.Tk()
WindowBox.geometry("250x200")
WindowBox.title("Welcome to E-UPSR")

getusername = Tkinter.StringVar()
getpassword = Tkinter.StringVar()

LabelName = Tkinter.Label (WindowBox, text="Username:")
LabelName.pack()
TxtBoxName = Tkinter.Entry (WindowBox, textvariable= getusername)
TxtBoxName.pack()

LabelName = Tkinter.Label (WindowBox, text="Password:")
LabelName.pack()
TxtBoxName = Tkinter.Entry (WindowBox, textvariable= getpassword)
TxtBoxName.pack()

tudent=[]

def read():
    addstudent = open ("student.txt", "w")
    addstudent.write("User ID: " + entry_box1.get())
    addstudent.write("\nUser Password: " + entry_box2.get())
    addstudent.close ()

def back():
    RegBox.withdraw()
    WindowBox.deiconify()
    return    

def register():
    WindowBox.withdraw()
    RegBox.deiconify()
    return

RegBox = Tkinter.Tk()
RegBox.geometry("250x200")
RegBox.title("register")

LabelName = Tkinter.Label (RegBox, text="Enter Username:")
LabelName.pack()
TxtBoxName = Tkinter.Entry (RegBox, textvariable= getusername)
TxtBoxName.pack()

LabelName = Tkinter.Label (RegBox, text="Enter Password:")
LabelName.pack()
TxtBoxName = Tkinter.Entry (RegBox, textvariable= getpassword)
TxtBoxName.pack()
RegBox.withdraw()

def save():
    getusername=entry_box1.get()
    getpassword=entry_box2.get()
    addstudent = open ("student.txt", "w")
    addstudent.write("Username:" + entry_box1.get())
    addstudent.write("Password: " + entry_box2.get())
    addstudent.close ()

BtnName = Tkinter.Button (RegBox, text="Back", command=back).pack()   
BtnName = Tkinter.Button (RegBox, text="Enter", command=save).pack()
BtnName = Tkinter.Button (WindowBox, text="Register", command=register).pack()
BtnName = Tkinter.Button (WindowBox, text="Proceed", command=read).pack()

WindowBox.mainloop()

【问题讨论】:

  • 您从未定义过entry_box1entry_box2,但您正试图对它们调用get()
  • 能否请您发布您收到的错误消息?谢谢。
  • 你能给我举个例子吗?
  • 欢迎来到 Stack Overflow!我已将问题编辑为可以回答。
  • 您正在创建两个根窗口。 Tkinter 的设计并非如此。如果您需要多个窗口,请创建 Toplevel 的实例。

标签: python python-2.7 python-3.x tkinter


【解决方案1】:

您没有在代码中创建entry_box1entry_box2,但您尝试在entry_box1.get()entry_box2.get() 中使用它

你必须在两个地方使用getusername 而不是entry_box1getpassword 而不是entry_box2

addstudent.write("Username:" + getusername.get())
addstudent.write("Password: " + getpassword.get())

addstudent.write("User ID: " + getusername.get())
addstudent.write("\nUser Password: " + getpassword.get())

【讨论】:

    【解决方案2】:

    正如Jkdc 所说entry_box1entry_box2 未定义,但您已为passwordusername 创建了getusernamegetpassword 变量,因此请使用getusername.get() 获取用户名和getpassword.get() 获取密码。

    def read():
        addstudent = open ("student.txt", "w")
        addstudent.write("User ID: " + getusername.get())
        addstudent.write("\nUser Password: " + getpassword.get())
        addstudent.close ()
    

    ...

    def save():
        getusername=entry_box1.get()
        getpassword=entry_box2.get()
        addstudent = open ("student.txt", "w")
        addstudent.write("Username:" + getusername.get())
        addstudent.write("Password: " + getpassword.get())
        addstudent.close ()
    

    【讨论】:

    • 谢谢很多人。我很感激
    • @newbie 随时为社区接受这个答案。
    【解决方案3】:

    第 41 和 46 行:

    TxtBoxName = Tkinter.Entry (RegBox, textvariable= getusername)
    
    TxtBoxName = Tkinter.Entry (RegBox, textvariable= getpassword)
    

    这些需要作为变量分配,在您的代码中,它们共享相同的变量名称(或者我应该说,每次您声明一个名为“TxtBoxName”的新元素时,“TxtBoxName”值都会被覆盖。原因它们仍然出现是因为您已经将它们的值打包到小部件中)。

    当您在第 56 和 57 行调用 Entry.get() 时:

    addstudent.write("Username:" + entry_box1.get())
    
    addstudent.write("Password: " + entry_box2.get())
    

    您对不存在的变量名调用 get 方法。 TxtBoxName.get() 但是会起作用,再看一遍上面的段落,你应该明白为什么它不会给你想要的效果。

    如果您解决了变量问题并且您的代码将运行良好(正如我所做的那样)。了解为什么会发生这种情况很重要,因为这是简单的 python。

    当您修复了代码后,如果您的窗口在注册完成后仍然停留,请不要惊慌,您需要添加另一个方法调用来销毁窗口。

    【讨论】:

      猜你喜欢
      • 2022-06-30
      • 2013-09-12
      • 1970-01-01
      • 1970-01-01
      • 2012-05-30
      • 1970-01-01
      • 2013-02-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多