Python 如何保存tkinter选项功能表&;输入窗口小部件';文件的内容?
我试图将来自optionmenu小部件和entry小部件的用户输入保存到文件中,问题是entry小部件中的用户输入未正确保存。下面是我的代码Python 如何保存tkinter选项功能表&;输入窗口小部件';文件的内容?,python,python-3.x,widget,optionmenu,Python,Python 3.x,Widget,Optionmenu,我试图将来自optionmenu小部件和entry小部件的用户输入保存到文件中,问题是entry小部件中的用户输入未正确保存。下面是我的代码 from tkinter import * class ComputeTax: def __init__(self, master): self.compute_tax_frame = Frame(master)
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
option/参数,因此command=self.save\ts
无法完成任何任务(我有点惊讶,您尝试指定它时没有引发异常)
解决此问题的方法是在创建calculate\u按钮时使用supply it
第二个是save_ts()
函数需要一个值
参数,但不会传递给它。要纠正这一点,首先从函数def
中删除参数,然后从您命名为status\u选项的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()
不客气,既然如此,请接受我的回答。请注意,我还想对您的tkinter应用程序表示赞赏。顺便说一句,有一个很好的在线你可能会发现有用的。再次感谢你。同样感谢您提供的关于接受答案的提示。