如何构建python3 / tkinter项目

琼·埃斯特万(Joan Esteban)

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

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

我想知道应该如何使用此文件,我的目标之一是能够根据需要重新创建该文件的次数进行多次更改,因此,如果我将代码放入其中的任何一个文件,则每个文件都会被覆盖时间。

所以,我的问题是:

  • 我必须在哪里放置自己的代码?我必须扩展gm_ui_support吗?我必须创建一个三等班吗?我直接在gm_ui_support做吗?
琼·埃斯特万(Joan Esteban)

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

似乎不可能保持两个文件都不变,因此我进行了编辑gm_ui_support.py(tk变量和事件回调的声明)。每次进行更改都意味着gm_ui_support.py我会手动复制更改。

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

对gm_ui_support.py的更改:

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

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

  • 在每个回调上,我从事件中提取参数,并在调用sync_control以显示更改之后对控件类调用逻辑操作(更改状态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()
...

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章