为什么 openpyxl 不能与 tkinter 一起使用?

why does openpyxl not working with tkinter?

我是一名小程序员,我在使用 openpyxl 和 Tkinter 组合时遇到了一些问题。 我正在使用 Gui 制作一个 Excel 编辑器,但是当我使用它时,它没有编辑过一个单元格。 代码的详细信息是:

Python 3.9, Module Used: only Tkinter and openpyxl

import tkinter as tk
from openpyxl import *


#Excel FIle Setup
xlfile = load_workbook(filename="main.xlsx")
sheet = xlfile.active

#Defining Save Function
def save():
    cell = cellIn
    xlfile.save(filename="main.xlsx")

#Main Window Setup
app = tk.Tk(screenName='Excel Editor', baseName='Gui for Editing', className='Excel Editor', useTk=1)
app.title('Excel Editor')
frame = tk.Frame(app)
frame.pack()

#Cell Name Block and Entry
tk.Label(frame, text = "Cell Name :").grid(row=0)
one = tk.StringVar()
cellNameEntry = tk.Entry(frame, text = one).grid(row = 0, column = 1)
cell = (one.get())

#Cell Input Block and Entry
tk.Label(frame, text = "Cell Input :").grid(row=1)
two = tk.StringVar()
cellInput = tk.Entry(frame, two).grid(row=1, column = 1)
cellIn = (two.get())

#SAVE Button With Quit Button
tk.Button(frame, text="SAVE", command=save).grid(row = 2)
tk.Button(frame, text="QUIT", command=quit).grid(row = 2, column = 1)

app.mainloop()

我在我的代码中看不到任何错误,但如果有,请回答。 这是我的第一个问题,所以我使用了非常正式、温和的语言

您发布的代码中实际上没有任何代码可以更新 sheet 的任何单元格。

下面是一个基于您的代码更新用户指定单元格的简单示例:

import tkinter as tk
from openpyxl import load_workbook

xlfile = load_workbook(filename='main.xlsx')
sheet = xlfile.active

def save():
    xlfile.save(filename='main.xlsx')

def update():
    sheet[cell.get()] = value.get()

app = tk.Tk()
app.title('Excel Editor')

frame = tk.Frame(app)
frame.pack()

tk.Label(frame, text='Cell Name:').grid(row=0, column=0)
cell = tk.StringVar()
tk.Entry(frame, textvariable=cell).grid(row=0, column=1)

tk.Label(frame, text='Cell Value:').grid(row=1, column=0)
value = tk.StringVar()
tk.Entry(frame, textvariable=value).grid(row=1, column=1)

tk.Button(frame, text='Update Cell', command=update).grid(row=2, column=1)
tk.Button(frame, text='Save', command=save).grid(row=3, column=0)
tk.Button(frame, text='Quit', command=app.destroy).grid(row=3, column=1)

app.mainloop()