浙Lt20180338 2024-07-14 17:22 采纳率: 17.6%
浏览 41

如何在tkinter库中设置输入框、按钮的圆角

如何在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()

  • 写回答

5条回答 默认 最新

  • 阿里嘎多学长 2024-07-14 17:22
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    在标准的 Tkinter 库中,没有直接的方式来设置输入框(Entry)和按钮(Button)的圆角。但是,可以通过使用 ttk 模块(Tkinter 的主题化版本)和 Style 对象来实现类似的效果。不过,标准的 ttk.Style() 并不提供设置圆角的属性。通常,设置圆角需要使用额外的库或自定义样式。

    如果你正在使用 ttkbootstrap 库,它提供了更多的样式选项,包括圆角。以下是如何使用 ttkbootstrap 设置圆角的示例代码:

    import tkinter as tk
    from ttkbootstrap import Style
    
    # 设计基本框架
    win = tk.Tk()
    win.title("用户登录")
    win.geometry("250x130")
    
    # 创建Style对象并设置主题
    style = Style(theme='pulse')
    
    # 设置输入框和按钮的圆角样式
    style.configure("TEntry", borderradius=10)  # 设置输入框圆角为10
    style.configure("TButton", borderradius=10)  # 设置按钮圆角为10
    
    # 以下为其他代码...
    

    请注意,上述代码中使用的 borderradius 属性是假设 ttkbootstrap 库支持此属性。实际上,ttkbootstrap 库可能不支持此属性,因此你可能需要查看 ttkbootstrap 的文档或源代码来确认是否可以这样使用。

    如果 ttkbootstrap 不支持设置圆角,你可能需要使用其他方法,比如 CSS 样式表或自定义绘图来实现圆角效果。但这些方法会使代码变得更加复杂,不符合你要求的“代码简短”的标准。

    如果你不使用 ttkbootstrap 或其他第三方库,并且希望保持代码简洁,那么可能需要接受 Tkinter 的默认样式,或者寻找其他简洁的解决方案。例如,你可以使用图像处理软件创建具有圆角的按钮和输入框的图像,并在 Tkinter 中使用这些图像作为按钮和输入框的背景,从而在视觉上实现圆角效果。这种方法不需要修改代码,但需要额外的图像处理工作。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月14日

悬赏问题

  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见
  • ¥15 一共有五道问题关于整数幂的运算还有房间号码 还有网络密码的解答?(语言-python)
  • ¥20 sentry如何捕获上传Android ndk 崩溃
  • ¥15 在做logistic回归模型限制性立方条图时候,不能出完整图的困难
  • ¥15 G0系列单片机HAL库中景园gc9307液晶驱动芯片无法使用硬件SPI+DMA驱动,如何解决?