【问题标题】:How do I make a proper read-only PyGTK text entry?如何进行正确的只读 PyGTK 文本输入?
【发布时间】:2013-01-06 10:15:13
【问题描述】:

我正在尝试制作一个小部件,其中包含用户应该能够复制但不能更改的短文本输出。这是我想出的:

entry = gtk.Entry()
entry.set_property("editable", False)
entry.unset_flags(gtk.CAN_FOCUS)

它可以工作,但条目看起来仍然是可编辑的,从用户的角度来看,这看起来很糟糕。 我尝试了entry.set_sensitive(False),但这既可以防止复制,又使它看起来完全被禁用。

我想知道如何进行正确的只读文本输入,它显示为灰色但仍处于活动状态。

编辑:Here's 我正在谈论的图像,虽然不是 GTK(而且我在 GNOME 环境中工作)。

编辑 2:开始看起来似乎没有正确的方法来使用 GTK 执行此操作,如果有人可以确认这一点,我会将问题标记为已解决。

【问题讨论】:

  • 如果你在这里没有得到任何信息,你可以尝试在 PyGTK 列表上发帖。如果你从他们那里得到答案,如果你愿意,你可以在这里发布答案:)

标签: gtk pygtk


【解决方案1】:

您可以使用可选的Label 并处于换行模式(如果文本超过一行)

label = gtk.Label('multi line text')
label.set_selectable(True)
label.set_line_wrap_mode(True)

【讨论】:

  • 如果您不希望光标可见,还要设置label.set_can_focus(False)
  • 我将这样做,并将标签包装在 gtk.Frame 中。这给出了我正在寻找的结果。谢谢。
  • 如果我需要不敏感条目的内容像使用 entry2.set_buffer ( entry1.get_buffer ) 一样更改为另一个敏感条目...这不适用于标签,是吗?!
  • @ophidion 不,标签不可编辑,因此拥有缓冲区毫无意义。如果您想一次以编程方式更改它们,请定义一个函数来执行此操作,或覆盖set_label 方法...
【解决方案2】:

我通常关闭斜角框架,让它看起来更像一个标签,但仍然可以选择。

.

(图中等号右边有一个方框,这里看不太清楚,但在我的程序里面总是有文字,所以很清楚。)

我在 Glade 做这个,但是方法是GTKEntry.set_has_frame()

【讨论】:

  • 感谢您的回复。我可能会使用它,但这不是我正在寻找的解决方案。
  • @spektre - 所以你更多地考虑背景颜色而不是浮雕风格?你知道,我敢肯定我以前也做过类似的事情......
  • 准确地说,我已经链接到原始帖子中的一张图片,解释了我在说什么。
【解决方案3】:

要使其变灰,请尝试entry.modify_text()

【讨论】:

  • 这也是一种解决方法,但它不会尊重颜色主题。如果用户有一个带有深色背景和浅色文本的颜色主题,这会比未修改的文本条目看起来更糟糕。
  • 可以使用gtk.Style.lookup_color()获取用户的主题颜色。
猜你喜欢
  • 2021-10-05
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 2020-03-03
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
相关资源
最近更新 更多