Файл ./project/main.py
from application.application import *
if __name__ == "__main__":
app = Application()
app.run()
Файл ./project/application/application.py
Импорт библиотеки GTK и класса окна
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
from window.window import *
класс приложения
class Application(Gtk.Application):
progname = "Programm name"
progID = "Prog.name"
def __init__(self):
Gtk.Application.__init__(self)
self.window = None
self.progname = ""
def do_startup(self):
Gtk.Application.do_startup(self)
def do_activate(self):
if not self.window:
self.window = Window(self)
self.window.set_widgets(self)
def exit(self):
self.quit()
Файл ./project/window/window.py
класс окна
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
from window.header import *
from window.content import *
class Window(Gtk.ApplicationWindow):
def __init__(self, application):
Gtk.ApplicationWindow.__init__(self, title=application.progname, application=application)
Gtk.Settings.get_default().set_property("gtk-application-prefer-dark-theme", True)
self.set_position(Gtk.WindowPosition.CENTER)
self.connect("key-release-event", self.on_key_release, application)
self.header = Header()
self.content = Content()
def set_widgets(self, application):
self.content.set_widgets(application)
self.header.set_widgets(application)
self.set_titlebar(self.header)
self.add(self.content)
self.show_all()
def set_minimize(self, widget):
self.iconify()
def on_key_release(self, widget, event, application):
ctrl = (event.state & Gdk.ModifierType.CONTROL_MASK)
if ctrl and event.keyval == Gdk.KEY_w or event.keyval == Gdk.KEY_Escape:
application.exit()
Файл ./project/window/header.py
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
class Header(Gtk.HeaderBar):
def __init__(self):
Gtk.HeaderBar.__init__(self)
self.set_show_close_button(False)
self.set_property("height-request", 40)
def set_widgets(self, application):
self.set_title(application.progname)
button = Gtk.Button.new_from_icon_name("window-close-symbolic", Gtk.IconSize.BUTTON)
button.connect("clicked", self.action_quit, application)
self.pack_end(button)
button = Gtk.Button.new_from_icon_name("window-minimize-symbolic", Gtk.IconSize.BUTTON)
button.connect("clicked", application.window.set_minimize)
self.pack_end(button)
button = Gtk.Button.new_from_icon_name("open-menu-symbolic", Gtk.IconSize.BUTTON)
button.connect("clicked", self.action_open_dialog, application)
self.pack_end(button)
def action_open_dialog(self, widget, application):
application.open_dialog()
def action_quit(self, widget, application):
application.exit()
Файл ./project/window/content.py
import gi
gi.require_version("Gtk", "3.0")
from gi.repository import Gtk
class Content(Gtk.VBox):
def __init__(self):
Gtk.VBox.__init__(self)
def set_widgets(self, application):
pass