【问题标题】:GTK: How to remove focus from elements at startGTK:如何在开始时从元素中移除焦点
【发布时间】:2018-02-19 14:21:18
【问题描述】:

我在一个应用程序中添加了两个 GtkEntry,现在当我启动应用程序时,其中一个具有焦点并且看起来可以进行编辑了。不希望在开始时将焦点放在任何元素上,也不希望任何文本输入元素具有焦点或被编辑。我只是想让他们显示他们的文本,然后如果用户想要更改它们,他点击/标签到它,并输入文本,然后按 Enter 并返回相同的状态。(没有突出显示,或其他)

【问题讨论】:

  • 使用 gtk3?我认为你最好通过 css 覆盖小部件的样式。

标签: gtk


【解决方案1】:

在初始化窗口后,在你喜欢的任何小部件上使用 Gtk.Widget 的 grab_focus() 方法

【讨论】:

  • 这是我尝试的第一件事,但没有成功。我会再试一次......仍然没有工作。第一个 GtkEntry 是重点。有没有办法手动“选项卡”,就像键盘选项卡被击中一样。我可以做足够多的时间来做其他事情。不幸的是,当我手动使用选项卡时,最后一个 GtkEntry 有一个突出显示的条目。也许我可以制作一个不可见的 GtkEntry 并使用它?
  • 所以,隐藏的(好吧,不是 100%,不幸的是)GtkEntry 有效,但最后一个总是突出显示(不集中,但好像一班选择了文本。可以手动摆脱它但是;/ Gtk 的行为方式很奇怪 ;/
  • 您是否尝试过 set_property('can-focus', True) 在您想要获得初始焦点的小部件上,因为文档说它默认为 False
  • 是的,这似乎有点帮助。我注意到的是最后一个 GtkEntry 在 tabing 之后似乎保持高亮。所以,当我点击标签 N 次并且有 n
【解决方案2】:

我在第一个条目中遇到了同样的问题。 我的解决方案是添加一个虚拟条目作为第一个条目并将其隐藏,因此虽然它获得了焦点,但它是不可见的:

self.v1 = Gtk.VBox()
self.dummy_field = Gtk.Entry()  # workaround for focus of first entry
self.entry1 = Gtk.Entry('1')
self.entry2 = Gtk.Entry('2')

self.v1.pack_start(self.dummy_field, False, False, 0)
self.v1.pack_start(self.entry1, False, False, 0)
self.v1.pack_start(self.entry2, False, False, 0)

...
...

self.window.add(self.v1)
self.window.show_all()
self.dummy_field.hide() # dummy entry is hidden
Gtk.main()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2016-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多