Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How do I Wrap Text in PySimpleGUI Table Headings

I have created a PySimpeGUI table using the following code:

import pandas as pd
import PySimpleGUI as sg

df = pd.read_csv('C:/Data/dummydata.csv')
data = df.values.tolist()
headings = df.columns.tolist()

def main():
    layout = [sg.Table(values=data, headings=headings, auto_size_columns=True,
                        display_row_numbers=False, num_rows = len(data), enable_events=True,
                        justification='left', key='_TABLE_', vertical_scroll_only = False)],
    window = sg.Window('Dummy Name', auto_size_text=True, auto_size_buttons=True,
                       grab_anywhere=False, resizable=True,
                       layout=layout, finalize=True)
    while True:
        event, values = window.read()
        if event == "Exit" or event == sg.WIN_CLOSED:
            break
    window.close()
    
if __name__ == "__main__":
    main()

I get the following table:

Table 1

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

As you can see, the length of the column headers is increasing the width of some of the columns, even though the relevant data does not need the columns to be wide. Can someone tell me how to wrap the text in the column headings in PySimpleGUI so I can reduce the size of these columns? I tried turning off auto_size_columns but then the column headings just get cut off.

>Solution :

Special requirement here, so tkinter code for it.

Example Code

import PySimpleGUI as sg

headings = ['A1', 'B1\nB2', 'C1\nC2\nC3']
data = [[1,2,3], [2,4,6], [3,6,9]]

layout = [
    [sg.Table(values=data, headings=headings, num_rows=10, col_widths=[4, 4, 4],
        cols_justification='ccc', auto_size_columns=False, key='-TABLE-')],
]
location = sg.Window.get_screen_size()
window = sg.Window('Title', layout, finalize=True, location=location)

# Set 3-line heading height
table = window['-TABLE-']
table.widget.heading('#0', text='\n\n')                                # 3 lines         
style_name = table.table_ttk_style_name + '.Heading'
style = table.ttk_style
foreground = style.configure(style_name)['foreground']
style.configure(style_name, foreground=foreground)
window.refresh()
window.move_to_center()

window.read(close=True)

enter image description here

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading