我正在尝试将选项菜单小部件和条目小部件中的用户输入保存在文件上,问题是条目小部件中的用户输入未正确保存。下面是我的代码。
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
中删除参数。而是从 Stringvar
获取所需的值您命名为 status_option
的小部件.
这是您的代码,并应用了建议的修复:
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()
关于python - 如何将 tkinter OptionMenu 和 Entry 小部件的内容保存到文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43561466/