[英]Sorting Tkinter Treeview columns with different types
我最近在 Tkinter 中的 treeview 中添加了坐標和日期,當嘗試對坐標列中的實數和日期列中的日期進行排序時,我的排序現在失敗了。
我之前的排序 function 在下面,是專門為文本和整數設計的,但我現在需要升級它。 我確實看過另一篇使用 treeview class 升級的帖子,但如果可能的話,我更願意保留這部分代碼程序,而不是 OOP。
def treeviewSort(treeview, column, reverse: bool):
try:
dataList = [
(int(treeview.set(k, column)), k) for k in
treeview.get_children("")
]
except Exception:
dataList = [(treeview.set(k, column), k) for k in
treeview.get_children("")]
dataList.sort(reverse=reverse)
for index, (val, k) in enumerate(dataList):
treeview.move(k, "", index)
treeview.heading(
column=column,
text=column.title(),
command=lambda _col=column: treeviewSort(
treeview, _col, not reverse
),
)
columns = ("species", "location", "x", "y", "time",
"date", "temperature", "humidity", "user", "#")
table = ttk.Treeview(frame, columns=columns, show="headings",
height=30)
for col in columns:
table.heading(col, text=col,
command=lambda _col=col: treeviewSort(table, _col,
False))
以供參考:
我認為解決方案是在我的 function 中添加一個檢查器,它檢查列類型並進行相應的排序,但我不確定如何實現這一點。
通過根據我猜到的所選列添加 if 語句來解決此問題。 只是剛剛弄清楚如何去做。
如果數據在 x 或 y 列中,它會將數據變為浮點數,然后進行排序。 如果在日期列中,它使用 datetime.strptime 然后按日期排序。 否則,它會正常運行。 代碼如下,以防它幫助任何人。
if column == "x" or column == "y":
dataList.sort(reverse=reverse, key=lambda t: (float(t[0])))
elif column == "date":
dataList.sort(reverse=reverse,
key=lambda t: datetime.strptime(t[0], "%d/%m/%Y"))
else:
dataList.sort(reverse=reverse)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.