Python 如何将信息从GUI发送到excel电子表格?下面是我的代码
我希望用户使用我创建的GUI将信息保存到本工作手册中Python 如何将信息从GUI发送到excel电子表格?下面是我的代码,python,user-interface,button,tkinter,Python,User Interface,Button,Tkinter,我希望用户使用我创建的GUI将信息保存到本工作手册中 from tkinter import * from openpyxl import * 我知道“提交”按钮需要一个命令,但我不确定从哪里开始执行。我希望用户点击提交,数据进入excel工作表,然后在GUI窗口中,我希望它清除内容或自动关闭 master = Tk() wb = load_workbook('C:\\Users\\broc\\PycharmProjects\\GLTDB\\gltdb.xlsx') sheet = wb.ac
from tkinter import *
from openpyxl import *
我知道“提交”按钮需要一个命令,但我不确定从哪里开始执行。我希望用户点击提交,数据进入excel工作表,然后在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)
添加一个命令,将插入函数调用到submit按钮
# 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()
接下来,更新您的名称,并遵循此模板(或类似模板)为您的可变标签条目项创建。如问题注释中所述,在创建实例的同一行中调用网格可能会导致问题。与其说标签是静态的(在本例中),不如说标签是静态的,但输入框上的get()方法将返回错误“'NoneType'对象没有属性get()
您可以将下一部分添加到submit函数中,或者创建一个ClearEntryBox函数,以便在insert()函数完成时调用
#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)
insert命令正在尝试写入下一行(标题为列),而您的标题设置为#Excel工作表位置下的行标签,这应该与您的insert函数格式相匹配。。。或者通过添加到列而不是行来翻转插入函数以匹配位置
#to clear entry fields
dateEntry.delete(0,'end')
或
“我知道提交按钮需要一个命令”:为什么不这样做?阅读submit=按钮(master,text=“submit”).grid(行=5,列=1,棒=W,棒=4)
不要这样做。提交将设置为无。将.grid放在一个新行上,如submit.grid()
。所有标签都相同。这可能会解释为什么date.get
调用不起作用。
#to clear entry fields
dateEntry.delete(0,'end')
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()
.
.
.