在Text小部件中对索引进行排序的最佳方法

时间:2014-06-11 07:53:29

标签: python tkinter

text widget中,索引用于指向文本小部件处理的文本中的位置。使用“line.column”形式的字符串索引标记文本小部件中带有文本的位置。行号从1开始,而列号从0开始。

问题是如何对索引列表进行排序?例如:

unsorted_indexes = ['1.30', '1.0', '1.25',  '3.10', '3.100', '3.1', '3.8']
# expected result: ['1.0', '1.25', '1.30',  '3.1', '3.8', '3.10', '3.100']

# cant sort as strings:
print(sorted(unsorted_indexes))
# gives incorrect values: ['1.0', '1.25', '1.30', '3.1', '3.10', '3.100', '3.8']

# cant convert to float
print(sorted([float(index) for index in unsorted_indexes]))
# [1.0, 1.25, 1.3, 3.1, 3.1, 3.1, 3.8]

如果您将字符串索引转换为其他形式,那么当然您需要回到原始表单。在上面的示例中,执行float('3.1')float('3.100')会导致浮点值为3.1。无法返回'3.1'或'3.100'。或者也许在tkinter中已经存在一些机制,我很想念它?

1 个答案:

答案 0 :(得分:2)

希望这可以帮到你: 代码如下:

>>> unsorted_indexes = ['1.30', '1.0', '1.25',  '3.10', '3.100', '3.1', '3.8']
>>> unsorted_indexes.sort(key=lambda x: [x.split('.')[0], int(x.split('.')[1])])
>>> unsorted_indexes
['1.0', '1.25', '1.30', '3.1', '3.8', '3.10', '3.100']
>>>