0
所以我有一个表单,要求用户输入所有信息。只有输入所有信息才能保存信息。然而,一个奇怪的小错误已经出现。提交后没有选择复选框,然后切换到yes(是的,这是有意的),只要选择一个单选按钮,数据就会被保存。我不希望更改表单的属性,我只希望在if语句中检查时修复语义错误。程序中if语句检查期间的语义错误
#Import tkinter to make gui
from tkinter import *
from tkinter import ttk
from tkinter import messagebox
#Sets title and creates gui
root = Tk()
root.title("Entry Form")
def changed1(*args):
if yes.get()=="1":
no.set('0')
def changed2(*args):
if no.get()=="1":
yes.set('0')
#After sumbitting with no selected and then switching to yes afterwards as long as a radiobutton is seletected, data is saved?
def submit(*args): #Realign?
file = open("data.csv", "a")
if first.get() != "" and last.get() != "" and option.get() == 'Business' or option.get() == 'Residence' or option.get() == 'Other' and state.get() != "" and yes.get() == '1' or no.get() == '1':
if yes.get()=='1':
file.write(last.get().title() + "," + first.get().title() + "," + option.get() + "," + state.get() + '\n')
printer.set("Data Saved!")
else:
messagebox.showinfo("Unauthorized", "You must accept terms to continue.")
else:
messagebox.showinfo("Incomplete Information", "Please fill out all parts of the form")
#Configures column and row settings and sets padding
mainframe = ttk.Frame(root, padding="3 3 12 12")
mainframe.grid(column=0, row=0, sticky=(N, W, E, S))
mainframe.columnconfigure(0, weight=1)
mainframe.rowconfigure(0, weight=1)
first = StringVar()
last = StringVar()
option = StringVar()
statevar = StringVar()
printer = StringVar()
yes = StringVar()
no = StringVar()
#Widgets to put in name
firstvar = ttk.Entry(mainframe, width=15, textvariable=first)
firstvar.grid(column=2, row=1, sticky=(N, W))
lastvar = ttk.Entry(mainframe, width=15, textvariable=last)
lastvar.grid(column=2, row=2, sticky=(N, W))
ttk.Label(mainframe, text="First Name").grid(column=1, row=1, sticky=(W))
ttk.Label(mainframe, text="Last Name").grid(column=1, row=2, sticky=(W))
business = ttk.Radiobutton(mainframe, text='Business', variable=option, value='Business')
residence = ttk.Radiobutton(mainframe, text='Residence', variable=option, value='Residence')
other = ttk.Radiobutton(mainframe, text='Other', variable=option, value='Other')
business.grid(column=1, row=3, sticky=(W, E))
residence.grid(column=2, row=3, sticky=(W, E))
other.grid(column=3, row=3, sticky=(W, E))
state = ttk.Combobox(mainframe, textvariable=statevar, state='readonly')
state.grid(column=2, row=4, sticky=(W))
ttk.Label(mainframe, text="State").grid(column=1, row=4, sticky=W)
state['values'] = ('Alabama', 'Alaska', 'Arizona', 'Arkansas', 'California', 'Colorado', 'Connecticut', 'Delaware', 'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland', 'Massachussetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri', 'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New Mexico', 'New York', 'North Carolina', 'North Dakota', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvannia', 'Rhode Island', 'South Carolina', 'South Dakota', 'Tennessee', 'Texas', 'Utah', 'Vermont', 'Virginia', 'Washington', 'West Virginia', 'Wisconsin', 'Wyoming')
#Creates no checkbutton
yesvar = ttk.Checkbutton(mainframe, text='Yes', command=changed1, variable=yes)
yesvar.grid(column=2, row=5, sticky=(W, E))
#Creates yes check button
novar = ttk.Checkbutton(mainframe, text='No', command=changed2, variable=no)
novar.grid(column=3, row=5, sticky=(W, E))
ttk.Label(mainframe, text="Accept Policy").grid(column=1, row=5, sticky=(W))
#Adds a calculate button
ttk.Button(mainframe, text="Submit", command=submit).grid(column=3, row=9, sticky=W)
ttk.Label(mainframe, textvariable=printer).grid(column=2, row=9, sticky=(E))
root.bind('<Return>', submit)
#Keeps the gui running
root.mainloop()
请添加错误日志。 – harshil9968
带有'and'和'or'的复杂表达式,您应该总是使用圆括号将子表达式分组。评估顺序很可能与您所期望的不同。将“if”分布在多行上也会极大地提高可读性。 –