【问题标题】:How to display a data frame read into python through Pandas in a window using Tkinter on Python 3.8?如何在 Python 3.8 上使用 Tkinter 在窗口中显示通过 Pandas 读入 python 的数据框?
【发布时间】:2020-07-15 03:10:56
【问题描述】:

我的问题的一些背景知识:我需要使用 Python Tkinter 制作一个 GUI。我成功地获得了带有输入字段和浏览器按钮的初始页面。单击浏览器按钮后,文件资源管理器将打开,并且选定的文件路径将填充到输入字段中。现在,我们选择的文件是一个包含所需数据的 .xlsx 文件。使用输入字段中填充的该位置,我已将 .xlsx 文件作为 pandas 数据框导入。现在我将 .xlsx 文件作为数据框,我需要在新窗口中将此数据框显示为表格。

我目前使用的是 Python 3.8。欢迎任何形式的建议/cmets。非常感谢你:)。

【问题讨论】:

  • 您可以使用ttk.Treeview来显示表格数据。
  • @acw1668,感谢您的评论。当然,我会调查的。我为我的问题添加了一些背景知识,以使其更具信息性。请检查一下。非常感谢。

标签: python pandas dataframe user-interface tkinter


【解决方案1】:

我在下面的代码中提供了有关如何执行此操作的 cmets,如前所述,其中一个 cmets 执行此操作的一种方法是使用 TreeView 小部件。

要演示以下代码,请在您的 PC 上使用以下数据创建一个 excel 文件 (.xlsx)

然后在 Tkinter GUI 中(下面提供的代码)。浏览以获取此文件。然后单击加载按钮将此文件加载到 Treeview 小部件中。注释在下面的代码 sn-p 中提供。

import tkinter as tk
from tkinter import ttk, filedialog, messagebox
import pandas as pd

# initialize the tkinter GUI
root = tk.Tk()

root.geometry("500x500")
root.pack_propagate(0)
root.resizable(0, 0)

# This is the frame for the Treeview
frame1 = tk.LabelFrame(root, text="Excel Data")
frame1.place(height=250, width=500)

# This is the frame for the Open File dialog
file_frame = tk.LabelFrame(root, text="Open File")
file_frame.place(height=100, width=400, rely=0.65, relx=0)

button1 = tk.Button(file_frame, text="Browse A File", command=lambda: File_dialog())
button1.place(rely=0.65, relx=0.50)
button2 = tk.Button(file_frame, text="Load File", command=lambda: Load_excel_data())
button2.place(rely=0.65, relx=0.30)

label_file = ttk.Label(file_frame, text="No File Selected")
label_file.place(rely=0, relx=0)

####
# THIS IS YOUR TABLE aka the TreeView widget
####
tv1 = ttk.Treeview(frame1)  # This is the Treeview Widget
column_list_account = ["Name", "Age", "Location"]  # These are our headings
tv1['columns'] = column_list_account  # We assign the column list to the widgets columns
tv1["show"] = "headings"  # this hides the default column..

for column in column_list_account:  # foreach column
    tv1.heading(column, text=column)  # let the column heading = column name
    tv1.column(column, width=50)  # set the columns size to 50px
tv1.place(relheight=1, relwidth=1)  # set the height and width of the widget to 100% of its container (frame1).
treescroll = tk.Scrollbar(frame1)  # create a scrollbar
treescroll.configure(command=tv1.yview)  # make it vertical
tv1.configure(yscrollcommand=treescroll.set)  # assign the scrollbar to the Treeview Widget
treescroll.pack(side="right", fill="y")  # make the scrollbar fill the yaxis of the Treeview widget

####


def File_dialog():
    """This function will open the file explorer"""
    filename = filedialog.askopenfilename(initialdir="/",
                                          title="Select A File",
                                          filetype=(("xlsx files", "*.xlsx"), ("all files", "*.*")))
    label_file.configure(text=filename)


def Load_excel_data():
    """ if your file is valid this will load the file into the treeview"""
    try:
        excel_filename = r"{}".format(label_file['text'])
        df = pd.read_excel(excel_filename)
    except ValueError:
        tk.messagebox.showerror("Information", "The File you have entered is invalid")
        return None

    df_rows = df.to_numpy().tolist()  # turns the dataframe into a list of lists
    for row in df_rows:
        tv1.insert("", "end", values=row)  # inserts each list into the treeview


root.mainloop()  # The mainloop for our tkinter Gui

【讨论】:

  • 您在上面分享的代码运行良好。我能够让表格显示在单独的窗口中。太感谢了。我试图将数据框的 sn-p 作为表格发布在新窗口中,但是我无法做到。但是上面的代码完全按照我想要的方式工作。 TYSM :)
  • 我们可以使用 Treeview 或任何其他方法在单个 tkinter 窗口中显示多个数据帧吗?任何形式的评论和建议都非常有帮助。 TYSM
  • 嗨@santoshdavuluri 是的,我相信你可以。查看“Tkinter PanedWindow 小部件”。然后,您可以使用它在每个窗格窗口中显示树视图。
  • 感谢@RamWill 的评论。使用 Tkinter Panned Window Widget,在一个 Tkinter 窗口中添加 3 个数据框会很好。但是,如果我必须在单个 Tkinter 窗口上查看 excel 工作簿中的所有 excel 表(10 张)怎么办?
猜你喜欢
  • 1970-01-01
  • 2016-11-20
  • 2018-11-07
  • 2021-10-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-12
相关资源
最近更新 更多