0

我对 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 的值​​是空的。任何帮助将不胜感激!!

4

1 回答 1

0

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

也不确定你的 y2 是在哪里定义的,但是模块中的 global 是指该模块的全局空间,而不是整个程序的全局空间。至少我是这样解释关于 globals() 函数的注释以及它可能与 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() (因为您已经处于主循环中第一个窗口)。

于 2012-05-18T22:20:36.877 回答