无法在界面中显示合并后的数据: import pandas as pd import PySimpleGUI as sg # 定义窗口布局 layout = [ [sg.Text('选择第一个表格文件:', size=(20, 1)), sg.Input(key='file1'), sg.FileBrowse()], [sg.Text('选择第二个表格文件:', size=(20, 1)), sg.Input(key='file2'), sg.FileBrowse()], [sg.Button('查找相同时间段数据')], [sg.Table(values=[], headings=[], key='table3', enable_events=True, bind_return_key=True)], [sg.Button('保存数据')] ] # 创建窗 window = sg.Window('查找相同时间段数据,作者:Dieter', layout, font=("微软雅黑", 15), default_element_size=(50, 1)) # 当窗口打开时执行的代码 while True: event, values = window.read() if event == sg.WINDOW_CLOSED: break elif event == '查找相同时间段数据': # 获取用户选择的文件路径 file1 = values['file1'] file2 = values['file2'] # 读取两个表格的数据 df1 = pd.read_csv(file1) df2 = pd.read_csv(file2) # 按照时间段合并两个 DataFrame 对象 merged_df = pd.merge(df1, df2, on='Time') # 将合并后的数据显示在表格中 headings = merged_df.columns.tolist() values = merged_df.values.tolist() window['table3'].update(values=values) elif event == '保存数据': # 获取当前显示的数据 table_values = window['table3'].get() # 将数据保存到新的表格中 save_file = sg.popup_get_file('保存文件', save_as=True, default_extension='.csv') if save_file: save_df = pd.DataFrame(table_values[1:], columns=table_values[0]) save_df.to_excel(save_file, index=False) sg.popup('保存成功!')
时间: 2024-03-17 17:44:23 浏览: 114
在你的代码中,更新表格的语句 `window['table3'].update(values=values)` 是正确的,但是你没有定义表格的标题。你需要在窗口布局中添加一个 `sg.Table` 元素并设置 `headings` 属性,例如:
```
[sg.Table(values=[], headings=['列1', '列2', '列3'], key='table3', enable_events=True, bind_return_key=True)],
```
这里我添加了一个包含三列的表格,你需要根据你的数据列数修改 `headings` 属性。
相关问题
该程序用的界面显示数据无法显示请修改: import pandas as pd import PySimpleGUI as sg # 定义窗口布局 layout = [ [sg.Text('选择第一个表格文件:', size=(20, 1)), sg.Input(key='file1'), sg.FileBrowse()], [sg.Text('选择第二个表格文件:', size=(20, 1)), sg.Input(key='file2'), sg.FileBrowse()], [sg.Button('查找相同时间段数据', justification='center')], [sg.Output(size=(80, 20), font=("Adobe 宋体 Std L", 10)),sg.Combo(['Method 1', 'Method 2'])], [sg.Table(values=[], headings=[], key='table3')], [sg.Button('保存数据')] ] # 创建窗 window = sg.Window('查找相同时间段数据', layout) # 当窗口打开时执行的代码 while True: event, values = window.read() if event == sg.WINDOW_CLOSED: break elif event == '查找相同时间段数据': # 获取用户选择的文件路径 file1 = values['file1'] file2 = values['file2'] # 读取两个表格的数据 df1 = pd.read_csv(file1) df2 = pd.read_csv(file2) # 按照时间段合并两个 DataFrame 对象 merged_df = pd.merge(df1, df2, on='Time') # 将合并后的数据显示在表格中 headings = merged_df.columns.tolist() values = merged_df.values.tolist() window['table3'].update(values=values) elif event == '保存数据': # 获取当前显示的数据 table_values = window['table3'].get() # 将数据保存到新的表格中 save_file = sg.popup_get_file('保存文件', save_as=True, default_extension='.csv') if save_file: save_df = pd.DataFrame(table_values[1:], columns=table_values[0]) save_df.to_excel(save_file, index=False) sg.popup('保存成功!')
可以尝试将代码中的 `sg.Table` 改为 `sg.Table(values=[], headings=[], key='table3', enable_events=True, bind_return_key=True)`,并添加一个响应事件的代码块,如下所示:
```
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED:
break
elif event == '查找相同时间段数据':
# 获取用户选择的文件路径
file1 = values['file1']
file2 = values['file2']
# 读取两个表格的数据
df1 = pd.read_csv(file1)
df2 = pd.read_csv(file2)
# 按照时间段合并两个 DataFrame 对象
merged_df = pd.merge(df1, df2, on='Time')
# 将合并后的数据显示在表格中
headings = merged_df.columns.tolist()
values = merged_df.values.tolist()
window['table3'].update(values=values, headings=headings)
elif event == 'table3':
selected_row = values['table3'][0]
sg.popup(f'您选择的行是:{selected_row}')
elif event == '保存数据':
# 获取当前显示的数据
table_values = window['table3'].get()
# 将数据保存到新的表格中
save_file = sg.popup_get_file('保存文件', save_as=True, default_extension='.csv')
if save_file:
save_df = pd.DataFrame(table_values[1:], columns=table_values[0])
save_df.to_excel(save_file, index=False)
sg.popup('保存成功!')
```
这样就可以让用户选择表格中的某一行,并弹出一个提示框显示选择的行号。同时,表格的 `headings` 参数也需要设置为 DataFrame 的列名,这样表格的列名才能正确显示。
报错修正: import PySimpleGUI as sg import pandas as pd # 定义窗口布局 layout = [ [sg.Text('选择表格文件')], [sg.Input(), sg.FileBrowse(key='file_1'), sg.Text('表格1')], [sg.Input(), sg.FileBrowse(key='file_2'), sg.Text('表格2')], [sg.Button('查找')], [sg.Text('查找结果:')], [sg.Multiline(size=(60, 10), key='result')], [sg.Button('保存结果')] ] # 创建窗口 window = sg.Window('查找表格数据', layout) # 读取数据并查找相同时间段的数据 def find_data(file_1, file_2): try: # 读取表格数据 df_1 = pd.read_csv(file_1) df_2 = pd.read_csv(file_2) # 找到相同时间段的数据 df = pd.merge(df_1, df_2, on='Time', how='inner') # 返回查找结果 return df.to_string(index=False) except Exception as e: return str(e) # 事件循环 while True: event, values = window.read() if event == sg.WINDOW_CLOSED: break elif event == '查找': # 获取用户选择的文件路径 file_1 = values['file_1'] file_2 = values['file_2'] # 查找数据 result = find_data(file_1, file_2) # 在窗口中显示查找结果 window['result'].update(result) elif event == '保存结果': # 获取当前显示的数据 table_values = window['result'].get() # 将数据保存到新的表格中 save_file = sg.popup_get_file('保存文件', save_as=True, default_extension='.csv') if save_file: save_df = pd.DataFrame(table_values[1:], columns=table_values[0]) save_df.to_excel(save_file, index=False) sg.popup('保存成功!')
这份代码有一个小问题,就是在保存结果的时候,需要将结果按照逗号分隔的形式传递给 DataFrame,而不是直接传递整个字符串。修改代码如下:
```python
import PySimpleGUI as sg
import pandas as pd
# 定义窗口布局
layout = [
[sg.Text('选择表格文件')],
[sg.Input(), sg.FileBrowse(key='file_1'), sg.Text('表格1')],
[sg.Input(), sg.FileBrowse(key='file_2'), sg.Text('表格2')],
[sg.Button('查找')],
[sg.Text('查找结果:')],
[sg.Multiline(size=(60, 10), key='result')],
[sg.Button('保存结果')]
]
# 创建窗口
window = sg.Window('查找表格数据', layout)
# 读取数据并查找相同时间段的数据
def find_data(file_1, file_2):
try:
# 读取表格数据
df_1 = pd.read_csv(file_1)
df_2 = pd.read_csv(file_2)
# 找到相同时间段的数据
df = pd.merge(df_1, df_2, on='Time', how='inner')
# 返回查找结果
return df
except Exception as e:
return str(e)
# 事件循环
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED:
break
elif event == '查找':
# 获取用户选择的文件路径
file_1 = values['file_1']
file_2 = values['file_2']
# 查找数据
result = find_data(file_1, file_2)
# 在窗口中显示查找结果
window['result'].update(result.to_string(index=False))
elif event == '保存结果':
# 获取当前显示的数据
table_values = window['result'].get().split('\n')
table_values = [row.split(',') for row in table_values]
# 将数据保存到新的表格中
save_file = sg.popup_get_file('保存文件', save_as=True, default_extension='.csv')
if save_file:
save_df = pd.DataFrame(table_values[1:], columns=table_values[0])
save_df.to_csv(save_file, index=False)
sg.popup('保存成功!')
```
这样就可以正确地保存结果了。
阅读全文
相关推荐
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![-](https://img-home.csdnimg.cn/images/20241231044930.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)