微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Tkinter按字母顺序排序网格元素

如何解决Tkinter按字母顺序排序网格元素

我正在使用一个桌面小部件来跟踪我的投资组合。 How Tkinter portfolio widget looks

目前,我的投资分为两个大列(2个大列,每列4列宽),以使每日表现最好的股票位于网格的左上方,而表现最差的股票位于网格的右下方。

我希望能够单击标签并进行“类似excel的排序”。假设我点击“ TICKER”标签,并且我的Feed按字母顺序排序,或者我点击了“损益”,并且我的Feed以总投资额的升序/降序排序。

我正在使用网格表示,这就是我的代码块的样子

                    ticker_label = Label(root,text=ticker)
                    quote_label = Label(root,text="+"+'{:.2f}'.format(quote))
                    portfolio_allocation_label = Label(root,text=invest)
                    pl_label = Label(root,text=pl)
                    ticker_label.grid(row=separator_1,column=0)
                    quote_label.grid(row=separator_1,column=1)
                    portfolio_allocation_label.grid(row=separator_1,column=2)
                    pl_label.grid(row=separator_1,column=3)

如何在Tkinter中从GUI内部按字母顺序/数字排序网格元素?

虽然片段也很受人们欢迎,但我不一定需要代码片段,而是一般的方向感!

非常感谢!

解决方法

  • 在这里,我得到了指定网格(即标签框架)的奴隶。
  • 我存储从属对象对其进行迭代,并将它们保存在字典中,并将值保存在列表中。
  • 我对列表进行排序,并按其索引放置它们

import tkinter as tk
from collections import defaultdict

def alpha():
    #get data
    list_of_labels = labelframe.grid_slaves(column=0)
    label_values=[]
    data=defaultdict(list)
    for idx,_ in enumerate(list_of_labels):
        label=labelframe.grid_slaves(row=idx,column=0)[0]
        data[label].append(label['text'])
        label_values.append(label['text'])
    #use data
    sort=sorted(label_values,key=str.lower)
    for idx,value in enumerate(sort):
        for label,v in data.items():
            if v[0] == value:
                label.grid(row=idx,column=0)

root = tk.Tk()

buttonframe = tk.Frame(root)
buttonframe.pack()

button=tk.Button(buttonframe,text='alpha',command=alpha)
button.grid(column=0,row=0)

labelframe= tk.Frame(root)
labelframe.pack()

a = tk.Label(labelframe,text='a')
b = tk.Label(labelframe,text='b')
a.grid(column=0,row=1)
b.grid(column=0,row=0)

root.mainloop()

如果还有问题,请告诉我。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。