Итак, я создаю проект Python, в котором я извлекаю строки из базы данных, используя mysqlite.я вызываю функцию mark (diff), которая извлекает строки в зависимости от значения, введенного пользователем через tkinter OptionMenu, добавляет строки в список и возвращает их обратно в функцию «question».
Проблема заключается в том, что после того, как я вызову mark (diff) из функции «question», он не ожидает завершения функции mark () и читает входные данные, вместо этого он продолжает следующий оператор выполнения
я где-то читал о методе after () в tkinter, но я не был уверен, применяется ли он здесь или как его следует применять
def mark(diff):
diff=diff.upper()
win=Tk()
win.title("Question Paper Generator")
win.configure(background='#ECECEC')
win.geometry('650x500')
j=0
t1 = StringVar(win)
t1.set("THEORITICAL"
obj1 = []
def clicked1():
t11=t1.get()
sql_id_cmd1 = ("SELECT MAX(ID) FROM "+diff+"4"+str(t11))
cur.execute(sql_id_cmd1)
data1=cur.fetchone()
i1 = data1[0]
rand1 = random_num_gen(i1)
sql_in_cmd1 = ("SELECT QS FROM "+diff+"4"+str(t11)+" WHERE "+"ID = "+str(rand1[j]))
cur.execute(sql_in_cmd1)
obj1.append(list(cur.fetchone()))
return obj1
l4 = Label(win, font="SF\Mono 16 bold", text = "Enter Question Type",background='#ECECEC',justify='left')
l4.grid(column=0, row=1,padx=20,pady=10)
frame5=Frame(win)
frame5.grid(column=0,row=2,padx=0,pady=10)
optionm = OptionMenu(frame5,t1,"THEORITICAL","PROOF","MCQ","NUMERICAL")
optionm.grid(column=0, row=0)
frame4=Frame(win)
frame4.grid(column=0,row=11,padx=0,pady=10)
btn = Button(frame4, text="Submit",command=clicked1)
btn.grid(column=0, row=0)
def questions(diff):
obj1=[]
obj2=[]
obj3=[]
obj1=mark("Easy")
obj2=mark("Easy")
obj3=mark("Easy")
pdf_gen(obj1,obj2,obj3)
функция mark () возвращает список в obj1, но вместоожидая ввода от пользователя, он немедленно выполняет функцию pdf_gen с obj1, obj2, ob3 как None, программа должна ожидать возвращенный список в obj1, obj2, obj3 и затем только вызывать pdf_gen ()
РЕДАКТИРОВАТЬ -
Я попытался использовать кнопку, как это было предложено, но ошибка все еще сохраняется
def questions(diff):
obj1=[]
obj2=[]
obj3=[]
obj1=mark("Easy")
obj2=mark("Easy")
obj3=mark("Easy")
if obj1 is not None and obj2 is not None and obj3 is not None:
win=Tk()
win.title("Question Paper Generator")
win.configure(background='#ECECEC')
win.geometry('650x500')
frame=Frame(win)
frame.grid(column=0,row=3,padx=0,pady=10)
addbutton=Button(frame,text="Generate")
addbutton.config(height = 2, width = 15,bg='#ECECEC',justify='left',bd='5',relief='raised',command=lambda:pdf_gen(obj1,obj2,obj3) )
addbutton.grid(column=0,row=20)
win.mainloop()
Здесь он вообще пропускает операторы внутри оператора if и завершает
Если яудалите оператор if и сразу создайте кнопку, исходная проблема сохраняется, и obj1, obj2, obj3 передаются как pone в pdfgen даже после нажатия кнопки «Создать»"нажата