栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python:使用UI树显示按键的Dicts,并使用其他任何控件的值显示Dicts

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python:使用UI树显示按键的Dicts,并使用其他任何控件的值显示Dicts

好吧,所以它不是很漂亮,将这样的代码投入生产也不会感到很好,但是它确实可以工作。为了使其更加理智和提高生产质量,我可能将JSONTree设置为一个类,并将所有这些代码包装到方法中。这样可以简化和清除代码,并减少将对象传递给事件处理程序的过程。

import jsonimport tkinter as tkfrom tkinter import ttkfrom pprint import pprint as pprint# opt_name: (from_, to, increment)IntOptions = {    'age': (1.0, 200.0, 1.0),}def close_ed(parent, edwin):    parent.focus_set()    edwin.destroy()def set_cell(edwin, w, tvar):    value = tvar.get()    w.item(w.focus(), values=(value,))    close_ed(w, edwin)def edit_cell(e):    w = e.widget    if w and len(w.item(w.focus(), 'values')) > 0:        edwin = tk.Toplevel(e.widget)        edwin.protocol("WM_DELETe_WINDOW", lambda: close_ed(w, edwin))        edwin.grab_set()        edwin.overrideredirect(1)        opt_name = w.focus()        (x, y, width, height) = w.bbox(opt_name, 'Values')        edwin.geometry('%dx%d+%d+%d' % (width, height, w.winfo_rootx() + x, w.winfo_rooty() + y))        value = w.item(opt_name, 'values')[0]        tvar = tk.StringVar()        tvar.set(str(value))        ed = None        if opt_name in IntOptions: constraints = IntOptions[opt_name] ed = tk.Spinbox(edwin, from_=constraints[0], to=constraints[1],     increment=constraints[2], textvariable=tvar)        else: ed = tk.Entry(edwin, textvariable=tvar)        if ed: ed.config(background='LightYellow') #ed.grid(column=0, row=0, sticky=(tk.N, tk.S, tk.W, tk.E)) ed.pack() ed.focus_set()        edwin.bind('<Return>', lambda e: set_cell(edwin, w, tvar))        edwin.bind('<Escape>', lambda e: close_ed(w, edwin))def JSonTree(Tree, Parent, Dictionery, TagList=[]):    for key in Dictionery :        if isinstance(Dictionery[key], dict): Tree.insert(Parent, 'end', key, text=key) TagList.append(key) JSonTree(Tree, key, Dictionery[key], TagList) pprint(TagList)        elif isinstance(Dictionery[key], list): Tree.insert(Parent, 'end', key, text=key) # Still working on this        else: Tree.insert(Parent, 'end', key, text=key, value=Dictionery[key])if __name__ == "__main__" :    # Setup the root UI    root = tk.Tk()    root.title("JSON editor")    root.columnconfigure(0, weight=1)    root.rowconfigure(0, weight=1)    # Setup Data    Data = {        "firstName": "John",        "lastName": "Smith",        "gender": "man",        "age": 32,        "address": { "streetAddress": "21 2nd Street", "city": "New York", "state": "NY", "postalCode": "10021"},        "phoneNumbers": [ { "type": "home", "number": "212 555-1234" }, { "type": "fax", "number": "646 555-4567" },        ]}    # Setup the frames    Treeframe = ttk.frame(root, padding="3")    Treeframe.grid(row=0, column=0, sticky=tk.NSEW)    # Setup the Tree    tree = ttk.Treeview(Treeframe, columns=('Values'))    tree.column('Values', width=100, anchor='center')    tree.heading('Values', text='Values')    tree.bind('<Double-1>', edit_cell)    tree.bind('<Return>', edit_cell)    JSonTree(tree, '', Data)    tree.pack(fill=tk.BOTH, expand=1)    # Limit windows minimum dimensions    root.update_idletasks()    root.minsize(root.winfo_reqwidth(), root.winfo_reqheight())    root.mainloop()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/647319.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号