Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在全屏上更改Gtk应用程序的布局?_Python_User Interface_Gtk_Pygobject - Fatal编程技术网

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

Python 如何在全屏上更改Gtk应用程序的布局?,python,user-interface,gtk,pygobject,Python,User Interface,Gtk,Pygobject,我正在使用Python和Gtk开发另一个图像查看器,该查看器目前非常简单:它由一个GtkWindow组成,左侧显示我的图像列表,右侧显示实际图像。到目前为止,一切顺利 现在,我想全屏显示,只显示黑色背景的图像,等等 我可以看到几种方法: 我可以隐藏()窗口,并显示一个大的GtkImage,但是我丢失了以前在窗口上设置的所有东西(例如信号),我隐藏了全屏显示的窗口,这有点奇怪 我可以隐藏()窗口的内容,删除窗口的内容(据我所知,它只能有一个子窗口),然后在里面放一个GtkImage(在退出全屏时

我正在使用Python和Gtk开发另一个图像查看器,该查看器目前非常简单:它由一个
GtkWindow
组成,左侧显示我的图像列表,右侧显示实际图像。到目前为止,一切顺利

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

我可以看到几种方法:

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

这一切似乎都有点老套,所以我想知道什么是处理这种情况的推荐方法。谢谢

我认为实现这一点的最简单方法是在所有小部件设置和信号设置中使用一个布局。然后,当您切换到全屏和全屏时,您有一组小部件,可以使其可见,也可以使其不可见。尝试下面的演示。这是一个简单的实现,当你按下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()
正常窗口

全屏


好的,读了我们的文章,我才意识到我只有3个小部件/容器可以全屏隐藏/显示。所以,只要在我改变模式时切换它们的可见性,就像你在例子中所做的那样,就足够了。。。