按列排序 table
Sorting table by columns
这个小程序从 csv 文件中抓取数据并显示
目前没有找到您点击的 header 的方法,因此此处需要 tkinter 代码。
在下面的演示代码中双击header排序,如何排序table,这取决于您的排序代码,这里不显示。
import PySimpleGUI as sg
def double_click(event):
"""
Additional event for double-click on header
event: class event
"""
region = table.identify("region", event.x, event.y)
if region == 'heading': # Only care double-clock on headings
cid = int(table.identify_column(event.x)[1:])-1 # check which column clicked
window.write_event_value("-TABLE-DOUBLE-CLICK-", cid)
data = [
["Name", "Cases/All", "Case/Day", "Deaths/All", "Death/Day"],
["Global", "80773033", "563983", "1783619", "11784"],
["USA", "19147627", "174814", "332423", "1779"],
["India", "10244852", "20549", "148439", "286"],
["Brazil", "7504833", "20548", "191570", "431"],
["Russian", "3131550", "26513", "56426", "599"],
["France", "2530400", "11295", "63701", "969"],
["UK", "2382869", "53135", "71567", "458"],
["Italy", "2067487", "11210", "73029", "659"],
["Spain", "1893502", "7717", "50442", "36"],
["Germany", "1687185", "22459", "32107", "1129"],
["Colombia", "1603807", "9310", "42374", "203"],
["Argentina", "1590513", "6586", "42868", "218"],
["Mexico", "1389430", "5996", "122855", "429"],
["Turkey", "1364242", "15805", "20388", "253"],
["Poland", "1281414", "12780", "28019", "565"],
["Iran", "1212481", "6108", "54946", "132"],
["Ukraine", "1045348", "7986", "18324", "243"],
["South Africa", "1021451", "9580", "27568", "497"],
["Peru", "1008908", "1251", "37525", "51"],
["Netherlands", "778293", "7561", "11218", "171"],
]
sg.theme('DarkBlue')
sg.set_options(font='Courier 11')
layout = [
[sg.Table(data[1:], headings=data[0], auto_size_columns=False,
def_col_width=13, enable_events=True, key='-TABLE-')],
]
window = sg.Window('Table', layout, finalize=True)
table = window['-TABLE-'].Widget
table.bind('<Double-1>', double_click, add='+')
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED:
break
elif event == '-TABLE-DOUBLE-CLICK-':
column = values[event]
print(f'Click on column {column}')
# Sort data on the table by the value of column
# then update window['-TABLE-'].update(values=new_data)
window.close()
这个小程序从 csv 文件中抓取数据并显示
目前没有找到您点击的 header 的方法,因此此处需要 tkinter 代码。
在下面的演示代码中双击header排序,如何排序table,这取决于您的排序代码,这里不显示。
import PySimpleGUI as sg
def double_click(event):
"""
Additional event for double-click on header
event: class event
"""
region = table.identify("region", event.x, event.y)
if region == 'heading': # Only care double-clock on headings
cid = int(table.identify_column(event.x)[1:])-1 # check which column clicked
window.write_event_value("-TABLE-DOUBLE-CLICK-", cid)
data = [
["Name", "Cases/All", "Case/Day", "Deaths/All", "Death/Day"],
["Global", "80773033", "563983", "1783619", "11784"],
["USA", "19147627", "174814", "332423", "1779"],
["India", "10244852", "20549", "148439", "286"],
["Brazil", "7504833", "20548", "191570", "431"],
["Russian", "3131550", "26513", "56426", "599"],
["France", "2530400", "11295", "63701", "969"],
["UK", "2382869", "53135", "71567", "458"],
["Italy", "2067487", "11210", "73029", "659"],
["Spain", "1893502", "7717", "50442", "36"],
["Germany", "1687185", "22459", "32107", "1129"],
["Colombia", "1603807", "9310", "42374", "203"],
["Argentina", "1590513", "6586", "42868", "218"],
["Mexico", "1389430", "5996", "122855", "429"],
["Turkey", "1364242", "15805", "20388", "253"],
["Poland", "1281414", "12780", "28019", "565"],
["Iran", "1212481", "6108", "54946", "132"],
["Ukraine", "1045348", "7986", "18324", "243"],
["South Africa", "1021451", "9580", "27568", "497"],
["Peru", "1008908", "1251", "37525", "51"],
["Netherlands", "778293", "7561", "11218", "171"],
]
sg.theme('DarkBlue')
sg.set_options(font='Courier 11')
layout = [
[sg.Table(data[1:], headings=data[0], auto_size_columns=False,
def_col_width=13, enable_events=True, key='-TABLE-')],
]
window = sg.Window('Table', layout, finalize=True)
table = window['-TABLE-'].Widget
table.bind('<Double-1>', double_click, add='+')
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED:
break
elif event == '-TABLE-DOUBLE-CLICK-':
column = values[event]
print(f'Click on column {column}')
# Sort data on the table by the value of column
# then update window['-TABLE-'].update(values=new_data)
window.close()