Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何保存tkinter选项功能表&;输入窗口小部件';文件的内容?_Python_Python 3.x_Widget_Optionmenu - Fatal编程技术网

Python 如何保存tkinter选项功能表&;输入窗口小部件';文件的内容?

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)

我试图将来自optionmenu小部件和entry小部件的用户输入保存到文件中,问题是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
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应用程序表示赞赏。顺便说一句,有一个很好的在线你可能会发现有用的。再次感谢你。同样感谢您提供的关于接受答案的提示。