GNOME 3.10 で誰でもすぐ気が付くこと。
nautilus, gnome-system-monitor 等のタイトルバーがコンテナに。
今までどおりとタッチパネルの両立を考えると上手い手段だよね。
タッチ操作では常に最大化、なのでタイトルバーにボタンを配置。
双方で別々に UI を作る必要がなくなる、違和感は最初だけだし。
メニューバーと右クリックを排除、アクティブウインドウが一画面。
アプリケーションメニューがスマホやタブレットのメニューボタン。
という考え方で UI を構築していけば勝手にタッチ対応、みたいに。
で、このタイトルバーにするにはどうするのかな。
GtkHeaderBar を作って set_titlebar() だけでいいようだ。
set_custom_title() で中心、pack_start() で左寄せにできる。
同じく GTK+ 3.10 で追加された GtkStack で Notebook みたいに使える。
GtkStackTransitionType にてアニメーションの指定まで可能。
#!/usr/bin/env python3
from gi.repository import Gtk
class Win(Gtk.Window):
"""
Python with GTK+ 3.10 new widget
GtkStack, GtkStackSwitcher, GtkHeaderBar
"""
def __init__(self):
Gtk.Window.__init__(self)
# GtkStack
stack = Gtk.Stack()
stack.set_transition_type(Gtk.StackTransitionType.SLIDE_LEFT_RIGHT)
# GtkStackSwitcher
sw = Gtk.StackSwitcher()
sw.set_stack(stack)
# page1
tv = Gtk.TextView()
buf = tv.get_buffer()
buf.set_text("This is a\nGtkTextView")
stack.add_titled(tv, "view", "view")
# page2
label = Gtk.Label("This is a\nGtkLabel")
stack.add(label)
stack.child_set_property(label, "title", "label")
# GtkHeaderBar
hbar = Gtk.HeaderBar()
hbar.set_custom_title(sw)
hbar.set_show_close_button(True)
self.set_titlebar(hbar)
self.add(stack)
self.resize(400, 200)
self.show_all()
def do_delete_event(self, event):
Gtk.main_quit()
Win()
Gtk.main()
gtk_stack_add_titled() で add と title 指定が一発。
調べると単なる gtk_container_add_with_properties() のラッパーみたい。
なので child_set_property() にて title を変更することもできる。
予想より簡単だったし今後はコレでいこうと思う。
問題は GnomeShell 以外の環境ではどういう見た目になるか…

