通过模块使用Tkinter

时间:2012-05-18 00:03:57

标签: module tkinter

我是python的新手,我在使用tkinter时试图创建模块。我有一个主模块,我想用于顶层菜单和另一个模块,报告也使用tkinter对象。

第一个脚本是main.py,如下所示

       from Tkinter import *
       from wind import *
       menu=Tk()
       menu.geometry('200x200')
       Button(menu,text="push",command=wind.gui).pack()
       menu.mainloop()

第二个脚本是wind.py,如下所示。

  from Tkinter import *

  class wind:
  @staticmethod
  def getting():
       print y2,y2.get()

  @staticmethod
  def gui():
      global y2
      main=Tk()
      main.geometry('300x300+100+100')
      y2=StringVar()
      Entry(main, textvariable=y2, width=40).pack()
      Button(main, text="Run", command=wind.getting).pack()
      main.mainloop()

代码似乎工作正常。但是,tkinter按钮中的y2值为空。任何帮助将不胜感激!!

1 个答案:

答案 0 :(得分:0)

布莱恩就在那儿。你使用两个主循环对我来说有点奇怪。在某些情况下,您可以在Tkinter中触发辅助循环,但不是这样。

也不确定y2的定义位置,但模块中的全局是指该模块的全局空间,而不是整个程序的全局空间。至少我是如何解释关于globals()函数的this note以及它可能与global关键字有什么关系。

我对wind.py做了以下更改,并从该程序得到了更合理的回复:

from Tkinter import *

y2 = None

class wind:
    @staticmethod
    def getting():
        print y2, y2.get()

    @staticmethod
    def gui():
        global y2
        main=Toplevel()
        main.geometry('300x300+100+100')
        y2 = StringVar()
        Entry(main, textvariable=y2, width=40).pack()
        Button(main, text="Run", command=wind.getting).pack()
        #main.mainloop()

注意我将y2设为wind.py模块的实际全局级变量,使main成为Toplevel()小部件,并在gui()末尾注释掉虚假的mainloop()(因为你已经在第一个窗口的主循环)。