создание графического интерфейса в Tkinter — новые окна

#python #user-interface #tkinter

#питон #пользовательский интерфейс #tkinter

Вопрос:

помогите! Я работал над этим простым графическим интерфейсом в течение нескольких дней и просто не могу понять, как заставить его работать. Я пытаюсь нажать кнопку «ДА», чтобы открыть новое окно, в котором затем запускается база данных sql, созданная позже в коде. Я не могу заставить базу данных работать в новом окне (вверху).

 from tkinter import* import sqlite3 import typing   root = Tk() root.title('You are invited!') root.option_add('*Font', 'Times 24') root['bg'] = '#49A'   frame = LabelFrame top = Toplevel()   def myClick_No():  myLabel = Label(root, text="We're sorry we won't see you there. Thanks for letting us know.",bg='#fff', fg='#f00', pady=10, padx=10, font=10)  myLabel.grid(row=6, column = 0)  button_quit = Button(top, text="Exit", command=root.destroy)  button_quit.grid(row=2, column=5)  def myClick_Yes():  top = Toplevel()  top.title("We can't wait to see you!")  top['bg'] = '#49A'  myLabel = Label(top, text="We're so excited to see you. Please provide RSVP details *Due to current COVID restictions only 4 guest per party allowed*", fg='#fff', bg='#49A')  myLabel.grid(row=1, column = 0)  button_quit = Button(top, text="Exit", command=root.destroy)  button_quit.grid(row=10, column=5)   #create label widget (no action!) myLabel1 = Label(root, text="YOU'RE INVITED!", fg='#fff', bg='#49A') myLabel2 = Label(root, text="A NIGHT TO REMEMBER", fg='#fff', bg='#49A') myLabel3 = Label(root, text="FRIDAY, DECEMBER 24, 2021", fg='#fff', bg='#49A') myLabel4 = Label(root, text="6PM IN THE EVENING", fg='#fff', bg='#49A')  #Creates a frame for the RSVP Options RSVPFrame = LabelFrame(root,text="WILL YOU ATTEND?", fg='#fff', bg='#000080', padx=15, pady=15)  #layout myLabel1.grid(row=0, column=0) myLabel2.grid(row=1, column=0) myLabel3.grid(row=2, column=0) myLabel4.grid(row=3, column=0) RSVPFrame.grid(row=4, column=0)  #create a button widget with action and size options, command= calls the function myButtonNo = Button(RSVPFrame, text="No", padx=10, pady=10, command=myClick_No) myButtonNo.grid(row=5, column=1) myButtonYes = Button(RSVPFrame, text="Yes", padx=10, pady=10, command=myClick_Yes) myButtonYes.grid(row=5, column=0) button_quit = Button(root, text="Exit", command=root.destroy) button_quit.grid(row=20, column=5)    #create a database  conn = sqlite3.connect("guest_meal_selection.db")  #create cursor, commit changes  c = conn.cursor()  #create table '''c.execute("""CREATE TABLE guest_meal (  first_name text,  last_name text,  meal_choice text,  )""") '''  #create submit function for database def submit():  conn = sqlite3.connect("guest_meal_selection.db")  c = conn.cursor()  #insert into table  c.execute("""INSERT INTO guest_meal (FirstName, LastName, MealChoice) VALUES {  FirstName: FirstName.get(),  LastName: LastName.get(),  MealChoice: MealChoice.get()  })""")     conn.commit()  conn.close()    FirstName.delete(0, END)  LastName.delete(0, END)  MealChoice.delete(0, END)  #create Query function for event planner to pull all RSVps from database  def query():  conn = sqlite3.connect("guest_meal_selection.db")  c = conn.cursor()   c.execute("SELECT *, oid FROM guest_meal")  RSVPs = c.fetchall()  print()  #loop through results  for RSVP in RSVPs:  print_RSVPs = str(RSVP)   "/n"   QueryLabel = Label(top, text=print_RSVPs)  Querylabel=grid(row=7, column=0)    conn.commit()  conn.close()     #create text boxes FirstName = Entry(top, width=30) FirstName.grid(row=2, column=1, padx=20)  LastName = Entry(top, width=30) LastName.grid(row=3, column=1, padx=20)  MealChoice = Entry(top, width=30) MealChoice.grid(row=4, column=1, padx=20)   #create text box labels  FirstNameLabel = Label(top, text="First name", bg='#49A') FirstNameLabel.grid(row=2, column=0)  LastNameLabel = Label(top, text="Last name", bg='#49A') LastNameLabel.grid(row=3, column=0)  MealChoiceLabel = Label(top, text="Meal Choice", bg='#49A') MealChoiceLabel.grid(row=4, column=0)   #create text box submit button SubmitButton = Button(top, text="Submit", command=submit) SubmitButton.grid(row=5, column=1)  #create query botton QueryButton = Button(top, text=" Show RSVP List", command=query) QueryButton.grid(row=6, column=1)   conn.commit()  conn.close()  root.mainloop()  

Я просто не понимаю!

Комментарии:

1. Ваш код не удалось запустить из-за NameError: name 'myLabel' is not defined . Исправьте проблему с отступами в вашем коде.

2. Это прекрасно работает в моем .py, когда я запускаю это. Я просто не могу запустить базу данных. Это должно быть что-то из копирования и вставки в текстовое поле, из-за чего отступ будет выключен.

3. Ваш обновленный код все еще не удалось запустить из-за NameError: name 'top' is not defined в строке FirstName = Entry(top, width=30) . Сначала попробуйте протестировать свой опубликованный код.

4. Это работает для меня в режиме ожидания. Я не знаю, почему это не работает.

5. Инструкция INSERT SQL неверна. Попробуй c.execute("INSERT INTO guest_meal (FirstName, LastName, MealChoice) VALUES (?, ?, ?)", (FirstName.get(), LastName.get(), MealChoice.get())) .