如何在全屏上更改Gtk应用程序的布局?

2024-06-11 20:15:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Python和Gtk开发另一个图像查看器,该查看器目前非常简单:它由一个GtkWindow和一个GtkTreeView在左侧显示我的图像列表,以及一个在右侧显示实际图像的GtkImage。到目前为止,还不错。在

现在,我想全屏显示,只显示黑色背景的图像,等等

我可以看到几种方法:

  • 我可以隐藏()窗口,并显示一个大的GtkImage,但是我丢失了之前在窗口上设置的所有东西(例如信号),我隐藏了全屏显示的窗口,这有点奇怪
  • 我可以隐藏()窗口的内容,删除窗口的内容(据我所知,它只能有一个子窗口?),并在里面放一个GtkImage(退出全屏时做相反的操作)
  • 我可以尝试在我的窗口中播放容器,并在窗口全屏/退出全屏时隐藏/显示它们的内容。更确切地说,我正考虑添加另一个GtkHBox作为窗口的直接子窗口,有两个子窗口,并且只在“正常”模式下显示第一个,在全屏显示第二个。在

这一切看起来有点老套,所以我想知道什么是处理这种情况的推荐方法。谢谢!在


Tags: 方法图像内容gtk列表信号模式容器
1条回答
网友
1楼 · 发布于 2024-06-11 20:15:47

我认为实现这一点最简单的方法是用一个布局来设置所有的小部件和信号设置。然后,当你在全屏模式下切换时,你就有了一组窗口小部件,你可以使它们可见或不可见。试试下面的演示。这是一个简单的实现,当您按下F11键时,它可以进入和退出全屏。一个HBox用于制作布局,其中左侧包含一个标签,右侧包含一个图像。我在标签中填充了一些伪文本,这样它就占用了大量的空间。当你切换进入和退出全屏时,它将切换标签的可见性,从而使图像要么获得全屏不动产,要么与标签共享。我只是使用了gtk附带的一个基本图片作为演示。下面是两个屏幕截图,显示了全屏的布局。在

编码

import gtk

def keypress(win, event):
    if event.keyval == gtk.keysyms.F11:
        win.is_fullscreen = not getattr(win, 'is_fullscreen', False)
        action = win.fullscreen if win.is_fullscreen else win.unfullscreen
        action()
        label.set_visible(not win.is_fullscreen)

win = gtk.Window()
win.connect("delete-event", gtk.main_quit)
win.connect('key-press-event', keypress)
image = gtk.image_new_from_stock(gtk.STOCK_ABOUT, gtk.ICON_SIZE_DIALOG)
label = gtk.Label(('test ' * 20 + '\n') * 20)
vbox = gtk.HBox()
vbox.add(label)
vbox.add(image)
win.add(vbox)
win.show_all()
gtk.main()

普通窗口

enter image description here

全屏

enter image description here

相关问题 更多 >