Tkinter-Стварэнне кнопак у адпаведнасці з ключамі слоўніка

Я спрабую стварыць графічны інтэрфейс для невялікага чарчэння праграмы лесанарыхтоўчых файлаў. У мяне ёсць усе дадзеныя ў слоўніку (на самай справе дыктуе {дыктуе {дыктуе {дыктуе {}}}}}), і хацеў бы выкарыстаць ключы, каб стварыць табулятораДль колькасць для верхніх ключоў сцяжкоў, якія ў асноўным будуць абраныя, каб пабудаваць колькасць у залежнасці ад часу для падраздзелаў. Я паглядзеў у pyttk і ён падобны на тое, што я хацеў, але я бягу ў праблемы, як рэалізаваць стварэнне на ўкладцы кнопку /.

Дзякуючы кучу загадзя.

0
Не, я проста прашу за ідэю, як гэта зрабіць. Я паспрабаваў зрабіць кнопкі/сцяжкі, выкарыстоўваючы для цыклу па клавішах, але гэта падобна на стварэнне зменных на ляту, якія я не люблю наогул. Я проста шукаў розныя ідэі, таму што я не магу не знайшоў іншага рашэння. І робячы іх усё ўручную прыкладна гэтак жа гнуткі, як цагляная сцяна, і гэта тое, што я не магу мець.
дададзена аўтар madtowneast, крыніца
Што пытанне вы пытаецеся? Вы прасілі нас напісаць код для вас? Якія праблемы вы з?
дададзена аўтар Bryan Oakley, крыніца

1 адказы

Адзін са спосабаў захаваць спасылкі на вашыя звязаных зменных у слоўніку. Вось прыклад:

import Tkinter as tk

data = {"Field 1": 1,
        "Field 2": 2,
        "Field 3": 3,
        "Field 4": 4,
}

class SampleApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        self.variables ={}
        for label in sorted(data.keys()):
            self.variables[label] = tk.IntVar()
            cb = tk.Checkbutton(self, text=label, 
                                onvalue=data[label], offvalue=0, 
                                variable=self.variables[label])
            cb.pack(side="top", fill="x")


        button = tk.Button(self, text="Submit", command=self.OnSubmit)
        button.pack()

    def OnSubmit(self):
        for field in sorted(data.keys()):
            print "Value for %s: %s" % (field, self.variables[field].get())

if __name__ == "__main__":
    app = SampleApp()
    app.mainloop()

If you don't like creating variables on the fly like that, with a little extra effort you can create an array that all of the buttons can be associated with. I gave an example of how to do it in the question How to run a code whenever a Tkinter widget value changes?

1
дададзена
Вялікі дзякуй! Вельмі блізка да таго, што я думаў пра гэта, але я паспрабаваў выкарыстаць спіс замест Dict. Я атрымаў адзін хуткі пытанне, чаму я павінен прайсці tk.TK ў клас?
дададзена аўтар madtowneast, крыніца
Mhh я быў трохі занадта хутка з гэтым каментарыем. Я мяркую, што гэта адбываецца ад таго, што мы Абарону __init __ (самастойна, * ARGS ** kwargs) замест def__init (я, майстар).
дададзена аўтар madtowneast, крыніца
Вы не «праходзіць» tk.Tk, што клас з'яўляецца падклас tk.Tk.
дададзена аўтар Bryan Oakley, крыніца