首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GtkOverlay隐藏GtkTextView

GtkOverlay隐藏GtkTextView
EN

Stack Overflow用户
提问于 2016-09-05 00:51:21
回答 1查看 437关注 0票数 1

我正在尝试使用Gtk开发应用程序,但我在使用GtkOverlay时遇到了问题。如果我有一个带有使用标准容器add方法添加的GtkTextViewGtkOverlay,则文本将被隐藏。但是,所有其他小部件,例如按钮,看起来都很好。更奇怪的是,只有当至少有一个小部件使用add_overlay添加时,才会出现这种行为。

代码语言:javascript
复制
#!/usr/bin/env python
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

USE_OVERLAY = False

win = Gtk.Window()
text_view = Gtk.TextView()
overlay = Gtk.Overlay()
top_button = Gtk.Button()
bottom_button = Gtk.Button()
top_container = Gtk.VBox()
bottom_container = Gtk.VBox()

overlay_str = "( USE_OVERLAY = " + str(USE_OVERLAY) + ")"
win.set_title(overlay_str)

top_button.set_label("I'm a button on top!")
bottom_button.set_label("I'm a button on bottom!")
text_view.get_buffer().set_text("This should be visible")

win.add(overlay)
overlay.add(bottom_container)
bottom_container.pack_start(bottom_button, False, False, 0)
bottom_container.pack_end(text_view, True, True, 0)
if USE_OVERLAY:
    overlay.add_overlay(top_container)
    top_container.pack_end(top_button, False, False, 0)

win.connect("delete-event", Gtk.main_quit)
overlay.show_all()

win.show_all()
Gtk.main()

我有理由相信这不是python的问题,因为实际的应用程序是使用haskell-gi编写的,但是我认为会有更多的人熟悉python。

EN

回答 1

Stack Overflow用户

发布于 2016-09-05 02:27:41

我不知道你在什么系统上运行这个例子,但它对我来说运行得很好。唯一需要注意的是,顶部按钮出现在底部按钮和TextView小部件的上方,因此我必须手动调整Window的大小才能看到文本。你可以在以下视频中看到我的情况的屏幕投射:https://youtu.be/xoAH4OuEM0E

现在,根据你真正想要的是什么,可能会有几个不同的答案。我的建议是将TextView放在ScrolledWindow中。这样,在您需要调整窗口大小之前,TextView至少是可见的。如果文本溢出可见区域,它还会产生提供滚动条的后果。

它可能看起来像这样:

代码语言:javascript
复制
import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

USE_OVERLAY = True

win = Gtk.Window()
text_view = Gtk.TextView()
overlay = Gtk.Overlay()
top_button = Gtk.Button()
bottom_button = Gtk.Button()
top_container = Gtk.VBox()
bottom_container = Gtk.VBox()

overlay_str = "( USE_OVERLAY = " + str(USE_OVERLAY) + ")"
win.set_title(overlay_str)

top_button.set_label("I'm a button on top!")
bottom_button.set_label("I'm a button on bottom!")
text_view.get_buffer().set_text("This should be visible")

# This is where the text_view is inserted in a ScrolledWindow
scrolled_window = Gtk.ScrolledWindow()     
scrolled_window.add(text_view)

win.add(overlay)
overlay.add(bottom_container)
bottom_container.pack_start(bottom_button, False, False, 0)
# The scrolled_window is inserted in the bottom_container
bottom_container.pack_end(scrolled_window, True, True, 0) 
if USE_OVERLAY:
    overlay.add_overlay(top_container)
    top_container.pack_end(top_button, False, False, 0)

win.connect("delete-event", Gtk.main_quit)
overlay.show_all()

win.show_all()
Gtk.main()

你也可以在上面的截屏上看到结果。唯一的缺点是顶部按钮不能像在脚本中那样覆盖底层。但也许这不会困扰你。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39319292

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档