我是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值为空。任何帮助将不胜感激!!
答案 0 :(得分:0)
也不确定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()(因为你已经在第一个窗口的主循环)。