Довольно распечатать данные в ткинтер лейбл - PullRequest
0 голосов
/ 01 ноября 2019

У меня есть следующие примеры данных

data=[(1,'JohnCena','Peter',24,74),
      (2,'James','Peter',24,70),
      (3,'Cena','Peter',14,64),
      (14,'John','Mars',34,174)]

Я хочу напечатать его на графическом интерфейсе Python в виде таблицы в окне вывода tkinter. Я использую tabulate package для печати. Вот моя функция

def display_date():
    disp=pd.DataFrame(data,columns=['id','first name','last name','age','marks'])
    newwin = Toplevel(right_frame)
    newwin.geometry('500x400')
    Label_data=Label(newwin,text=tabulate(disp, headers='keys',tablefmt='github',showindex=False))
    Label_data.place(x=20,y=50)

Вы видите, что вывод не симметричный. Я хочу красивый симметричный табличный вывод. Как я могу это сделать

Вот вывод image

1 Ответ

0 голосов
/ 01 ноября 2019

Вопрос : tabulate вывод, отображаемый в tk.Label, без искажения данных.


Как указано в комментарияхэто можно сделать с помощью monospaced font.
. Вы должны использовать следующие опции Label,

justify=tk.LEFT
anchor='nw'

, чтобы выровнять таблицу left, и закрепить ее в левом верхнем положении.


enter image description here

import tkinter as tk
from tabulate import tabulate

data = [('id', 'first name', 'last name', 'age', 'marks'),
        (1, 'JohnCena', 'Peter', 24, 74),
        (2, 'James', 'Peter', 24, 70),
        (3, 'Cena', 'Peter', 14, 64),
        (14, 'John', 'Mars', 34, 174)
        ]


class TabulateLabel(tk.Label):
    def __init__(self, parent, data, **kwargs):
        super().__init__(parent, 
                         font=('Consolas', 10), 
                         justify=tk.LEFT, anchor='nw', **kwargs)

        text = tabulate(data, headers='firstrow', tablefmt='github', showindex=False)
        self.configure(text=text)


class App(tk.Tk):
    def __init__(self):
        super().__init__()
        TabulateLabel(self, data=data, bg='white').grid(sticky='ew')

if __name__ == "__main__":
    App().mainloop()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...