代码分析
- 引入tkinter库,并从中导入
messagebox
模块。 read_users()
函数用于读取存储用户信息的文本文件"users.txt"。它打开文件并逐行读取,将每行的用户名和密码以空格分隔后存储在一个列表中,最后返回该列表。login(username, password)
函数用于验证用户输入的用户名和密码是否与已存储的用户信息匹配。它调用read_users()
函数获取所有用户信息,并遍历该列表。如果找到匹配的用户名和密码,返回True;否则返回False。on_login_click()
函数是登录按钮的回调函数。它首先获取用户输入的用户名和密码,然后进行非空检查。如果用户名或密码为空,将在界面显示"用户名或密码不能为空!"的错误提示信息。否则,调用login()
函数进行验证。如果验证通过,弹出一个登录成功的消息框,并清空之前可能存在的错误提示信息;否则,在界面上显示"用户名或密码错误"的提示信息。exit()
函数是退出按钮的回调函数。它调用root.destroy()
方法销毁GUI窗口,结束程序运行。- 创建一个名为"登录界面"的GUI窗口对象
root
。 - 创建一个欢迎标签
welcome_label
,设置其文本为"欢迎登录系统",使用Helvetica字体,字号为16,并将其放置在第0行、第0和1列。 - 创建用户名标签
name
、用户名输入框userid
、密码标签ps
、密码输入框userps
,并使用网格布局放置在相应的位置。 - 创建登录按钮
lobutton
,设置其文本为"登录",并将回调函数设置为on_login_click()
。 - 创建退出按钮
exbutton
,设置其文本为"退出",并将回调函数设置为exit()
。 - 创建用于显示验证结果的标签
rebutton
,使用result_var
变量绑定该标签的文本内容。 - 使用网格布局将上述部件放置在相应的位置。
- 调用
root.mainloop()
进入事件循环,等待用户交互。
import tkinter as tk
from tkinter import messagebox
def read_users():
users = []
with open("users.txt", "r") as file:
for line in file:
user_info = line.strip().split(' ')
users.append(user_info)
return users
def login(username, password):
users = read_users()
for user in users:
if user[0] == username:
if user[1] == password:
return True
else:
return False
return False
def on_login_click():
username = userid.get()
password = userps.get()
if not username or not password:
result_var.set("用户名或密码不能为空!")
else:
if login(username, password):
messagebox.showinfo("登录成功", "登录成功!")
result_var.set("") # Clear any previous error message
else:
result_var.set("用户名或密码错误")
def exit():
root.destroy()
root = tk.Tk()
root.title("登录界面")
welcome_label = tk.Label(root, text="欢迎登录系统", font=("Helvetica", 16))
welcome_label.grid(row=0, column=0, columnspan=2, pady=10)
name = tk.Label(root, text="用户名:")
userid = tk.Entry(root)
ps = tk.Label(root, text="密码:")
userps = tk.Entry(root, show="*")
lobutton = tk.Button(root, text="登录", command=on_login_click)
exbutton = tk.Button(root, text="退出", command=exit)
# 记录字符串的,用于验证结果怎么样,我可以使用遍历来查找
result_var = tk.StringVar()
rebutton = tk.Label(root, textvariable=result_var)
name.grid(row=2, column=0, padx=10, pady=5, sticky=tk.E)
userid.grid(row=2, column=1, padx=10, pady=5)
ps.grid(row=3, column=0, padx=10, pady=5, sticky=tk.E)
userps.grid(row=3, column=1, padx=10, pady=5)
lobutton.grid(row=4, column=0, padx=5, pady=10, sticky=tk.SW)
exbutton.grid(row=4, column=1, padx=5, pady=10, sticky=tk.SE)
rebutton.grid(row=5, column=0, columnspan=2, pady=5)
root.mainloop()
分析
- 首先导入了
tkinter
库,用于创建GUI界面。 - 创建了一个名为
get_movie_info()
的函数,用于获取豆瓣电影Top250的电影信息。该函数使用requests
库发送HTTP GET请求,并通过解析返回的HTML内容使用BeautifulSoup
类提取电影名称、评分和评价人数。最后返回包含电影信息的列表。 - 创建了一个名为
save_to_csv()
的函数,用于将电影信息保存到CSV文件中。该函数使用csv
库打开指定文件并创建一个CSV写入器,然后逐行写入电影信息。 - 在主程序中,定义了一个名为
url
的变量,存储要爬取的豆瓣电影Top250页面的URL。 - 创建了一个名为
root
的窗口对象,并设置了窗口标题和大小。 - 创建了一个名为
movies_text
的文本框,用于显示电影信息。 - 创建了一个名为
get_movies_button
的按钮,用于触发获取电影信息的操作。点击按钮后,调用get_movie_info()
函数获取电影信息,并将其显示在movies_text
文本框中。 - 创建了一个名为
save_movies_button
的按钮,用于触发保存电影信息的操作。点击按钮后,调用save_to_csv()
函数将电影信息保存到名为"top250.csv"的CSV文件中。 - 使用
grid()
方法将上述部件放置在窗口中的相应位置。 - 调用
root.mainloop()
进入GUI界面的事件循环,等待用户交互。
import tkinter as tk
from tkinter import messagebox
def read_users():
with open("users.txt", "r") as file:
lines = file.readlines()
users = [line.strip().split(' ') for line in lines]
return users
def register(username, password, confirm_password):
if not username or not password or not confirm_password:
return "用户名或密码不能为空!"
if password != confirm_password:
return "两次密码不一致!"
users = read_users()
for user in users:
if user[0] == username:
return "用户名已存在!"
with open("users.txt", "a") as file:
file.write(f"{username} {password}\n")
return "注册成功"
def on_register_click():
username = entry_username.get()
password = entry_password.get()
confirm_password = entry_confirm_password.get()
result = register(username, password, confirm_password)
result_var.set(result)
def on_exit_click():
root.destroy()
root = tk.Tk()
root.title("注册界面")
label_username = tk.Label(root, text="用户名:")
entry_username = tk.Entry(root)
label_password = tk.Label(root, text="密码:")
entry_password = tk.Entry(root, show="*")
label_confirm_password = tk.Label(root, text="确认密码:")
entry_confirm_password = tk.Entry(root, show="*")
register_button = tk.Button(root, text="注册", command=on_register_click)
exit_button = tk.Button(root, text="退出", command=on_exit_click)
result_var = tk.StringVar()
result_label = tk.Label(root, textvariable=result_var)
label_username.grid(row=0, column=0, padx=10, pady=5, sticky=tk.E)
entry_username.grid(row=0, column=1, padx=10, pady=5)
label_password.grid(row=1, column=0, padx=10, pady=5, sticky=tk.E)
entry_password.grid(row=1, column=1, padx=10, pady=5)
label_confirm_password.grid(row=2, column=0, padx=10, pady=5, sticky=tk.E)
entry_confirm_password.grid(row=2, column=1, padx=10, pady=5)
register_button.grid(row=3, column=0, padx=5, pady=10, sticky=tk.SW)
exit_button.grid(row=3, column=1, padx=5, pady=10, sticky=tk.SE)
result_label.grid(row=4, column=0, columnspan=2, pady=5)
root.mainloop()