Что я пытаюсь сделать:
Я пытаюсь создать небольшую программу в tkinter, где она рассчитывает комиссию для клиента на основе характеристик клиента, которые пользователь должен установить для некоторых флажков. Каждый флажок имеет значение оценки, которое будет суммой, когда пользователь нажмет кнопку sh, и эта сумма будет умножена на 500 фунтов стерлингов (каждая точка составляет 500 фунтов стерлингов в виде сборов)
Проблема:
необходимо выбрать группу из 3 флажков (с переменной = var2), прежде чем пользователь нажмет кнопку «Рассчитать комиссионные». Я хотел бы, чтобы, если пользователь забыл установить один из флажков в переменной = var 2, на экране должно появиться всплывающее окно с сообщением: «Ошибка, вы не установили обязательный флажок, пожалуйста, проверьте еще раз, прежде чем рассчитывать сборы "
В программе, которую я пытаюсь сделать, есть еще 4 или 5 групп флажков, которые нужно выбрать один раз, прежде чем рассчитывать сборы (здесь я просто вставил часть программы, иначе она слишком длинная)
Что я пробовал:
in the def addtolist() i tried to put an if statement to check if, before the program calculate the
fees, the checkboxes with var2 has been selected once. Unfurtunately this does not work, here the
error message from python:
Исключение в обратном вызове Tkinter (последний последний вызов):
Файл "C: \ Users \ sheha \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ tkinter__init __. Py ", строка 508, в get return self._tk.getint (value) _tkinter.TclError: ожидаемое целое число, но полученное" "
Во время обработки выше исключения произошло другое исключение:
Трассировка (последний последний вызов): файл "C: \ Users \ sheha \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ tkinter__init __. py", строка 1705, в call return self.fun c (* args) Файл "test_final.py", строка 20, в addtolist, если var2.get ()! = "": File "C: \ Users \ sheha \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ tkinter__init __. py ", строка 510, в get return int (self._tk.getdouble (value)) _tkinter.TclError: ожидается число с плавающей точкой, но получено" "*
На основании этой ошибки, если я пытаюсь изменить значение флажка с var2 с "" на 0 (ноль), один из блоков в этой группе будет автоматически выбран при запуске программы (Я хотел бы избежать выбора по умолчанию, если это возможно)
Можете ли вы помочь мне?
Пожалуйста, найдите код ниже Спасибо
import tkinter as tk
from tkinter import *
from tkinter import messagebox
# --- functions ---
def on_configure(event):
# update scrollregion after starting 'mainloop'
# when all widgets are in canvas
canvas.configure(scrollregion=canvas.bbox('all'))
def addtolist():
global List
List = []
if var2.get() != "":
for item in varList:
if item.get() != "":
List.append(item.get())
sum_list =sum(List)
fees=sum_list*500
messagebox.showinfo('Fee calculated', 'This client has scored %s points and the fees for the audit job is: £%s' %(sum_list, fees))
else:
messagebox.showerror('Mandatory checkboxe has been skipped', 'Error, you have not checked a mandatory checkbox, please check again before calculate the fees')
# --- main ---
List = []
varList = []
root = tk.Tk()
root.title("Audit Pricing Tool")
root.geometry("500x500")
# --- create canvas with scrollbar ---
canvas = tk.Canvas(root)
canvas.pack(side=tk.LEFT, fill='both', expand=True)
scrollbar = tk.Scrollbar(root, command=canvas.yview)
scrollbar.pack(side=tk.LEFT, fill='y')
canvas.configure(yscrollcommand = scrollbar.set)
# update scrollregion after starting 'mainloop'
# when all widgets are in canvas
canvas.bind('<Configure>', on_configure)
# --- put frame in canvas ---
frame = tk.Frame(master=root, width=980, height=980)
canvas.create_window((0,0), window=frame, anchor='nw')
#frame.pack_propagate(0) #Don't allow the widgets inside to determine the frame's width / height
#frame.pack(fill=tk.BOTH, expand=True) #Expand the frame to fill the root window
# --- add widgets in frame ---
label_title=Label(frame, text="Pricing Tool", height=3, fg="blue", font=(20))
label_title.grid(row=1, column=1, columnspan=2 , sticky=N)
#this checkbox need to be selected by default
var1 = IntVar()
cb1 = Checkbutton(frame, text="Base Price (applies to all)", variable=var1,
onvalue=15, offvalue="")
cb1.grid(row=11, column=1, sticky=W)
cb1.select()
#label for Appointment/reappointment (need to select only one of these 3 checkboxes before calculate the fees
# if the user skip this section and try to calculate the fees - it should get an error pop up and tell to the use
# to check on of the mandatory boxes
# )
lb1=Label(frame, text="Appointment/reappointment (select one)", height=3)
lb1.grid(row=13, column=1, sticky=N)
var2 = IntVar()
cb2 = Checkbutton(frame, text="taking over from another auditor", variable=var2,
onvalue=5, offvalue=0)
cb2.grid(row=14, column=1,sticky=W)
cb3 = Checkbutton(frame, text="First year that accounts require audit", variable=var2,
onvalue=3, offvalue=0)
cb3.grid(row=15, column=1,sticky=W)
cb4 = Checkbutton(frame, text="Continuing engagement", variable=var2,
onvalue=0, offvalue=0)
cb4.deselect()
cb4.grid(row=16, column=1,sticky=W)
# for the checkboxes below, you can select or not select (it is not mandatory)
lb8=Label(frame, text="Additional complexities (select all that apply)", height=3)
lb8.grid(row=66, column=1, sticky=N)
var9 = IntVar()
cb38 = Checkbutton(frame, text="Accounts prepared under IFRS / FRS 101", variable=var9,
onvalue=2, offvalue=0)
cb38.grid(row=67, column=1,sticky=W)
var10 = IntVar()
cb39 = Checkbutton(frame, text="Change of accounting software", variable=var10,
onvalue=2, offvalue=0)
cb39.grid(row=68, column=1,sticky=W)
var11 = IntVar()
cb40 = Checkbutton(frame, text="Stock", variable=var11,
onvalue=1, offvalue=0)
cb40.grid(row=69, column=1,sticky=W)
var12 = IntVar()
cb41 = Checkbutton(frame, text="Stocktake attendance", variable=var12,
onvalue=2, offvalue=0)
cb41.grid(row=70, column=1,sticky=W)
var24 = IntVar()
cb50 = Checkbutton(frame, text="Turnover < £1 million", variable=var24,
onvalue=-1, offvalue=0)
cb50.grid(row=86, column=1,sticky=W)
varList.append(var1)
varList.append(var2)
varList.append(var9)
varList.append(var10)
varList.append(var11)
varList.append(var12)
varList.append(var24)
b1 = Button(frame, text="Calculate fees", command=addtolist)
b1.grid(row=100, column=1, sticky=N)
frame.mainloop()
root.mainloop()