Как переносить текст в заголовки таблицы PySimpleGUI

Я создал таблицу PySimpeGUI, используя следующий код:

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()

Я получаю следующую таблицу:

Как вы можете видеть, длина заголовков столбцов увеличивает ширину некоторых столбцов, хотя соответствующие данные не требуют, чтобы столбцы были широкими. Может ли кто-нибудь сказать мне, как обернуть текст в заголовках столбцов в PySimpleGUI, чтобы я мог уменьшить размер этих столбцов? Я попытался отключить auto_size_columns, но тогда заголовки столбцов просто обрезались.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
234
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Здесь особое требование, поэтому код tkinter для него.

Пример кода

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

# Update the GUI for the Table
style_name = table.table_ttk_style_name + '.Heading'
style = table.ttk_style
foreground = style.configure(style_name)['foreground']
style.configure(style_name, foreground=foreground)

# Relocate window to center of the screen
window.refresh()
window.move_to_center()

window.read(close=True)

Благодарю за ваш ответ. Если я правильно понимаю, то, по сути, вы разбиваете столбцы вручную, используя \n, а затем используете Tkinter для чтения \n в виде разделения текста, а затем вручную устанавливаете высоту в 3 столбца? Плюс некоторый код, чтобы получить размер экрана и центрировать его, что я хотел сделать, но также еще не совсем был уверен в этом. Мне может потребоваться немного времени, чтобы понять, как реализовать это в моем коде, но я думаю, что это решает мой вопрос, поэтому я отмечу это как ответ.

WCeconomics 12.10.2022 18:55

Обновлен для получения дополнительных комментариев в коде.

Jason Yang 12.10.2022 19:08

Другие вопросы по теме