Tkinter 按字母顺序排序网格元素
Tkinter sorting grid elements alpabetically
我正在开发一个跟踪我的投资组合的桌面小部件。
How Tkinter portfolio widget looks
目前,我的投资在两个巨列(2 个巨列,每列 4 列宽)中排序,每日表现最好的在网格的左上角,表现最差的在右下角。
我希望能够单击标签并生成 'excel-like' 排序。假设我点击“TICKER”标签,我的 Feed 按字母顺序排序,或者我点击“P/L”,我的 Feed 按总投资 asc/desc 排序。
我正在使用网格表示,这就是我的代码块的样子
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)
如何从 GUI 内部对 Tkinter alpabetically/numerically 中的网格元素进行排序?
我不一定需要代码片段,但需要大致的方向感,尽管也非常感谢代码片段!
提前致谢!
- 这里我得到了一个指定网格的slaves,也就是labelframe
- 我存储奴隶对其进行迭代并将它们保存在字典中,并将值保存在列表中。
- 我对列表进行排序并按索引放置它们
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()
如果还有问题,请告诉我。
我正在开发一个跟踪我的投资组合的桌面小部件。 How Tkinter portfolio widget looks
目前,我的投资在两个巨列(2 个巨列,每列 4 列宽)中排序,每日表现最好的在网格的左上角,表现最差的在右下角。
我希望能够单击标签并生成 'excel-like' 排序。假设我点击“TICKER”标签,我的 Feed 按字母顺序排序,或者我点击“P/L”,我的 Feed 按总投资 asc/desc 排序。
我正在使用网格表示,这就是我的代码块的样子
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)
如何从 GUI 内部对 Tkinter alpabetically/numerically 中的网格元素进行排序?
我不一定需要代码片段,但需要大致的方向感,尽管也非常感谢代码片段!
提前致谢!
- 这里我得到了一个指定网格的slaves,也就是labelframe
- 我存储奴隶对其进行迭代并将它们保存在字典中,并将值保存在列表中。
- 我对列表进行排序并按索引放置它们
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()
如果还有问题,请告诉我。