【问题标题】:ObjectListView Sorting and Formatting Integers with Commas?ObjectListView 用逗号对整数进行排序和格式化?
【发布时间】:2012-10-06 00:27:08
【问题描述】:

我正在运行 Python 2.7,并且我有一个 ObjectListView 显示大量人口统计信息。我可以让它正确排序,但输出以100000.0 格式显示。当我使用语言环境模块将整数转换为字符串时,它会对降序字符串进行排序,如9,181, 9,069, 818, 813, 8,730, 等。任何想法如何像整数一样排序,但将输出显示为ObjectListView 中的逗号格式?

【问题讨论】:

  • 在格式化前对数据进行排序。如果ObjectListView 与大多数数据网格组件一样(即在非 RAD 用例中有点糟糕),则必须为该列实现自定义排序。
  • 从浏览ObjectListView 文档来看,它似乎应该根据基础模型值进行排序。你能举一些例子来说明你是如何把它连接起来的,以及你在哪里将数字转换为字符串? (如果可能的话,让它成为一个简单的例子,比如一个只有一个整数列的虚拟类。)

标签: python sorting csv integer objectlistview


【解决方案1】:

您可以使用yourColumn 的整数值而不是显示字符串来排序:

yourColumn = ColumnDefn("Title", "center", 100, "title", stringConverter=int_to_string_with_commas)

-- see smarter string conversions.

.

其中int_to_string_with_commas 是将整数转换为字符串(带逗号)的函数:

import locale
locale.setlocale(locale.LC_ALL, 'en_US') # your locale here

def int_to_string_with_commas(value):
    return locale.format("%d", value, grouping=True)

其他写int_to_string_with_commas的方法见this question

.

【讨论】:

  • 您的格式化功能比 OP 的方法差一些。使用locale 来格式化这个在用户系统上设置的方式是可行的——对格式进行硬编码将超出这一点。 (也就是说,定义列的方式可能会有所帮助。如果没有 OP 提供代码,真的不能说。)
  • @millimoose 不管你编码,int_to_string_with_commas yourColumn 行将是相同的。关键是,它将按价值排序,而不是int_to_string_with_commas(value)
  • 我了解您的意思,只是建议该功能的实现不如 OP 已经说他正确完成的功能实现有点令人困惑,即使它与实际相切题。 (就此而言,将一半的答案花在切线问题上。)我只会使用明显虚拟或模糊的实现,因为字符串的格式并不重要。
  • @millimoose 重新排列以首先添加更重要的部分(并使用语言环境。)
【解决方案2】:

感谢您让我走上正轨!最后,我只是在 ObjectListView.py 源代码中添加了两行。在第 3601 行左右,我将 _StringToValue 函数更改为包括:

    if converter == "%cd": ##New Line
        return locale.format("%d", value, grouping=True) ##New Line
    else:
     fmt = converter or "%s"
     try:
        return fmt % value
     except UnicodeError:
        return unicode(fmt) % value

本地导入后还需要设置locale,如上图:

  locale.setlocale(locale.LC_ALL, 'en_US')

谢谢你,我一直在努力解决这个问题。 干杯!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-01-24
    • 2014-04-01
    • 2014-09-07
    • 2020-07-11
    • 1970-01-01
    • 2018-01-10
    • 2015-07-26
    • 1970-01-01
    相关资源
    最近更新 更多