簡體   English   中英

如何通過使用 tkinter Python 從 excel 文件導入數據來創建具有動態列寬的表?

[英]How should I create a table with dynamic column width by importing data from an excel file using tkinter Python?

我想將任何示例 MS Excel 電子表格中的所有數據(標題、列、行)導入 tkinter 框架。 我試過這樣做,但沒有奏效。 有人可以幫我完成這項任務嗎? 謝謝!

這是我到目前為止開發的代碼,但在此代碼中,有通過列導入數據的按鈕。 我的期望是直接導入 excel 文件中的所有行、列,而無需單擊任何按鈕。 列的寬度也應該重新調整大小。

from tkinter import *
from openpyxl.workbook import Workbook
from openpyxl import load_workbook

root = Tk()
root.title('Excel Sheet via Tkinter')
# root.iconbitmap('')
root.geometry("500x800")

# Create workbook instance
wb = Workbook()

# Load existing workbook
wb = load_workbook('test.xlsx')

# Create active worksheet
ws = wb.active

# Create variable for Column A
column_a = ws['A']
column_b = ws['B']

def get_a():
    list = ''
    for cell in column_a:
        list = f'{list + str(cell.value)}\n'
    
    label_a.config(text=list)
    
def get_b():
    list = ''
    for cell in column_b:
        list = f'{list + str(cell.value)}\n'
    
    label_b.config(text=list)

ba = Button(root, text="Get Column A", command=get_a)
ba.pack(pady=20)

label_a = Label(root, text="")
label_a.pack(pady=20)

bb = Button(root, text="Get Column B", command=get_b)
bb.pack(pady=20)

label_b = Label(root, text="")
label_b.pack(pady=20)

root.mainloop()

PS:我對 Python 很陌生,所以請和我一起裸露。

使用只讀模式從 excel 中獲取所有數據以在 Openpyxl 中列出,每個子列表代表一行,因此您可以通過len()在每一行上找到列號。 然后返回 tkinter 創建與列表中總行數匹配的幀數。 每個幀創建由每行列數確定的注釋數。 並將列表中的所有單元格信息分配給 tkinker 的筆記

這只是基本的框架工作,歡迎您在tkinter中調整顏色和大小等內容。 試試看:

def excel_data_to_list(excel):
    from openpyxl import load_workbook
    wb = load_workbook(filename=excel, read_only=True)
    ws = wb.worksheets[0]  # you can change it by making an arguments to input sheetname,
    info = []
    for row in ws.rows:
        info_row =[]
        for cell in row:
            info_row.append(cell.value)
        info.append(info_row)
    wb.close()
    return info

def excel_sheet_via_tkinter(excel):
    import tkinter as tk
    root = tk.Tk()
    root.title('Excel Sheet via Tkinter')
    root.geometry("500x800")   # you may want to define a better size to fit all data from excel

    info       = excel_data_to_list(excel)
    for row_num, row in enumerate(info):
        for col_num, cell in enumerate(row):
            label = tk.Label(root, text=cell)    # you can add color in each label, this code hasn't involve this part yet
            label.grid(row=row_num, column=col_num)
    root.mainloop()

# run everything now!!!
excel = 'import_export.xlsx'   # this is my file name, but input your
excel_sheet_via_tkinter(excel)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM