我有一个简单的代码,如果用户存在于文件中,则从文件中获取用户如果登录凭据在文件中进行了数学运算,则打开该文件的位置但是我无法通过tkinter这样做到目前为止我有完成了这个
from tkinter import *
import tkinter.messagebox as tm
import os
class LoginFrame(Frame):
def __init__(self, master):
super().__init__(master)
self.label_1 = Label(self, text="Username")
self.label_2 = Label(self, text="Password")
self.entry_1 = Entry(self)
self.entry_2 = Entry(self, show="*")
self.label_1.grid(row=0, sticky=E)
self.label_2.grid(row=1, sticky=E)
self.entry_1.grid(row=0, column=1)
self.entry_2.grid(row=1, column=1)
self.logbtn = Button(self, text="Login", command = self._login_btn_clickked)
self.logbtn.grid(columnspan=2)
self.pack()
def _login_btn_clickked(self):
#print("Clicked")
username = self.entry_1.get()
password = self.entry_2.get()
#print(username, password)
f = open("User.txt", "r")
for line in f.readlines():
us, pw = line.strip().split("|")
if (username in us) and (password in pw==password):
print ("Login successful!")
f.close()
return True
print ("Wrong username/password")
f.close()
return False
def menu():
#here's a menu that the user can access if he logged in.
users = []
f = open("User.txt", "r")
for line in f.readlines():
us,pw = line.strip().split("|")
users.append(us)
for i in users:
if (user == i):
os.startfile("F:\waleed") '''
if user=="malik":
os.system('xdg-open "/home/pi/Desktop/malik"')
if user=="john":
os.system('xdg-open "/home/pi/Desktop/john"')
'''
#here's a menu that the user can access if he logged in.
root = Tk()
lf = LoginFrame(root)
root.mainloop()
答案 0 :(得分:0)
假设您的User.txt
文件看起来像这样(将此问题包含在您的问题中是个好主意):
username_1|password1
username_2|password2
在这种情况下,您不必使用in
运算符。如果元素包含在容器中,in
运算符将返回True
,例如:
"b" in "abc" # returns True
"z" in "abc" # returns False
在您的情况下,您只需比较用户名和密码是否与==
文件中的每一行完全匹配(使用User.txt
)。
应用此更改并使用上下文管理器打开和关闭文件,_login_btn_clickked()
方法可能如下所示:
def _login_btn_clickked(self):
username = self.entry_1.get()
password = self.entry_2.get()
with open("User.txt") as f:
for line in f:
us, pw = line.strip().split("|")
if us == username and pw == password:
print ("Login successful!")
return True