显示格式化数据的 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
....
除了对您的代码进行一些其他修复外,您还需要使用包 numpy
将 dtype
从 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)
我正在尝试使用 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
....
除了对您的代码进行一些其他修复外,您还需要使用包 numpy
将 dtype
从 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)