Files
YMS/yms/gtkutils.py

72 lines
2.2 KiB
Python

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