在Python中迭代YAML
我正在尝试构建一个具有Tkinter GUI的Python应用程序。 我被困在那里,不知道如何通过按键读取yaml字符串。我希望在Python中迭代YAML,python,tkinter,yaml,Python,Tkinter,Yaml,我正在尝试构建一个具有Tkinter GUI的Python应用程序。 我被困在那里,不知道如何通过按键读取yaml字符串。我希望字段名称的值是代码中条目的名称,标签的值是标签文本的属性 cfg.yml如下所示: config.py如下所示: Main.py这里的问题是我不知道如何使用yaml列表,以及如何在def标签(self)和def条目(self) 安装pyyaml库: pip安装pyyaml 现在将yaml转换为python列表并进行处理: 导入yaml 从pathlib导入路径 doc
字段名称
的值是代码中条目
的名称,标签
的值是标签文本
的属性
cfg.yml如下所示:
config.py如下所示:
Main.py这里的问题是我不知道如何使用yaml列表,以及如何在def标签(self)
和def条目(self)
安装pyyaml库:
pip安装pyyaml
现在将yaml转换为python列表并进行处理:
导入yaml
从pathlib导入路径
document_yaml=Path(“./cfg.yaml”).read_text()
yaml\u列表=yaml.load(文件\u yaml)
打印(yaml_列表)
#[{'field_name':'neptun_code','label':'neptun code'},{'field_name':'result',#'label':'result[%]},{'field_name':'mark','label':'mark[1-5]}]
#例如,标签将是:
def标签(自):
#标签
行=0
对于yaml_列表中的项目:
self.lbl=tk.Label(self.window,text=item[“Label”])
self.lbl.grid(列=0,行=行)
行+=1
完整示例:
导入yaml
从pathlib导入路径
类配置(对象):
定义初始化(自):
self.document\u yaml=Path(“./cfg.yaml”).read\u text()
def load_yaml(自)->列表:
返回yaml.load(自文件\u yaml)
类窗口(对象):
定义初始化(自):
self.name=None
self.window=None
self.lbl=无
self.txt=无
self.config=config().load_yaml()
def显示(自我):
self.create_window()
self.labels()
self.window.mainloop()
def创建_窗口(自):
self.window=tk.tk()
self.window.title(“主窗口”)
self.window.geometry('350x200')
def标签(自):
#标签
行=0
对于self.config中的项目:
self.lbl=tk.Label(self.window,text=item[“Label”])
self.lbl.grid(列=0,行=行)
行+=1
安装pyyaml库:
pip安装pyyaml
现在将yaml转换为python列表并进行处理:
导入yaml
从pathlib导入路径
document_yaml=Path(“./cfg.yaml”).read_text()
yaml\u列表=yaml.load(文件\u yaml)
打印(yaml_列表)
#[{'field_name':'neptun_code','label':'neptun code'},{'field_name':'result',#'label':'result[%]},{'field_name':'mark','label':'mark[1-5]}]
#例如,标签将是:
def标签(自):
#标签
行=0
对于yaml_列表中的项目:
self.lbl=tk.Label(self.window,text=item[“Label”])
self.lbl.grid(列=0,行=行)
行+=1
完整示例:
导入yaml
从pathlib导入路径
类配置(对象):
定义初始化(自):
self.document\u yaml=Path(“./cfg.yaml”).read\u text()
def load_yaml(自)->列表:
返回yaml.load(自文件\u yaml)
类窗口(对象):
定义初始化(自):
self.name=None
self.window=None
self.lbl=无
self.txt=无
self.config=config().load_yaml()
def显示(自我):
self.create_window()
self.labels()
self.window.mainloop()
def创建_窗口(自):
self.window=tk.tk()
self.window.title(“主窗口”)
self.window.geometry('350x200')
def标签(自):
#标签
行=0
对于self.config中的项目:
self.lbl=tk.Label(self.window,text=item[“Label”])
self.lbl.grid(列=0,行=行)
行+=1
您想要这样的东西:您想要这样的东西:谢谢!现在我可以通过按键来获取这些值。还有一个问题,我如何在类窗口()中初始化“类配置(对象)”以获取列表?我试过了,但当我试着使用print()时,输出是无的。我不熟悉TkInter以及如何实例化配置。但我在上面包含了一个完整的示例,其中我在Window类中强制配置。希望它能给你一些线索?谢谢!现在我可以通过按键来获取这些值。还有一个问题,我如何在类窗口()中初始化“类配置(对象)”以获取列表?我试过了,但当我试着使用print()时,输出是无的。我不熟悉TkInter以及如何实例化配置。但我在上面包含了一个完整的示例,其中我在Window类中强制配置。希望它能给你一些线索?
- field_name: neptun_code
label: Neptun code
- field_name: result
label: Result [%]
- field_name: mark
label: Mark [1-5]
from pathlib import Path
class Config(object):
def __init__(self):
self.document_yaml = None
def function(self):
self.from_yaml()
def from_yaml(self):
self.document_yaml = Path("./cfg.yaml").read_text()
return self.document_yaml
import tkinter as tk
from tkinter import messagebox
class Window(object):
def __init__(self):
self.name = None
self.window = None
self.lbl = None
self.txt = None
def show(self):
self.create_window()
self.labels()
self.entries()
self.window.mainloop()
def create_window(self):
self.window = tk.Tk()
self.window.title("MainWindow")
self.window.geometry('350x200')
def labels(self):
# label
row = 0
for key, value in yaml_str: #?????
self.lbl = tk.Label(self.window, text=value)
self.lbl.grid(column=0, row=row)
row += 1
def entries(self):
# entry
row = 0
for key, value in yaml_str: # ??????
self.txt = tk.Entry(self.window, textvariable=self.name, width=20)
self.txt.grid(column=1, row=row)
row += 1
my_window = Window()
my_window.show()