我想在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那样......
答案 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(...)