Я ничего не знаю. Вы можете присвоить результат json_encode () переменной smarty в вашем «php-коде» с помощью $ smarty-> assign (...), а затем использовать его в своем шаблоне.
Также есть расширение Smarty для json_decode (). Нетрудно написать собственное расширение для противоположного на основе этого.
Я полагаю, что проблема с command=print(self.loadeddata.get("profilename"))
аналогична проблеме с лямбда-выражениями (при этом я удивлен, что ваши кнопки работают вообще. Они должны печатать один раз в init
, а затем никогда не работать, потому что вы вызываете print в создание кнопки вместо сохранения ссылки на печать).
Из-за природы того, как лямбда работает здесь в таком цикле, вы в конечном итоге печатаете только последнее значение в цикле для всех команд. Вместо этого вам нужно использовать лямбда-оператор, а также определить значение в лямбда-выражении для каждого цикла, чтобы точно записать правильные данные для оператора печати. \
Я создал 3 тестовых файла для этого:
[1114 ]test.json
:
{"profilename":"test", "profilecolor": "green"}
test2.json
:
{"profilename":"test2", "profilecolor": "blue"}
test3.json
:
{"profilename":"test3", "profilecolor": "orange"}
Пример кода:
import tkinter as tk
import json
class Window(tk.Tk):
def __init__(self):
super().__init__()
self.btn_list = []
for file in ['test.json', 'test2.json', 'test3.json']:
with open(file, 'r') as f:
self.btn_list.append(json.load(f))
self.create_tags()
def create_tags(self):
for item in self.btn_list:
tk.Button(self, text=item.get("profilename"), background=item.get("profilecolor"),
command=lambda x=item.get("profilename"): print(x)).pack(side="top", fill="x")
if __name__ == '__main__':
Window().mainloop()
[ 1118] Результаты:
Я обычно храню созданные виджеты кнопок в списке. Я изменил ваш метод. Увидеть ниже.
def createTags(self):
# First create the widget and append to list variable
self.tags = [] #List to store button widgets
for items in self.LoadedInstallProfiles:
with open(items, "r") as jsonfiles:
loadeddata = json.load(jsonfiles)
text = loadeddata.get("profilename")
bg = loadeddata.get("profilecolor")
tag = Button( self.tagmenu, text=text, background=bg, command=print(text) )
self.tag.append( tag )
# Then display the widgets
for tag in self.tags:
tag.pack(side="top",fill="x")