显示格式化数据的 PYSimpleGUI Table

PYSimpleGUI Table that shows formatted data

我正在尝试使用 PYSimpleGUI table 获取格式化数字(无小数)。我从 Dataframe 中获取数据并能够创建 table 但没有格式化。如果我尝试直接使用 style.format 格式化数据框上的数字,那么在 Table 创建期间我会收到“Styler 错误”。所以我知道我首先将 DF 推入 Table 创建,然后以某种方式格式化值。如何在 table 视图中将格式更改为 {:,.0f}。我查找了示例和食谱,但没有找到相关信息。

import pysimplegui as sg
import pandas as pd

df = pd.DataFrame([[100.045, 212504.4588], [34658.13489, 445598.465498], [546589.466, 646549.4847], [71214.4986, 8498779.46598]], columns=["A", "B"])
layout = [[sg.Table(values=df,
                    display_row_numbers=True,
                    auto_size_columns=False,
                    num_rows=min(25, len(data)))]

window = sg.Window('Table', layout, grab_anywhere=False)
event, values = window.read()
window.close()

到目前为止,我收到的 table 看起来像:

   A           B
0  100.045     212504.4588
1  34658.13489 445598.465498
....

我想实现 table 看起来像:

   A         B
0     100    212,504
1  34,658    445,598
....

除了对您的代码进行一些其他修复外,您还需要使用包 numpydtype 从 float64 更改为 int64,如下面的代码所示

import PySimpleGUI as sg
import pandas as pd
import numpy as np

def df_gui():
    df = pd.DataFrame(columns=["A", "B"],
                      data=np.array([[100.045, 212504.4588], [34658.13489, 445598.465498], [546589.466, 646549.4847],
                                     [71214.4986, 8498779.46598]]))
    df['A'] = df['A'].astype(np.int64)
    df['B'] = df['B'].astype((np.int64))
    values = df.values.tolist()
    headers = df.columns.values.tolist()


    layout = [[sg.Table(headings=headers, values=values, display_row_numbers=True, auto_size_columns=False, num_rows=min(25, len(values)))]]

    window = sg.Window('Table', layout, grab_anywhere=False)
    while True:
        event, value = window.read()

        if event == sg.WIN_CLOSED:
            break
    window.close()
df_gui()

提示:运行 event, values = window.read()while True: 循环中。这将使 window 保持打开状态,在单击某些内容时读取事件和值,直到在 window 中按下 x,其中 breaks 循环

您需要自行将数据转换成要求的格式。

import PySimpleGUI as sg
import pandas as pd

data = [
    [100.045, 212504.4588],
    [34658.13489, 445598.465498],
    [546589.466, 646549.4847],
    [71214.4986, 8498779.46598],
]

df = pd.DataFrame(data, columns=["A", "B"])
table_data    = list(map(lambda x:list(map(lambda d:f'{d:,.0f}', x)), df.values.tolist()))
table_headers = df.columns.values.tolist()

layout = [[sg.Table(table_data, headings=table_headers, display_row_numbers=True,
    auto_size_columns=False, num_rows=min(25, len(data)))]]

sg.Window('Table', layout, grab_anywhere=False).read(close=True)