Из-за отсутствия ответа я собираюсь объяснить свое решение:
Это кажется, что это не возможно, чтобы оба файла неизмененной, поэтому я редактирую gm_ui_support.py
(объявление о Т.К. переменных и событий обратного вызова). Каждый раз, когда я делаю изменение, которое подразумевает gm_ui_support.py
, я копирую изменения вручную.
Чтобы свести к минимуму изменения в gm_ui_support, я создаю новый файл с именем gm_control.py
, где я сохраняю статус-диктовку со всеми переменными (логическими и визуальными) и имею все доступные действия.
Изменения на gm_ui_support.py:
создать общую функцию (sync_control), которая заполняет мои Т.К. переменные с помощью Dict
При инициализации время он создает свой класс и вызывать sync_control (для получить значения по умолчанию, определенные в элементе управления)
При каждом обратном вызове я получаю параметр экстракции из события и вызывается логическое действие над классом управления (которое меняет состояние dict), после вызова sync_control, чтобы показать изменение s.
Пример:
gm_ui_support.py
def sync_control():
for k in current_gm_control.state:
gv = 'var_'+k
if gv in globals():
#print ('********** found '+gv)
if type(current_gm_control.state[k]) is list:
full="("
for v in current_gm_state.state[k]:
if len(full)>1: full=full+','
full=full+"'"+v+"'"
full=full+")"
eval("%s.set(%s)" % (gv, full))
else:
eval("%s.set('%s')" % (gv, current_gm_state.state[k]))
else:
pass
def set_Tk_var():
global current_gm_state
current_gm_control=gm_control.GM_Control()
global var_username
var_username = StringVar()
...
sync_control()
...
def on_select_project(event):
w = event.widget
index = int(w.curselection()[0])
value = w.get(index)
current_gm_control.select_project(value)
sync_state()
...