【问题标题】:Entry widget and state 'normal'条目小部件和状态“正常”
【发布时间】:2020-02-23 04:12:04
【问题描述】:

我必须在“只读”状态下使用 Entry 小部件,然后我想使用 insert 方法更改文本:为此,我知道需要将小部件置于“正常”状态,但我得到一个错误:那是“正常的”吗?

例如,

    entry = ttk.Entry(root,width=30)
    entry.insert(0,"Please enter your name")
    entry.state(['readonly'])
    entry.state(['normal'])

结果给了我:

文件“/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/tkinter/ttk.py”,第 595 行,处于状态 return self.tk.splitlist(str(self.tk.call(self._w, "state", statespec))) _tkinter.TclError: 无效的状态名称正常

【问题讨论】:

    标签: python tkinter widget


    【解决方案1】:

    令人困惑的是,ttk 小部件有两个不同的“状态”概念。一种是名为state 的配置选项,一种是名为state 的方法。配置选项是更改小部件可编辑性的简写。该方法用于获取和设置用于样式的多个内部状态。

    这两种指定状态的方式接受不同的值。 “只读”状态是对两者都有效的一种状态,但“正常”仅对配置选项有效。

    要使用state 方法,您需要传入一个stateSpec,它是一个或多个状态或否定状态的列表。例如,要在只读和非只读之间切换,您可以这样做:

    entry.state(["readonly"])
    entry.state(["!readonly"])
    

    这种指定小部件状态的方式更加灵活和细粒度,并且旨在允许复杂的样式。例如,一个小部件可以同时处于只读、禁用、无效和悬停状态。

    配置小部件是否可编辑的更简单方法是使用state 配置选项。它必须始终是字符串值“normal”、“disabled”或“readonly”之一。

    entry.configure(state="readonly")
    entry.configure(state="normal")
    

    配置选项的允许值是不言自明的。通过state 方法构建stateSpec 的值如下:

    • active - 鼠标光标在窗口小部件上,按下鼠标按钮会导致一些动作发生。 (又名“prelight”(Gnome)、“hot”(Windows)、“hover”)。
    • 禁用 - 小部件在程序控制下被禁用(又名“不可用”、“不活动”)。
    • focus - 小部件具有键盘焦点。
    • pressed - 小部件被按下(在 Motif 中也称为“武装”)。
    • selected - 勾选按钮和单选按钮等“开启”、“真”或“当前”。
    • 背景 - Windows 和 Mac 有一个“活动”或前景窗口的概念。背景状态为后台窗口中的小部件设置,而为前台窗口中的小部件清除。
    • 只读 - 小部件不应允许用户修改。
    • alternate - 一种特定于小部件的备用显示格式。例如,用于“三态”或“混合”状态的复选按钮和单选按钮,以及 -default 处于活动状态的按钮。
    • 无效 - 小部件的值无效。 (潜在用途:缩放小部件值超出范围,条目小部件值验证失败。)
    • 悬停 - 鼠标光标在小部件内。这类似于活动状态;它在一些小部件主题中使用,这些小部件除了小部件中的活动元素外,还为活动小部件提供不同的视觉反馈。

    【讨论】:

      猜你喜欢
      • 2023-03-22
      • 2021-12-15
      • 2021-06-11
      • 2021-05-03
      • 2018-09-01
      • 1970-01-01
      • 2020-01-17
      • 2021-02-16
      • 2020-10-19
      相关资源
      最近更新 更多