Python 3.x 如何构建python3/tkinter项目

Python 3.x 如何构建python3/tkinter项目,python-3.x,tkinter,Python 3.x,Tkinter,我正在使用tkinter和第4.7页为设计UI开发一个小应用程序。 我设计了我的接口并生成了python源代码。我有两个文件: gm_ui_support.py:这里声明tk变量 gm_ui.py:这里为ui声明小部件 我想知道这些文件应该如何使用,我的目标之一是能够在需要重新创建这些文件时多次更改UI,因此如果我将代码放入其中,每次都会覆盖这些文件 所以,我的问题是: 我必须把自己的代码放在哪里?我必须扩展gm_ui_支持?我必须创建第三个类?我直接在gm_ui_支持部门工作 由于缺乏答

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

  • gm_ui_support.py:这里声明tk变量
  • gm_ui.py:这里为ui声明小部件
我想知道这些文件应该如何使用,我的目标之一是能够在需要重新创建这些文件时多次更改UI,因此如果我将代码放入其中,每次都会覆盖这些文件

所以,我的问题是:

  • 我必须把自己的代码放在哪里?我必须扩展gm_ui_支持?我必须创建第三个类?我直接在gm_ui_支持部门工作

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

      似乎不可能不修改这两个文件,所以我编辑了
      gm\u ui\u support.py
      (tk变量和事件回调声明)。每次我做一个意味着
      gm\u ui\u support.py
      的更改时,我都会手动复制更改

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

      gm_ui_support.py上的更改:

      • 我创建了一个通用函数(sync_控件),它使用dict填充我的tk变量

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

      • 在每次回调中,我从事件中提取参数,并在调用sync_控件以显示更改后调用控制类上的逻辑操作(更改状态dict)

      样本:

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

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

      似乎不可能不修改这两个文件,所以我编辑了
      gm\u ui\u support.py
      (tk变量和事件回调声明)。每次我做一个意味着
      gm\u ui\u support.py
      的更改时,我都会手动复制更改

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

      gm_ui_support.py上的更改:

      • 我创建了一个通用函数(sync_控件),它使用dict填充我的tk变量

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

      • 在每次回调中,我从事件中提取参数,并在调用sync_控件以显示更改后调用控制类上的逻辑操作(更改状态dict)

      样本:

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