Source code for tkgui.binding
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Handles control binding for the TKinter GUI."""
from tkinter import END
from tkinter.ttk import Entry
__controls = {}
__lnp = None
__ui = None
[docs]def init(lnp, ui):
"""Connect to LNP and TkGui instances."""
# pylint:disable=global-statement
global __lnp, __ui
__lnp = lnp
__ui = ui
__controls.clear()
[docs]def bind(control, option, update_func=None):
"""Binds a control to an option."""
if option not in __controls:
__controls[option] = []
if update_func:
value = (control, update_func)
else:
value = control
__controls[option].append(value)
[docs]def version_has_option(field):
"""Returns True if the current DF version has the provided field."""
o = field
if not isinstance(field, str):
o = field[0]
return __lnp.settings.version_has_option(o)
[docs]def get(field):
"""
Returns the value of the control known as <field>.
If multiple controls are bound, the earliest binding is used.
"""
return __controls[field][0].get()
[docs]def update():
"""Updates configuration displays (buttons, etc.)."""
def disabled_change_entry(*args, **kwargs): # pylint: disable=unused-argument
"""Prevents entry change callbacks from being processed."""
old_change_entry = __ui.change_entry
__ui.change_entry = disabled_change_entry
for key, option in __controls.items():
try:
k = key
if not isinstance(k, str):
k = key[0]
value = getattr(__lnp.settings, k)
except KeyError:
value = ''
for entry in option:
if hasattr(entry, '__iter__'):
# Allow (control, func) tuples, etc. to customize value
control = entry[0]
value = entry[1](value)
else:
control = entry
if isinstance(control, Entry):
control.delete(0, END)
control.insert(0, value)
else:
control["text"] = (
control["text"].split(':')[0] + ': '
+ str(value))
__ui.change_entry = old_change_entry
# vim:expandtab