1

Gtk.CellRendererText に表示される小数点以下の桁数を制限しようとしています。現在、浮動小数点数フィールドは小数点以下 6 桁で表示されていますが、1 桁にしたいと考えています。

ここに画像の説明を入力

このテスト コードは Linux で動作するはずです。

#!/usr/bin/python3
from gi.repository import Gtk

class MyWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="Hello World")
        self.set_default_size(200, 200)

        self.liststore = Gtk.ListStore(float)
        treeview = Gtk.TreeView(model=self.liststore)

        self.liststore.append([9.9])
        self.liststore.append([1])

        xrenderer = Gtk.CellRendererText()
        xrenderer.set_property("editable", True)
        xcolumn = Gtk.TreeViewColumn("Float Numbers", xrenderer, text=0)
        xcolumn.set_min_width(100)
        xcolumn.set_alignment(0.5)
        treeview.append_column(xcolumn)

        self.add(treeview)

win = MyWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()
4

3 に答える 3

7

同じ問題につまずいた。基本的にやりたいことは、GtkTreeViewColumn の set_cell_data_func を使用して、セルの「テキスト」プロパティを変更するレンダリング関数を設定することです。あなたの例に関しては、次の行を追加してみてください:

xcolumn.set_cell_data_func(xrenderer, \
    lambda col, cell, model, iter, unused:
        cell.set_property("text", "%g" % model.get(iter, 0)[0]))

参考文献:

于 2015-01-30T20:07:11.227 に答える
2

上記の 2 桁の Money レンダラーを構築します。text=3liststore インデックスをfunc_data( unusedlyngvi が使用するパラメータです)として渡します。

このコードを任意の桁数で再利用できるようにするために、セル レンダラーから「数字」プロパティを読み取る方法はまだわかりませんが、これはお金のために機能します。一般的な文字列フォーマットにもリファクタリングするかもしれません。

https://developer.gnome.org/pygtk/stable/class-gtktreeviewcolumn.html#method-gtktreeviewcolumn--set-cell-data-func

class MoneyCellRenderer(Gtk.CellRendererSpin):
    def __init__(self):
        super().__init__()
        self.set_property("editable", True)
        self.set_property("digits", 2)
        adjustment = Gtk.Adjustment(0, 0, sys.maxsize, 0.01, 1.00, 1.00)
        self.set_property("adjustment", adjustment)

# Only show 2 digits
# https://stackoverflow.com/questions/27675919/how-to-limit-number-of-decimal-places-to-be-displayed-in-gtk-cellrenderertext
# https://developer.gnome.org/pygtk/stable/class-gtktreeviewcolumn.html#method-gtktreeviewcolumn--set-cell-data-func
def moneyCellDataFunc(treeViewColumn, cellRenderer, model, iter, column):
    val = model.get(iter, column)
    val = val[0]
    val = "{:.2f}".format(val) # TODO get cell_rendere.digits
    return cellRenderer.set_property("text", val)

class MoneyTreeViewColumn(Gtk.TreeViewColumn):
    def __init__(self, title, cell_renderer, text=0):
        super().__init__(title, cell_renderer, text=text)
        self.set_cell_data_func(cell_renderer, moneyCellDataFunc, text)
于 2018-04-20T17:59:48.727 に答える
0

lyngviのおかげで、このわずかに変更されたコードを使用して、ツリービューの値を小数点以下 1 桁に丸めたり切り捨てたりしています。

    def truncate(self, number):
        """
        Rounds and truncates a number to one decimal place. Used for all
        float numbers in the data-view. The numbers are saved with full float
        precision.
        """
        number = round(number, 1)
        return number

    renderer_dir = Gtk.CellRendererText()
    renderer_dir.set_property("editable", True)
    column_dir = Gtk.TreeViewColumn("Dir", renderer_dir, text=0)
    column_dir.set_alignment(0.5)
    column_dir.set_expand(True)
    column_dir.set_cell_data_func(renderer_dir, \
                lambda col, cell, model, iter, unused:
                cell.set_property("text",
                "{0}".format(self.truncate(model.get(iter, 0)[0]))))
    self.append_column(column_dir)
于 2015-02-09T15:56:33.933 に答える