如何将用户输入从TKINTER输入小部件写入XLSX?我应该使用其他模块吗?
from tkinter import *
import xlsxwriter
def output():
c = Toplevel(root)
c.title =("Main")
c.geometry =('')
e= Entry(c, width=20).grid(row=0, column=1, sticky=W, padx=10)
l=Label(c, text="Current Value").grid(row = 0, column=0, sticky=W, padx=10)
e2 = Entry(c, width=20).grid(row=1, column=1, sticky=W, padx=10)
l2= Label(c, text="New Value").grid(row = 1, column=0, sticky=W, padx=10)
b=Button(c, text="Submit",command= write_to_xlsx).grid(row= 1, column=2, sticky=E, padx=10)
def write_to_xlsx():
workbook =xlsxwriter.Workbook('tkintertest18.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write_string('C1', 'e2.get()')
workbook.close()
root = Tk()
root.title("Main Menu")
root.geometry('400x400+230+130')
Button(root, text="1", command=output).grid(row =0, column= 2)
root.mainloop()
您应该几乎始终在涉及TKINTER时使用类。因此,这是您上面代码的工作原型。有多个问题。一个是,当您在小部件旁边拍打grid
而不是将它们放在新线上时,grid
返回无,而不是对象。将应用程序作为类实现,使其他功能可以访问GUI组件(在这种情况下为self.e2(。另一个错误是,您已经单击了" e2.get(("调用,这在技术上是字符串。因此,删除引号可以解决。可能还有其他事情...
import xlsxwriter
class XLwriter:
def __init__(self):
c = Toplevel(root)
c.title =("Main")
c.geometry =('')
self.e= Entry(c, width=20).grid(row=0, column=1, sticky=W, padx=10)
self.l=Label(c, text="Current Value").grid(row = 0, column=0, sticky=W, padx=10)
self.e2 = Entry(c, width=20)
self.e2.grid(row=1, column=1, sticky=W, padx=10)
self.l2= Label(c, text="New Value").grid(row = 1, column=0, sticky=W, padx=10)
self.b=Button(c, text="Submit",command=self.write_to_xlsx).grid(row= 1, column=2, sticky=E, padx=10)
def write_to_xlsx(self):
workbook =xlsxwriter.Workbook('tkintertest18.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write_string('C1', self.e2.get())
workbook.close()
root = Tk()
root.title("Main Menu")
root.geometry('400x400+230+130')
app = XLwriter()
#Button(root, text="1", command=output).grid(row =0, column= 2)
root.mainloop()
看到罗恩(Ron
请记住,使用xlsxwriter
可以从电子表格中读取一种方法,因此对于标记为"Current Value"
的入口字段,您需要使用其他Excel库来填充该字段,并使用电子表格中的数据填充该字段。
确保您是否要与不直接使用窗口小部件直接使用几何管理器的小部件进行交互。这将不会将任何试图与之互动的事物归还。而是在创建小部件后的下一行上,您可以使用窗口小部件变量名称,然后可以使用选择的几何管理器(grid(), pack(), place()
(。这将使我们能够与小部件进行交互,而不会出现几何经理返回的问题。
为了使您能够在output()
功能外与e2
进行交互,您将需要将E2分配给global
名称空间。您可以通过简单地在output()
函数中添加global e2
来做到这一点。
注意:只要可能,最好避免使用全局,这是使用更面向对象的编程方法(类(的一个令人信服的理由,因为使用类属性时不需要使用全局。
from tkinter import *
import xlsxwriter
root = Tk()
root.title("Main Menu")
#root.geometry('400x400+230+130')
def output():
global e2
c = Toplevel(root)
c.title = ("Main")
e = Entry(c, width = 20)
e.grid(row = 0, column = 1, sticky = W, padx = 10)
l = Label(c, text = "Current Value")
l.grid(row = 0, column = 0, sticky = W, padx = 10)
e2 = Entry(c, width=20)
e2.grid(row = 1, column = 1, sticky = W, padx = 10)
l2 = Label(c, text = "New Value")
l2.grid(row = 1, column = 0, sticky = W, padx = 10)
b = Button(c, text = "Submit",command = write_to_xlsx)
b.grid(row = 1, column = 2, sticky = E, padx = 10)
def write_to_xlsx():
workbook = xlsxwriter.Workbook('tkintertest18.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write_string('C1', e2.get())
workbook.close()
btn = Button(root, text = "1", command = output)
btn.grid(row = 0, column = 2)
root.mainloop()