【问题标题】:Keeping the Insertion Cursor on a readonly Tkinter Entry将插入光标保持在只读 Tkinter 条目上
【发布时间】:2019-01-22 04:11:08
【问题描述】:

我在我的 python 代码中使用 tkinter 模块为我正在创建的一个简单应用程序创建我的 gui。我想知道即使我的条目小部件上的状态设置为“只读”,是否可以保持 插入光标 可见。我希望用户仍能看到插入光标在文本中的位置,但不能直接使用键盘编辑文本。


注意:

当我说插入光标时,我指的不是普通的鼠标光标/指针,而是显示在您可以编辑的文本上的闪烁条。我不确定它的正确名称是什么......下面是我的意思的一个例子(条目中的黑条)


我尝试在 Entry 小部件中设置 'insertwidth' 和其他 insertion cursor 配置选项,以查看光标是否可能只是隐藏但不起作用。

感谢任何帮助。

谢谢!

【问题讨论】:

    标签: python python-3.x tkinter tkinter-entry


    【解决方案1】:

    我会建议你禁用Entry 并更改它的disabledbackground。示例:

    entry.config(disabledbackground ="white",state="disabled")
    

    所以,假设您使用的是python 3,您的代码可以是:

    from tkinter import *
    root = Tk()
    ent = Entry(root)
    ent.config(disabledbackground ="white",state="disabled")
    ent.place(x=0,y=0)
    mainloop()
    

    您的条目将如下所示:

    编辑:

    由于问题已编辑,因此我建议您使用bind。与@fhdrsdg 的回答不同,您可以更轻松地使用绑定函数:

    ent.bind("<Key>", "pass")
    

    所以,你可以说你的完整代码是:

    from tkinter import *
    root = Tk()
    ent = Entry(root)
    ent.bind("<Key>", "pass")
    ent.pack()
    mainloop()
    

    这是截图:

    【讨论】:

    • 是的,这会使背景看起来正常,但问题是当状态为“禁用”或“只读”时,插入光标不显示。我想知道是否可以强制插入光标甚至在这些状态下显示。不过,上述答案为我的问题提供了另一种解决方案。
    • @SamuelT 检查这张图片。它非常简单。您可以尝试运行代码。
    • 我认为你不太明白我的意思。抱歉,我的解释不是很好:) 当我说插入光标时,我的意思是输入小部件中的黑条。查看我编辑的问题。
    • 除了更简单的代码之外,使用“pass”而不是“break”有什么优势吗?我想我会使用“break”方法,因为我可以从函数中返回它来停止特定的按键。还是谢谢。
    【解决方案2】:

    您可以阻止小部件上的所有键盘事件,而不是将条目小部件设置为只读,这样就无法输入:

    entry.bind("<Key>", lambda e: "break")
    

    【讨论】:

    • 谢谢。这很好用。这也意味着如果我不想显示该键,我仍然可以将函数绑定到按键并在函数中返回“break”。
    • 是的,返回 "break" 告诉 tkinter 停止处理事件,因此事件的正常操作(例如,当您按下 a 键时插入 a)不会执行.
    猜你喜欢
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多