Python将变量从filedialog传递到mainloop

时间:2018-04-18 14:37:10

标签: python tkinter

我想在python中为程序构建一个GUI。

对于这个程序,我有一个配置文件,我希望能够打开并传递给程序。我现在所拥有的(简而言之)是:

from tkinter import *
from tkinter import filedialog

def openfile():
  filename = filedialog.askopenfilename(parent=root)
  lst = list(open(filename))

def savefile():
  filename = filedialog.asksaveasfilename(parent=root)

root = Tk()

methodmenu = Menu(menubar,tearoff=0)
methodmenu.add_command(label="Open",command=openfile)
methodmenu.add_command(label="Save",command=savefile)
menubar.add_cascade(label="Config",menu=methodmenu)

label = Label(root,text="show config here")
label.place(relx=0.5,rely=0.5,anchor=CENTER)

root.config(menu=menubar)
root.mainloop()

所以openfile函数读取列表中的配置文件(这就是我想要的)。现在,我如何将它传递给我的主循环?例如,我想在Label窗口的root中显示从该文件中读取的信息吗?

我尝试使用openfile()定义openfile(lst)并在添加命令之前声明lst=[""],但这似乎是错误的(程序在启动时立即调用openfile(lst),lst为空标签)。

我一般都是python和GUI的新手,这显然不像fortran那样......

1 个答案:

答案 0 :(得分:1)

只需返回您在openfile中读取的配置文件的内容,并将该文件的内容传递给Label构造函数。请注意,由于Label构造函数只使用一个字符串,因此您必须将列表转换为:

def openfile():
    filename = filedialog.askopenfilename(parent=root)
    return list(open(filename))

...

config_file_contents = ''.join(openfile())
label = Label(root, text=config_file_contents)
label.place(...)

或者,如果要单独显示配置列表中的每个元素,可以遍历配置文件列表中的每个元素,并将每个元素传递给它自己的Label对象:

for config in openfile():
    label = Label(root, text=config)
    label.place(...)