Python ttkbootstrap 在Mac上使用Querybox弹出输入框后Entry不能输入的问题

最近在Mac上写工具有使用到弹出输入框,且用的是ttkbootstrap,在写的过程中发现使用了Querybox的get_string()后,不管是点击关闭按钮还是Cancel和Submit按钮将弹出输入框关闭了之后,界面上的Entry居然输入不了,一开始以为被设置了readonly状态,后面经过测试发现不是这个问题,就很烦。然后发现ttk的askstring()这个弹出输入框是可以的,但是它确实没那么好看,那既然知道了它可以,就好办了。

1、使用弹出输入框之前,Entry状态

现在的Entry是可以输入的
.
.
.
正常没有调用Querybox.get_string()前的效果:
在这里插入图片描述

2、使用弹出输入框

Querybox.get_string()效果
.
.
.
在这里插入图片描述

3、关掉弹出输入框后,Entry状态

关掉之后Entry就成了只读状态,且修改成normal状态也不能输入
.
.
.
不能输入的Entry效果:
在这里插入图片描述

4、使用tkinter的askstring()

使用这个弹出输入框是可以让Entry正常输入,但是这个框的取消按钮是空白的
.
.
.
askstring()效果:
在这里插入图片描述

5、解决办法

既然askstring()可以,但是有缺陷,那我们就可以重写这个方法来解决

6、效果

使用以下例子完美解决!
效果图:
在这里插入图片描述

demo.py

import ttkbootstrap as ttk
from tkinter.simpledialog import _QueryDialog

#  编辑弹窗
class Edit(_QueryDialog):
    def __init__(self, title, prompt):
        _QueryDialog.__init__(self, title, prompt)

    def body(self, master):
        entry = _QueryDialog.body(self, master)

        return entry

    def buttonbox(self):
        box = ttk.Frame(self)

        w = ttk.Button(box, text="好了", width=10, command=self.ok, default='active')
        w.pack(side='left', padx=5, pady=5)
        w = ttk.Button(box, text="取消", width=10, command=self.cancel,bootstyle='secondary')
        w.pack(side='left', padx=5, pady=5)

        self.bind("<Return>", self.ok)
        self.bind("<Escape>", self.cancel)

        box.pack()

    def getresult(self):
        return self.entry.get()

def Change_text(text):
    """更改text内容"""
    content = Edit('输入框弹窗demo','请输入内容:')
    text.configure(text=content.result)

if __name__ == '__main__':
    root = ttk.Window(themename='flatly')

    root.title('输入框弹窗demo')
    root.geometry("250x100")

    text = ttk.Label(root,text='我是未更改的内容')
    text.pack()
    
    but = ttk.Button(root,text='点击更改',command=lambda:Change_text(text))
    but.pack()

    root.mainloop()
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只为你开心

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值