亲爱的程序员,
我在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文本框中输入任何文本时,此代码中的所有打印语句都不会给出任何内容 . 这不是我所期望的 . 如果我输入“test”,我希望每个打印语句都出现“test”(即这里四次) . 我试图去互联网上的各个地方,我尝试了各种教程,我试图复制各种示例,关注各种视频,我只是没有成功解决这个问题 .
请注意,这段代码嵌入到一个名为saveGame的函数中,该函数在pygame循环中使用 .
提前致谢!祝一切顺利!
2 回答
你的代码有效 .
在调用
mainloop()
之前,窗口不会在屏幕上绘制,因此在该点之前打印M.filename会打印一个空字符串(初始化值) .mainloop()
阻塞直到窗口关闭,之后3个打印语句成功打印用户在框中输入的值 .您可能对easygui模块感兴趣,该模块完全符合您的程序,除非您不必自己制作 .
好吧,正如其他海报所说,上述代码在真空中工作 . 它在我的程序中没有嵌入,因为我在调用我的函数之前初始化了一个重复的tk()并再次初始化它 . 我删除了这个副本,它工作 .