如何构建python3 / tkinter项目

时间:2016-04-04 09:44:30

标签: python-3.x tkinter

我正在使用tkinter和PAGE 4.7为设计UI开发一个小应用程序。 我设计了我的界面并生成了python源代码。我有两个文件:

  • gm_ui_support.py:此处声明tk变量
  • gm_ui.py:此处为UI
  • 声明小部件

我想知道这些文件应该如何使用,我的目标之一是能够多次更改UI,因为我需要重新创建这些文件,所以如果我把我的代码放在任何这些文件中每次都被覆盖。

所以,我的问题是:

  • 我必须把自己的代码放在哪里?我必须扩展gm_ui_support吗?我要创建一个第3类?我直接在gm_ui_support?

1 个答案:

答案 0 :(得分:0)

由于缺乏答案,我将解释我的解决方案:

似乎不可能保持两个文件不被修改,所以我编辑gm_ui_support.py(tk变量和事件回调的声明)。每次我进行暗示gm_ui_support.py的更改时,我都会手动复制更改。

为了最大限度地减少对gm_ui_support的更改,我创建了一个名为gm_control.py的新文件,其中我保存了一个包含所有变量(逻辑和可视)的状态字典,并具有所有可用的操作。

gm_ui_support.py上的更改:

  • 我创建了一个使用dict填充我的tk变量的通用函数(sync_control)

  • 在初始化时,它会创建我的类并调用sync_control(以获取在控件中定义的默认值)

  • 在每个回调中,我从事件中获取extract参数,并在调用sync_control以显示更改后,在控件类(更改状态字典)上调用逻辑操作。

样品:

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()
...