【问题标题】:tkinter python: How do remove the input cursor from a ttk.Entry?tkinter python:如何从 ttk.Entry 中删除输入光标?
【发布时间】:2010-11-17 15:29:57
【问题描述】:

我有一个 ttk.Entry 的实例。 用户点击它。 我有事件绑定。 根据某些情况,我希望输入光标出现并允许输入 我基本上想忽略单击并且不让输入光标出现在 ttk.Entry 中。我不想必须使用只读或禁用状态。

操作焦点无效。

【问题讨论】:

  • 你为什么不“想要使用只读或禁用状态”?了解这一点可能有助于我们给出更好的答案。
  • 他们改变了小部件的外观——这对我来说是不可接受的:-(
  • @sjjg: Entry.config(state=DISABLED) 不必更改小部件的外观。只需设置disabledbackgrounddisabledforground 的颜色以匹配backgroundforground 的颜色。
  • “光标”是指用于指示插入位置的标记还是与鼠标耦合的指针?
  • @Donal:从上下文来看,我相信他的意思是前者。

标签: python tkinter ttk


【解决方案1】:

这是一个按照你的要求做的课程。

class MyEntry(Entry):

    def disable(self):
        self.__old_insertontime = self.cget('insertontime')
        self.config(insertontime=0)
        self.bind('<Key>', lambda e: 'break')

    def enable(self):
        self.unbind('<Key>')
        if self.cget('insertontime') == 0:
            self.config(insertontime=self.__old_insertontime)

但是,由于您真正关心的是您不希望禁用的条目看起来已禁用,因此只需将disabledbackgrounddisabledforground 的颜色设置为与backgroundforground 的颜色相匹配。如果您需要将其整合到一个类中,请这样做:

class MyEntry(Entry):
    def __init__(self, *args, **kwds):
        Entry.__init__(self, *args, **kwds)
        self.config(disabledbackground=self.cget('background'))
        self.config(disabledforeground=self.cget('foreground'))

并像这样使用它:

e = MyEntry(root)
e.config(state=DISABLED) # or state=NORMAL

注意。重新发明 gui 约定时要小心。让一些看起来启用的东西被禁用可能会让用户感到困惑。所以除非你有充分的理由,否则不要改变它。

【讨论】:

  • 我使用的是 tkinter.ttk.Entry 而不是 tkinter.Entry,所以解决方案不完全是这样。不过,您修改小部件的禁用状态是正确的 - 谢谢!
  • 我正在调查 UI 问题,因此能够玩它们非常有用。
【解决方案2】:

在浏览了 ttk 文档之后,这就是诀窍:

    ttk.Style().map("TEntry",
                    foreground=[('disabled', 'black')],
                    fieldbackground=[('disabled','white')]
                    )
    widget['state'] = 'disabled'

【讨论】:

猜你喜欢
  • 2013-01-01
  • 2020-12-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-23
  • 1970-01-01
  • 1970-01-01
  • 2016-01-04
  • 1970-01-01
相关资源
最近更新 更多