6

Python と Gtk を使用して別の画像ビューアーを開発していますが、ビューアーは現在非常にシンプルです。左側に画像のリストを表示する とGtkWindow、右側に実際の画像を表示する で構成されています。ここまでは順調ですね。GtkTreeViewGtkImage

今、私は全画面表示にして、黒い背景などの画像だけを表示したいと思います.

これを行ういくつかの方法を見ることができます:

  • ウィンドウを hide() して、GtkImage代わりに大きなウィンドウを表示することはできますが、以前にウィンドウに設定したすべてのもの (シグナルなど) が失われ、全画面表示になるウィンドウが非表示になっています。変;
  • ウィンドウのコンテンツを hide() して、ウィンドウのコンテンツを削除し (私の知る限り、子は 1 つだけですか?)、GtkImage代わりに a を入れます (フルスクリーンを終了するときは逆を行います)。
  • ウィンドウ内のコンテナーを操作して、ウィンドウが全画面表示または全画面表示を終了するときに、コンテナーのコンテンツを非表示/表示することができます。より正確にGtkHBoxは、ウィンドウの直接の子として別の子を追加し、2 つの子を追加し、最初の 1 つだけを「通常」モードで表示し、2 つ目だけをフルスクリーンで表示することを考えていました。

それはすべて少しハックに思えるので、この種の状況を処理するための推奨される方法は何だろうか. ありがとう!

4

1 に答える 1

6

これを実装する最も簡単な方法は、すべてのウィジェットのセットアップとシグナルのセットアップを 1 つのレイアウトにすることだと思います。次に、フルスクリーンのオンとオフを切り替えると、表示および非表示にする一連のウィジェットがあります。以下のデモをお試しください。F11を押すとフルスクリーンに出入りするシンプルな実装です。HBox は、左側にラベル、右側に画像を含むレイアウトを作成するために使用されます。かなりのスペースを占めるように、ラベルにダミーのテキストを入力しました。フルスクリーンのオンとオフを切り替えると、ラベルの表示が切り替わり、画像がフルスクリーンの領域を占めるか、ラベルと共有するようになります。デモンストレーションの目的で、gtk に付属しているストック イメージの 1 つを使用しました。

コード

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()

通常のウィンドウ

ここに画像の説明を入力

全画面表示

ここに画像の説明を入力

于 2012-12-01T17:34:59.587 に答える