如何将信息从GUI发送到excel电子表格?下面是我的代码


from tkinter import *
from openpyxl import *

我想通过用户使用我创建的GUI将信息保存到本工作手册中。

master = Tk()
wb = load_workbook('C:\Users\broc\PycharmProjects\GLTDB\gltdb.xlsx')
sheet = wb.active
# Excel sheet location
sheet.cell(row=1, column=1).value = "Date"
sheet.cell(row=2, column=1).value = "Production Hour"
sheet.cell(row=3, column=1).value = "Production"
sheet.cell(row=4, column=1).value = "Scrap"
sheet.cell(row=5, column=1).value = "Operators"


# Function to take data from GUI put into Excel

def insert():
if (date.get() == "" and
prodhour.get() == "" and
production.get() == "" and
scrap.get() == "" and
operators.get() == ""):
print("empty input")
else:
current_row = sheet.max_row
current_column = sheet.max_column
sheet.cell(row=current_row + 1, column=1).value = date.get()
sheet.cell(row=current_row + 1, column=2).value = prodhour.get()
sheet.cell(row=current_row + 1, column=3).value = production.get()
sheet.cell(row=current_row + 1, column=4).value = scrap.get()
sheet.cell(row=current_row + 1, column=5).value = operators.get()
wb.save('C:\Users\broc\PycharmProjects\GLTDB\gltdb.xlsx')
date.focus_set()
clear()
# GUI
master.title("Enter Production results here.")
master.geometry("350x200")
master.config(background='lightblue', borderwidth=5)
# Labels for GUI
date = Label(master, text="Date", bg='lightblue').grid(row=0)
prodhour = Label(master, text="Production Hour", bg='lightblue').grid(row=1)
production = Label(master, text="Production", bg='lightblue').grid(row=2)
scrap = Label(master, text="Scrap", bg='lightblue').grid(row=3)
operators = Label(master, text="Operators", bg='lightblue').grid(row=4)
# Entries for GUI
date = Entry(master).grid(row=0, column=1)
prodhour = Entry(master).grid(row=1, column=1)
production = Entry(master).grid(row=2, column=1)
scrap = Entry(master).grid(row=3, column=1)
operators = Entry(master).grid(row=4, column=1)

我知道提交按钮需要一个命令,但我不确定从哪里开始。我希望用户点击提交,数据进入excel表格,然后在GUI窗口中,我希望它清除内容或自动关闭。

# Command Buttons
submit = Button(master, text="Submit").grid(row=5, column=1, stick=W, pady=4)
Button(master, text='Cancel', command=master.quit).grid(row=5, column=2, sticky=W, pady=4)
mainloop()

添加一个命令,将插入函数调用到提交按钮。

#modify the submit button
submitBtn = Button(master, text="Submit", command = insert)
submitBtn.grid(row=5, column=1, stick=W, pady=4)

接下来更新您的名称,并按照这个模板(或类似的模板(为您的变量标签条目项。正如问题注释中提到的那样,在创建实例的同一行调用网格可能会导致问题。与其说标签是静态的,不如说它们是静态的(在这种情况下(,但是入口框上的get((方法将返回错误"'NoneType'对象没有属性get(("。

#Entry field initialize variable 
date = StringVar()
# create entry widget and tie it to variable
dateLabel = Label(...)
dateEntry = Entry(master, textvariable = date)
dateLabel.grid(row = 0, column = 0)
dateEntry.grid(row = 0, column = 1) 

您可以将下一部分添加到submit函数中,或者创建一个clearEntryBoxes函数,以便在insert((函数完成时调用。

#to clear entry fields
dateEntry.delete(0,'end')

insert命令正在尝试写入下一行(页眉是列(,当您的页眉设置为#Excel工作表位置下的行标签时,它应该与您的插入函数格式相匹配。。。或者通过添加到列而不是行来翻转插入函数以匹配位置

sheet.cell(row=1, column=1).value = "Date"
sheet.cell(row=1, column=2).value = "Production Hour"
.
.
.

sheet.cell(row=1, column=current_column + 1).value = dateEnt.get()
sheet.cell(row=2, column=current_column + 1).value = prodhourEnt.get()
.
.
.

相关内容

最新更新