Board logo

标题: [原创代码] Python写了个小工具,个人所得税计算器 [打印本页]

作者: cfwyy77_bat    时间: 2018-10-8 10:23     标题: Python写了个小工具,个人所得税计算器

python区冷清,写了个自娱自乐的工具,2018年新个税起征点的个人所得税计算器(工资)。
GUI的程序之前也没怎么写过,用的是python自带的tkinter库,好处是使用简单,python自带不用再装第三方的库。
缺点是功能相对有限(对比pyqt5这类库),中文资料较少,查个文档都不是很方便,好在我这个功能巨简单,tk足够用了,边查就边写出来了。
使用就是输入 税前工资和扣掉的五险一金总额就可以了。
大家轻拍。
  1. import tkinter as tk
  2. import tkinter.ttk as ttk
  3. class TaxCalc(object):
  4.     taxPoint = 5000
  5.     def __init__(self):
  6.         self.top = tk.Tk()
  7.         self.top.title("个人所得税计算器")
  8.         sw,sh = self.top.winfo_screenwidth(),self.top.winfo_screenheight()
  9.         ww,wh = 245,280
  10.         self.top.geometry("{}x{}+{}+{}".format(ww,wh,(sw-ww)//2,(sh-wh)//2))
  11.         self.top.resizable(0,0)
  12.         self.createWdiget()
  13.         self.top.wm_attributes('-topmost',1)  #主窗口置顶
  14.         self.top.mainloop()
  15.     def createWdiget(self):
  16.         self.beforeTaxLable = tk.Label(self.top,text="税前工资:")
  17.         self.beforeTaxLable.grid(row=0,column=0)
  18.         self.beforeTaxEntry = tk.Entry(self.top)
  19.         self.beforeTaxEntry.grid(row=0,column=1,pady=10,padx=10)
  20.         self.insuranceLable= tk.Label(self.top,text="扣除的保险:")
  21.         self.insuranceLable.grid(row=1,column=0)
  22.         self.insuranceEntry = tk.Entry(self.top)
  23.         self.insuranceEntry.grid(row=1,column=1,pady=10)
  24.         #绑定事件,离开焦点或按回车就试着调用计算的函数
  25.         self.insuranceEntry.bind("<FocusOut>",self.calcTax)
  26.         self.insuranceEntry.bind("<Return>",self.calcTax)
  27.         self.sep = ttk.Separator(self.top, orient=tk.HORIZONTAL)
  28.         self.sep.grid(row=2,column=0,columnspan=2,sticky="ew")
  29.         self.taxAmoutLable = tk.Label(self.top,text="应纳税额:")
  30.         self.taxAmoutLable.grid(row=3,column=0)
  31.         self.taxAmoutEntry = tk.Entry(self.top)
  32.         self.taxAmoutEntry.grid(row=3,column=1,pady=10)
  33.         self.taxLable = tk.Label(self.top,text="应缴个税:")
  34.         self.taxLable.grid(row=4,column=0)
  35.         self.taxEntry = tk.Entry(self.top)
  36.         self.taxEntry.grid(row=4,column=1,pady=10)
  37.         self.afterTaxLable = tk.Label(self.top,text="税后工资:")
  38.         self.afterTaxLable.grid(row=5,column=0)
  39.         self.afterTaxEntry = tk.Entry(self.top)
  40.         self.afterTaxEntry.grid(row=5,column=1,pady=10)
  41.         self.calcBtn = ttk.Button(self.top,text="计算")
  42.         self.calcBtn.grid(row=6,column=1,pady=10)
  43.         self.calcBtn.bind("<Button-1>",self.calcTax)   #不能直接用Button的command参数绑定,commmand默认不传event参数
  44.     def calcTax(self,event):     #做为事件的回调函数须要有event参数
  45.         try:
  46.             beforeTax = float(self.beforeTaxEntry.get())
  47.             insurance = float(self.insuranceEntry.get())
  48.         except ValueError as e:   #空或非数字转成浮点时都会捕获,但不做响应
  49.             pass
  50.         else:
  51.             taxAmout = beforeTax - insurance - TaxCalc.taxPoint if (beforeTax - insurance) > TaxCalc.taxPoint else 0
  52.             if taxAmout < 3000:
  53.                 tax = taxAmout*0.03
  54.             elif taxAmout < 12000:
  55.                 tax = taxAmout*0.1-210
  56.             elif taxAmout < 25000:
  57.                 tax = taxAmout*0.2-1410
  58.             elif taxAmout < 35000:
  59.                 tax = taxAmout*0.25-2660
  60.             elif taxAmout < 55000:
  61.                 tax = taxAmout*0.3-4410
  62.             elif taxAmout < 80000:
  63.                 tax = taxAmout*0.35-7160
  64.             else:
  65.                 tax = taxAmout*0.45-15160
  66.             afterTax = beforeTax - insurance -tax
  67.             taxAmout = "{0:.2f}".format(taxAmout)
  68.             tax = "{0:.2f}".format(tax)
  69.             afterTax = "{0:.2f}".format(afterTax)
  70.             self.taxAmoutEntry.delete(0,tk.END)
  71.             self.taxAmoutEntry.insert(0, taxAmout)
  72.             self.taxEntry.delete(0,tk.END)
  73.             self.taxEntry.insert(0,tax)
  74.             self.afterTaxEntry.delete(0,tk.END)
  75.             self.afterTaxEntry.insert(0, afterTax)
  76. if __name__ == '__main__':
  77.     s = TaxCalc()
复制代码

作者: 523066680    时间: 2018-10-8 10:29

支持一下,这些板块不太活跃。
作者: Blakelee    时间: 2020-6-3 18:01

厉害呀!作为python小白得好好学习!




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2