python - 如何将 tkinter OptionMenu 和 Entry 小部件的内容保存到文件?

标签 python python-3.x widget optionmenu

我正在尝试将选项菜单小部件和条目小部件中的用户输入保存在文件上,问题是条目小部件中的用户输入未正确保存。下面是我的代码。

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/

相关文章:

python字典更新方法来扩展字典

python3 os模块路径拼接错误?

python - “SQLite”数据库被锁定错误

python - 如何向带有画线的小部件添加滚动条?

Flutter - 文本小部件的椭圆尺寸存在空间问题

安卓小部件 :how to determine which button was clicked?

python - 正确安装pyPDF2后导入错误

python 3.4 字符串操作 - 截断前导零

python - 变量的惰性评估

python - 在 Tkinter、Python 3 中设置窗口尺寸