Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/299.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在列表中搜索StringVar_Python_List_Tkinter - Fatal编程技术网

Python 在列表中搜索StringVar

Python 在列表中搜索StringVar,python,list,tkinter,Python,List,Tkinter,我正在创建一个登录系统,并试图在出现错误消息时保留条目。我使用StringVar来存储条目,因此在销毁条目框并重新制作之后,条目仍然存在。然而,当我试图使用if语句在我拥有的用户名和密码列表中查找StringVar时,它总是说用户名不存在,而我知道它存在。关于如何保留条目而不使用StringVar或如何搜索StringVar列表,您有什么想法吗 这是我的密码: from tkinter import * class Login_sys(Frame): def __init__(self

我正在创建一个登录系统,并试图在出现错误消息时保留条目。我使用StringVar来存储条目,因此在销毁条目框并重新制作之后,条目仍然存在。然而,当我试图使用if语句在我拥有的用户名和密码列表中查找StringVar时,它总是说用户名不存在,而我知道它存在。关于如何保留条目而不使用StringVar或如何搜索StringVar列表,您有什么想法吗

这是我的密码:

from tkinter import *

class Login_sys(Frame):
    def __init__(self,master):
        super(Login_sys,self).__init__(master)
        self.userlist=['user1','user2']
        self.passlist=['pass1','pass2']
        self.grid()
        self.initial()
    def initial(self):
        self.CurrentError=('')
        self.user_E=StringVar()
        self.user_E.set('')
        self.pass_E=StringVar()
        self.pass_E.set('')
        self.title_lbl=Label(self,text='Welcome',fg='blue')
        self.title_lbl.grid(row=0,column=0,columnspan=1,sticky=W)
        self.login_bttn=Button(self,text='  Log In  ',fg='red',command=self.login)
        self.login_bttn.grid(row=1,column=0,columnspan=1,sticky=W)
        self.reg_bttn=Button(self,text='  Register  ',fg='red',command=self.register)
        self.reg_bttn.grid(row=2,column=0,columnspan=1,sticky=W)
    def login(self):
        self.title_lbl.destroy()
        self.login_bttn.destroy()
        self.reg_bttn.destroy()
        self.LI_title_lbl=Label(self,text='Log In',fg='blue')
        self.LI_title_lbl.grid(row=0,column=0,columnspan=1,sticky=W)
        self.user_lbl=Label(self,text='Username:',fg='red')
        self.user_lbl.grid(row=1,column=0,columnspan=1,sticky=W)
        self.userE=Entry(self,text=self.user_E)
        self.userE.grid(row=1,column=1,columnspan=1,sticky=W)
        self.pass_lbl=Label(self,text='Password:',fg='red')
        self.pass_lbl.grid(row=2,column=0,columnspan=1,sticky=W)
        self.passE=Entry(self,show='*')
        self.passE.grid(row=2,column=1,columnspan=1,sticky=W)
        self.Confirm_bttn=Button(self,text='Confirm',fg='blue',command=self.login_confirm)
        self.Confirm_bttn.grid(row=3,column=1,columnspan=1,sticky=W)
        self.Back_bttn=Button(self,text='Back',fg='black',command=self.login_back)
        self.Back_bttn.grid(row=3,column=0,columnspan=1,sticky=W)
        self.CurrentError_lbl=Label(self,text=self.CurrentError,fg='red')
        self.CurrentError_lbl.grid(row=4,column=0,columnspan=1,sticky=W)
    def login_back(self):
        self.LI_title_lbl.destroy()
        self.user_lbl.destroy()
        self.userE.destroy()
        self.pass_lbl.destroy()
        self.passE.destroy()
        self.Confirm_bttn.destroy()
        self.Back_bttn.destroy()
        self.CurrentError_lbl.destroy()
        self.initial()
    def login_confirm(self):
        self.user_E.set(self.userE.get())
        self.pass_E.set(self.passE.get())
        if self.user_E in self.userlist:
            if self.pass_E in self.passlist:
                if self.passlist.index(self.pass_E)==self.userlist.index(self.user_E):
                    self.logged_in()
                else:
                    self.CurrentError='The Password Entered \nis Incorrect'
                    self.Login_Error()
            else:
                self.CurrentError='The Password Entered \nis Incorrect'
                self.Login_Error()
        else:
            self.CurrentError='Username does not exist'
            self.Login_Error()
    def Login_Error(self):
        self.LI_title_lbl.destroy()
        self.user_lbl.destroy()
        self.userE.destroy()
        self.pass_lbl.destroy()
        self.passE.destroy()
        self.Confirm_bttn.destroy()
        self.Back_bttn.destroy()
        self.CurrentError_lbl.destroy()
        self.login()
您需要替换:

        if self.user_E in self.userlist:
            if self.pass_E in self.passlist:
与:


As
self.userlist
self.passlist
是字符串对象列表,而
self.user\E
self.pass\E
StringVar
对象,如果要查看字符串对象列表中包含的字符串,必须首先将其转换为字符串。

您要查找的是列表中的StringVar本身,而不是StringVar所包含的文本(通过
.get()
检索)。无论如何,您的代码中没有任何东西从StringVars的使用中受益。我使用StringVars的唯一原因是在按下确认按钮时将文本保留在输入框中。您可以同样轻松地将文本保留在普通Python变量中。您需要特殊Tkinter变量类型的唯一时间是针对某些小部件的
textvariable=
或类似选项,它允许小部件状态直接绑定到变量(Python变量不支持这一点)。
        if self.user_E.get() in self.userlist:
            if self.pass_E.get() in self.passlist: