2016-04-04 2 views
1

Я разрабатываю небольшое приложение с использованием tkinter и PAGE 4.7 для пользовательского интерфейса разработки. Я разработал свой интерфейс и сгенерировал исходный код python. Я получил два файла:как структура проекта python3/tkinter

  • gm_ui_support.py: здесь декларировать переменные Tk
  • gm_ui.py: здесь объявляю виджет для UI

Я интересно, как это файлы должны быть использованы, одна из моих целей - иметь возможность изменять пользовательский интерфейс столько раз, сколько мне нужно, чтобы воссоздать эти файлы, поэтому, если я поместил свой код внутри любого из этих файлов, каждый раз будет перезаписан.

Итак, мой вопрос:

  • Где я должен поставить свой собственный код? Мне нужно расширить gm_ui_support? Мне нужно создать 3-й класс? Я прямо на gm_ui_support?

ответ

0

Из-за отсутствия ответа я собираюсь объяснить свое решение:

Это кажется, что это не возможно, чтобы оба файла неизмененной, поэтому я редактирую 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() 
... 
Смежные вопросы