繁体   English   中英

How to display a data frame read into python through Pandas in a window using Tkinter on Python 3.8?

[英]How to display a data frame read into python through Pandas in a window using Tkinter on Python 3.8?

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

我目前正在使用 Python 3.8。 欢迎任何形式的建议/意见。 太感谢了:)。

我在下面的代码中提供了有关如何执行此操作的注释,正如注释中提到的那样,执行此操作的一种方法是使用 TreeView 小部件。

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

表数据

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM