如何将用户输入从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()
答案 0 :(得分:3)
当涉及tkinter时,你应该总是使用一个类。所以这是上面代码的工作原型。有很多问题。一个是当您在小部件旁边拍打grid
而不是将它们放在新行上时,grid
将返回None,而不是对象。将应用程序实现为类使其他功能可以访问GUI组件(在本例中为self.e2)。另一个错误是你曾单引“e2.get()' call,技术上是一个字符串。所以删除引号修复了这一点。可能还有其他事情......
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()
答案 1 :(得分:2)
看到Ron已经为您提供了一个执行此任务的类,我将使用非类方法进行响应,以便更准确地反映您当前的代码。
请注意,使用--executor-memory
无法从电子表格中读取内容,因此对于标有xlsxwriter
的输入字段,您需要使用其他excel库来填充该字段包含电子表格中的数据。
确保您是否要与不使用几何管理器的窗口小部件进行交互,并创建窗口小部件。这将向尝试与之交互的任何内容返回None。在创建窗口小部件后的下一行中,您可以使用窗口小部件变量名称,然后使用您选择的几何管理器("Current Value"
)。这将允许我们与窗口小部件进行交互,而几何管理器不会返回None。
为了能够在grid(), pack(), place()
函数之外与e2
进行交互,您需要将e2分配给output()
命名空间。您只需在global
功能中添加global e2
即可完成此操作。
注意:尽可能避免使用全局,这是使用更多面向对象编程方法(类)的一个令人信服的理由,因为在使用类属性时不需要使用全局。
output()