from gi.repository import Gtk def init_named_controls(window, builder): ctrltype = { 'lbl': 'label', 'ent': 'entry', 'but': 'button', 'cmb': 'combo', 'tvw': 'tree', 'spi': 'spin', 'txt': 'text', 'chk': 'check', 'opt': 'radio', 'vbx': 'vbox', 'hbx': 'hbox', 'box': 'box', 'tbl': 'table', 'mnu': 'menu', 'img': 'image', 'drw': 'area', 'stk': 'stack' } for ctrl in ctrltype.values(): setattr(window, ctrl, {}) for widget in builder.get_objects(): if type(widget) in (Gtk.Adjustment, Gtk.CellRendererText, Gtk.TreeSelection): continue widgetname = Gtk.Buildable.get_name(widget) nameparts = widgetname.partition('_') if (not nameparts[0] in ctrltype.keys()) or (not nameparts[2]): continue var = getattr(window, ctrltype[nameparts[0]]) var[nameparts[2]] = widget def messagebox(messagetext, symbol=None, title=None, parent=None): if not symbol: symbol = Gtk.MessageType.INFO if parent: flags = Gtk.DialogFlags.DESTROY_WITH_PARENT else: flags = 0 md = Gtk.MessageDialog(parent=parent, flags=flags, message_type=symbol, buttons=Gtk.ButtonsType.CLOSE) md.set_markup(messagetext) if title: md.set_title(title) if not parent: md.set_position(Gtk.WindowPosition.CENTER) md.run() md.destroy() def questionbox(messagetext, symbol=None, title=None, parent=None): """ Ja/Nein-Nachfrage bei wirklich wichtigen Entscheidungen Die Entscheidung wird als Rückgabewert geliefert: True falls zugestimmt wurde, False bei Ablehnung """ if not symbol: symbol = Gtk.MessageType.QUESTION if parent: flags = Gtk.DialogFlags.DESTROY_WITH_PARENT else: flags = 0 md = Gtk.MessageDialog(parent=parent, flags=flags, message_type=symbol, buttons=Gtk.ButtonsType.YES_NO) md.set_markup(messagetext) if title: md.set_title(title) if not parent: md.set_position(Gtk.WindowPosition.CENTER) response = md.run() md.destroy() return response == Gtk.ResponseType.YES