Python,Tkinter:将Entry字段的内容存储到变量

时间:2018-01-16 22:54:57

标签: python string tkinter

亲爱的程序员,

我在Windows 10 64位上使用Python 2.7。

我的Tkinter窗口有问题。在父程序中,我想保存文件,并在Tkinter窗口中询问文件的名称。我的问题是我没有成功在Tkinter窗口之外获得此名称。这是Python代码:

from Tkinter import *
globalFilename = ""    
class Master:
    def __init__(self, top):
        self.filename = ""
        frame_e = Frame(top)
        frame_e.pack()
        self.t_filename = StringVar()

        entry = Entry(frame_e, textvariable=self.t_filename, bg="white")
        entry.pack()
        entry.focus_force()

        saveButton = Button(frame_e, text="Save", command=self.on_button)
        saveButton.pack(side=BOTTOM, anchor=S)


    def on_button(self):
        self.filename = self.t_filename.get()
        print self.filename
        root.quit()
        root.destroy()        


root = Tk()
root.geometry("100x100+100+50")

M = Master(root)
print M.filename
root.mainloop( )
print M.filename
globalFilename = M.filename
print globalFilename

当我在Entry文本框中输入任何文本时,此代码中的所有print语句都不提供任何内容。这不是我所期望的。如果我进入"测试"我希望"测试"为每个打印声明显示(即,此处四次)。我试着去互联网上的各个地方,我尝试了各种教程,我试图复制各种例子,关注各种视频,我只是没有成功解决这个问题。

请注意,这段代码嵌入到一个名为saveGame的函数中,该函数在pygame循环中使用。

提前致谢!一切顺利!

2 个答案:

答案 0 :(得分:1)

您的代码有效。

在您调用mainloop()之前,屏幕上不会绘制窗口,因此在该点之前打印M.filename会打印一个空字符串(初始化值)。 a, c = sympy.symbols('a c', commutative=False) b = sympy.Symbol('b') expr = a * c + b * c 阻塞直到窗口关闭,之后3个打印语句成功打印用户在框中输入的值。

您可能对easygui模块感兴趣,该模块完全符合您的计划所做的工作,除非您不必亲自制作。

答案 1 :(得分:0)

好的,正如其他海报所说,上述代码在真空中工作。它在我的程序中没有嵌入,因为我在调用我的函数之前初始化了一个重复的tk()并再次初始化它。我删除了这个副本并且它有效。