如何在tkinter库中设置输入框、按钮的圆角?要求代码越简短越好。
源代码:
#设计基本框架
import tkinter as tk
import webbrowser
from tkinter import messagebox
import pickle
from ttkbootstrap import Style # type: ignore
win=tk.Tk()
win.title("用户登录")
win.geometry("250x130")
#-----功能代码开始-----
style = Style()
style.theme_use('pulse')
#--设计功能函数--
#设置变量
var_Name=tk.StringVar()
var_Name.set("")
var_Pwd=tk.StringVar()
var_Pwd.set("")
#按钮处理函数
def login():
try:
filename = "c.pkl"
with open(filename, 'rb') as f: # 使用 with 语句来自动关闭文件
d = pickle.load(f) # 从文件中加载数据
except FileNotFoundError:
tk.messagebox.showwarning(title="用户登录",message=("找不到源文件,请添加密码!!!"))
return
except Exception as e:
if not isinstance(e,FileNotFoundError):
tk.messagebox.showerror(title="用户登录",message=("发现错误:",e,"请询问管理员!!!"))
name=var_Name.get()
pwd=var_Pwd.get()
if name=="admin" and pwd==d:
tk.messagebox.showinfo(title="用户登录",message="成功!")
webbrowser.open("https://www.microsoft.com/zh-cn", new=0, autoraise=True)
else:
tk.messagebox.showinfo(title="用户登录",message="用户名或密码错误!")
def cancel():
var_Name.set("")
var_Pwd.set("")
def _q():
win.quit()
def _a():
s=tk.Toplevel(win)
s.title("用户登录")
s.geometry("250x130")
var_a = tk.StringVar()
var_b = tk.StringVar()
var_c = tk.StringVar()
laba = tk.Label(s,text="旧密码",width=80)
labb = tk.Label(s,text="新密码",width=80)
labc = tk.Label(s,text="重新输入新密码",width=80)
enta = tk.Entry(s,show="*",width=100,textvariable=var_a)
entb = tk.Entry(s,show="*",width=100,textvariable=var_b)
entc = tk.Entry(s,show="*",width=100,textvariable=var_c)
def _c():
try:
filename = "c.pkl"
with open(filename, 'rb') as f:
d = pickle.load(f) # 确保这里读取的d是字符串类型的密码
except FileNotFoundError:
tk.messagebox.showinfo(title="用户登录",message="找不到源文件,请添加密码!!!")
except Exception as e:
if not isinstance(e, FileNotFoundError):
tk.messagebox.showinfo(title="用户登录",message=("发现错误:",e,"请询问管理员!!!"))
a = var_a.get()
b = var_b.get()
c = var_c.get()
if a == d and b==c: # 检查旧密码是否正确
with open(filename, 'wb') as f:
pickle.dump(b, f) # 将新密码写入文件
tk.messagebox.showinfo(title="用户登录", message="密码更改成功!")
elif b!=c:
tk.messagebox.showinfo(title="用户登录", message="新密码不同,更改失败!")
else:
tk.messagebox.showinfo(title="用户登录", message="旧密码不正确,更改失败!")
buta = tk.Button(s,text="确定",command=_c)
laba.place(x=20,y=10,width=80,height=20)
labb.place(x=20,y=40,width=80,height=20)
labc.place(x=20,y=70,width=80,height=20)
enta.place(x=120,y=10,width=80,height=20)
entb.place(x=120,y=40,width=80,height=20)
entc.place(x=120,y=70,width=80,height=20)
buta.place(x=30,y=100,width=50,height=20)
# 首先,为每个输入框设置一个特定的键绑定,以便在按下回车键时移动焦点
enta.bind("<Return>", lambda event:entb.focus_set())
entb.bind("<Return>", lambda event:entc.focus_set())
entc.bind("<Return>", lambda event: _c())
# 确保在初始化时将焦点设置到第一个输入框
enta.focus_set()
# --登录窗口各组件设计--
#设计两个提示标签
labname=tk.Label(win,text="账号",width=80)
labpwd=tk.Label(win,text="密码:",width=80)
#设计两个输入框
entname=tk.Entry(win,width=100,textvariable=var_Name)
entpwd=tk.Entry(win,show="*",width=100,textvariable=var_Pwd)
#设计四个按钮
but_Ok=tk.Button(win,text="登录",command=login)
but_Cancel=tk.Button(win,text="重置",command=cancel)
but_q=tk.Button(win,text="退出",command=_q)
but_g=tk.Button(win,text='更改密码',command=_a)
#--登录窗口各组件布局--
labname.place(x=20,y=10,width=80,height = 20)
labpwd.place(x=20,y=40,width=80,height = 20)
entname.place(x=120,y=10,width=80,height = 20)
entpwd.place(x=120,y=40,width=80,height = 20)
but_Ok.place(x=30,y=80,width=50,height = 20)
but_Cancel.place(x=100,y=80,width=50,height = 20)
but_q.place(x=170,y=80,width=50,height = 20)
but_g.place(x=170,y=100,width=50,height = 20)
# ---------分界线---------
# 为每个输入框设置一个特定的键绑定,以便在按下回车键时移动焦点
entname.bind("<Return>", lambda event: entpwd.focus_set())
entpwd.bind("<Return>", lambda event:login())
# 确保在初始化时将焦点设置到第一个输入框
entname.focus_set()
#-----功能代码结束-----
win.mainloop()