【问题标题】:Getting the values of UI elements with Tkinter使用 Tkinter 获取 UI 元素的值
【发布时间】:2018-04-19 17:56:55
【问题描述】:

我正在使用 Tkinter 开发一个简单的用户界面。我有一些检查按钮、条目,我应该设置一个按钮将它们全部保存在一个文件中。 这是代码:

from tkinter import *
import json, sys

class Window(Frame):
    def load_config(self,obs,wav):
         d = json.load(open('config.txt','r'))
         self.conf_dict = d[obs][wav]

    def __init__(self,master,observatory,wavelength):
        Frame.__init__(self, master)
        self.master = master
        self.load_config(observatory,wavelength)
        r = 0
        for k,v in self.conf_dict.items():
            r += 1
            self.l = Label(master, text=k+':')
            self.l.grid(row=r,column=0,padx=10, pady=5)
            if isinstance(v,bool):
                self.c = Checkbutton(master)
                self.c.grid(row=r,column=1,padx=10,pady=5)
            else:
                self.e = Entry(master)
                self.e.insert(END,str(v))
                self.e.grid(row=r,column=1,padx=10, pady=5)
        self.b = Button(master,text='Save',command=save_callback)

    def save_callback(self):
        # save new config file with json

if __name__ == '__main__':
    root = Tk()
    app = Window(root,sys.argv[1],sys.argv[2])
    root.mainloop()

最好的办法是直接修改conf_dict 的值并将字典保存在save_callback 中。我怎样才能做到这一点?我需要一些方法来获取按钮的 ID 或将它们链接到字典。

注意:我尝试使用 self.c = Checkbutton(master,var=self.conf_dict[k]),但它不起作用。

【问题讨论】:

  • 需要抓取复选框的值吗?所以要检查它是否被检查?我对你到底要什么感到困惑。
  • 是的,我当然需要复选框的值。什么不清楚?

标签: python python-3.x user-interface tkinter tk


【解决方案1】:

已解决:

class Window(Frame):

    def load_config(self,obs,wav):
         d = json.load(open('config.txt','r'))
         self.conf_dict = d[obs][wav]

    def save_callback(self,d):
        for k,v in l.items():
            print(k,v.get())
        # save new config file with json

    def __init__(self,master,observatory,wavelength):
        Frame.__init__(self,master)
        self.master = master
        self.load_config(observatory,wavelength)
        self.elements = {}
        for k,v in self.conf_dict.items():
            l = Label(master, text=k+':')
            l.grid(row=len(self.elements),column=0,padx=10, pady=5)
            if isinstance(v,bool):
                self.elements[k] = IntVar()
                self.elements[k].set(int(v))
                c = Checkbutton(master, var=self.elements[k])
                c.grid(row=len(self.elements)-1,column=1,padx=10,pady=5)
            else:
                self.elements[k] = Entry(master)
                self.elements[k].insert(END,str(v))
                self.elements[k].grid(row=len(self.elements)-1,column=1,padx=10,pady=5)
        self.b = Button(master,text='Save',
                 command=(lambda new_dict=self.elements:self.save_callback(new_dict)))
        self.b.grid(row=len(self.elements),column=1,padx=10,pady=5)

【讨论】:

    猜你喜欢
    • 2013-07-24
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-09
    相关资源
    最近更新 更多