如何将tkinter OptionMenu&Entry小部件的内容保存到文件中?
问题描述:
我试图从一个选项菜单小部件和一个文件上的条目小部件保存用户输入,问题是用户输入的条目小部件没有正确保存。下面是我的代码。如何将tkinter OptionMenu&Entry小部件的内容保存到文件中?
from tkinter import *
class ComputeTax:
def __init__(self, master):
self.compute_tax_frame = Frame(master)
self.compute_tax_frame.pack()
self.tax_status_label = Label(self.compute_tax_frame, text="input tax status:")
self.tax_status_label.grid(row=0, column=0, sticky=E)
self.status_option = StringVar(self.compute_tax_frame)
self.status_option.set("S")
self.tax_status_option = OptionMenu(self.compute_tax_frame,
self.status_option, "S", "M", "M1", "M2", "M3", "M4",
command=self.save_ts)
self.tax_status_option.grid(row=0, column=1, sticky=W)
self.monthly_salary_label = Label(self.compute_tax_frame, text="input monthly pay:")
self.monthly_salary_label.grid(row=1, column=0, sticky=E)
self.salary_input = StringVar(self.compute_tax_frame)
self.salary_input.set("0.00")
self.monthly_salary_input = Entry(self.compute_tax_frame,
textvariable=self.salary_input)
self.monthly_salary_input.grid(row=1, column=1)
self.calculate_button = Button(self.compute_tax_frame, text="Save & Calculate now!")
self.calculate_button.grid(row=3, columnspan=2)
def save_ts(self, value):
tax = value
pay = self.salary_input.get()
with open("monthly_net_pay", "w") as file:
file.write("{}\n".format(tax))
file.write("{}\n".format(pay))
file.close()
frame = Tk()
a_compute_class = ComputeTax(frame)
frame.title("Monthly Tax & Net Pay Computation")
frame.mainloop()
答
我看到你的代码有几个问题。其中主要的一个是OptionMenu
部件没有command
选项/参数,所以command=self.save_ts
没有完成任何事情(我有点惊讶的是,没有出现异常,从你试图指定它提出。)
的解决这个问题的方法是在创建calculate_button
时使用它。
第二个是save_ts()
函数期望value
参数,但不会传递给它。要解决该问题,请先从函数def
中删除参数,然后从名为status_option
的Stringvar
小部件中获取所需的值。
这里是你的代码应用了建议的修复:
from tkinter import *
class ComputeTax:
def __init__(self, master):
self.compute_tax_frame = Frame(master)
self.compute_tax_frame.pack()
self.tax_status_label = Label(self.compute_tax_frame,
text="input tax status:")
self.tax_status_label.grid(row=0, column=0, sticky=E)
self.status_option = StringVar(self.compute_tax_frame)
self.status_option.set("S")
self.tax_status_option = OptionMenu(self.compute_tax_frame,
self.status_option,
"S", "M", "M1", "M2", "M3", "M4")
self.tax_status_option.grid(row=0, column=1, sticky=W)
self.monthly_salary_label = Label(self.compute_tax_frame,
text="input monthly pay:")
self.monthly_salary_label.grid(row=1, column=0, sticky=E)
self.salary_input = StringVar(self.compute_tax_frame)
self.salary_input.set("0.00")
self.monthly_salary_input = Entry(self.compute_tax_frame,
textvariable=self.salary_input)
self.monthly_salary_input.grid(row=1, column=1)
self.calculate_button = Button(self.compute_tax_frame,
text="Save & Calculate now!",
command=self.save_ts)
self.calculate_button.grid(row=3, columnspan=2)
def save_ts(self):
tax = self.status_option.get()
pay = self.salary_input.get()
with open("monthly_net_pay", "w") as file:
file.write("{}\n".format(tax))
file.write("{}\n".format(pay))
# file.close() # automatic when using `with`
frame = Tk()
a_compute_class = ComputeTax(frame)
frame.title("Monthly Tax & Net Pay Computation")
frame.mainloop()
@马蒂诺哇!作品完美无瑕。非常感谢! – raymund
您的欢迎,并在这种情况下,请接受我的答案。参见[_当有人回答我的问题时我应该怎么做?](http://*.com/help/someone-answers) – martineau
P.S.我也想在你的编码很好的tkinter应用程序上恭维你。顺便说一句,[新墨西哥科技](http://www.nmt.edu/)有一个很好的在线[** _ Tkinter参考_ **](http://infohost.nmt.edu/tcc/help/pubs/tkinter/ web/index.html)你可能会觉得有用。 – martineau