Python 3.7 + tkInter: Как я могу убедиться, что кнопке назначена отдельная функция из файла?

Я ничего не знаю. Вы можете присвоить результат json_encode () переменной smarty в вашем «php-коде» с помощью $ smarty-> assign (...), а затем использовать его в своем шаблоне.

Также есть расширение Smarty для json_decode (). Нетрудно написать собственное расширение для противоположного на основе этого.

0
задан Bart_S 27 February 2019 в 14:03
поделиться

2 ответа

Я полагаю, что проблема с 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] Результаты:

enter image description here

0
ответ дан Mike - SMT 27 February 2019 в 14:03
поделиться

Я обычно храню созданные виджеты кнопок в списке. Я изменил ваш метод. Увидеть ниже.

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")
0
ответ дан Sun Bear 27 February 2019 в 14:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: