Python 3.2 tkinter создает рамку результатов для вывода вывода

В настоящее время у меня есть рабочий тест меню для моего ресторана, который читает ввод, полученный с помощью контрольных кнопок, сравнивает их с правильными ответами, а затем отображает либо сообщение с хорошим почтовым ящиком, либо поддерживающий рабочий почтовый ящик. Я также настроил его так, чтобы, если они не получили правильные вопросы, они печатают то, что они ответили, а затем правильный ответ. Вместо ящиков сообщений и просто распечатывая то, что они делали неправильно, я хотел бы иметь окончательный экран результатов, который либо имеет хорошее сообщение (или что-то в этом роде), либо печатает неправильные или правильные ответы на него. Вот мой код, чтобы показать вам, как я все время реализовал все, например, я сказал, что все работает. Я просто пытаюсь выяснить способ сделать его более презентабельным и не смог найти способ сделать это.

from tkinter import * import tkinter.messagebox as tkMessageBox class GUI(Frame): def __init__(self, parent): Frame.__init__(self, parent) self.parent = parent self.initUI() self.count = -1 self.answers = {'nft':[], 'nckt':[]} self.menuItems = {'nft': ['Cheese', 'Cabbage', 'Corn', 'Blackened Fish', 'Salsa'], 'nckt': ['Lettuce', 'Cheese', 'Corn', 'Blackened Chicken', 'Salsa']} self.menu = ['nft', 'nckt'] #self.p = PhotoImage(file="wahoos.gif") #self.l = Label(self, image=self.p).grid(row=7, column=7) def initUI(self): self.grid() self.parent.title("Wahoos Menu Test") self.create_buttons() def create_buttons(self): for r in range(20): for c in range(14): Label(self, text='', borderwidth=0).grid(row=r,column=c) self.b = Button(self, text ="Begin Exam", relief=RIDGE, fg="black", command= self.on_button_press) self.b.grid(row=19, column=7) self.m = Label(self, text="") self.m.grid(row=7, column=0) L = Label(self, text="What comes in the following", fg="blue").grid(row=6, column=0) self.tortButton = {'Flour':0, 'Corn':0, 'Wheat':0} self.vegButton = {'Lettuce':0, 'Cabbage':0, 'Cheese':0, 'Ahee Rice':0, 'Brown Rice':0, 'Banzai Veg':0, 'Red Cabbage':0, 'Beans':0} self.protButton = {'Carne Asada':0, 'Flamebroiled Chicken':0, 'Blackened Fish':0, 'Blackened Chicken':0, 'Flamebroiled Fish':0, 'Pork':0, 'Shrimp':0, 'Tofu':0, 'Blackened Mushroom':0, 'Rice and Beans':0, 'Banzai Veggies':0} self.sauceButton = {'Salsa':0, 'Guacamole':0, 'Sour Cream':0, 'Roasted Pepper':0, 'Ketchup':0, 'Ranch':0, 'Balsamic':0, 'Mr. Lees':0, 'Teriyaki':0, 'Tapatio':0, 'Cream Cheese':0, 'Aioli':0} V = Label(self, text="Veggies", fg="green").grid(row=1, column=11, sticky=W) T = Label(self, text="Tortillas ", fg="green").grid(row=1, column=12, sticky=W) P = Label(self, text="Proteins", fg="green").grid(row=1, column=13, sticky=W) S = Label(self, text="Sauces", fg="green").grid(row=1, column=14, sticky=W) c = 1 for key in self.tortButton: c +=1 self.tortButton[key] = IntVar() to = Checkbutton(self, text=key, variable=self.tortButton[key]).grid(row=c, column=12, sticky=W) c = 1 for key in self.vegButton: c += 1 self.vegButton[key] = IntVar() vo = Checkbutton(self, text=key, variable=self.vegButton[key]).grid(row=c, column=11, sticky=W) c = 1 for key in self.protButton: c +=1 self.protButton[key] = IntVar() po = Checkbutton(self, text=key, variable=self.protButton[key]).grid(row=c, column=13, sticky=W) c = 1 for key in self.sauceButton: c +=1 self.sauceButton[key] = IntVar() so = Checkbutton(self, text=key, variable=self.sauceButton[key]).grid(row=c, column=14, sticky=W) def on_button_press(self): self.count = self.count + 1 if self.count == len(self.menu): self.m.configure(text="") self.b.configure(text ="Your Done! Click here to see your results.", command = self.compare) else: self.m.configure(text=self.menu[self.count]) self.b.configure(text ="Submit and Continue", command= self.read_checks) def read_checks(self): for key, value in self.vegButton.items(): state = value.get() if state !=0: print (key) self.answers[self.menu[self.count]].append(key) self.vegButton[key].set(0) for key, value in self.tortButton.items(): state = value.get() if state !=0: print (key) self.answers[self.menu[self.count]].append(key) self.tortButton[key].set(0) for key, value in self.protButton.items(): state = value.get() if state !=0: print (key) self.answers[self.menu[self.count]].append(key) self.protButton[key].set(0) for key, value in self.sauceButton.items(): state = value.get() if state !=0: print (key) self.answers[self.menu[self.count]].append(key) self.sauceButton[key].set(0) print (self.answers) print (self.menuItems) self.on_button_press() def compare(self): self.match = True self.count = -1 for key in self.answers: if self.answers[key] != self.menuItems[key]: print ("For ", self.menu[self.count], " you answered ", self.answers[key]) print ("The correct answer for ", self.menu[self.count], " is ", self.menuItems[key]) self.count = self.count + 1 self.match = False if self.match == True: tkMessageBox.showinfo("All Pau!", "Nice job! I think your ready!") else: tkMessageBox.showinfo("Uh Ohh", "Looks like you have some more studying to do.") def main(): root = Tk() app = GUI(root) root.mainloop() if __name__ == '__main__': main() 

def compare(self) – это то, где я делаю свои сравнения и печатаю вывод, который я хотел бы отобразить на экране результатов, это также то место, где появляются всплывающие окна.

One Solution collect form web for “Python 3.2 tkinter создает рамку результатов для вывода вывода”

Я бы наследовал GUI от Tk,
а затем поместите различные «окна» в Frames.
Затем вы можете использовать grid_forget() или destroy() в кадре, чтобы он исчез.
Используйте grid() в кадре, чтобы он снова появился, если вы решили не уничтожать его.
Вот упрощенная демонстрация,
где исходный кадр (aFrame) появляется после 3000 мс отображения кадра результата (rFrame).
См. Методы go_back и go_back внизу:

 import tkinter as tk class GUI(tk.Tk): def __init__(self): tk.Tk.__init__(self) self.score = 0 self.buttonDic = { 'Brown Rice':0, 'Banzai Veg':0, 'Red Cabbage':0, 'Black Beans':0 } aFrame = self.aFrame = tk.Frame(self) aFrame.grid() for key in self.buttonDic: self.buttonDic[key] = tk.IntVar() aCheckButton = tk.Checkbutton(aFrame, text=key, variable=self.buttonDic[key]) aCheckButton.grid(sticky='w') submitButton = tk.Button(aFrame, text="Submit", command=self.query_checkbuttons) submitButton.grid() self.trueList = ['Brown Rice', 'Black Beans'] def query_checkbuttons(self): for key, value in self.buttonDic.items(): state = value.get() if state != 0: if key in self.trueList: self.score += 1 else: self.score -= 1 self.buttonDic[key].set(0) self.result_screen() def result_screen(self): self.aFrame.grid_forget() self.rFrame = tk.Frame(self) self.rFrame.grid() self.scoreText = tk.Text(self.rFrame, width=20, height=1) self.scoreText.grid() self.scoreText.insert('end', self.score) self.after(3000, func=self.go_back) def go_back(self): self.score = 0 self.rFrame.destroy() self.aFrame.grid() gui = GUI() gui.mainloop() 
  • В tkinter python, как я могу создать ярлык, чтобы вы могли выбрать текст с помощью мыши?
  • Как обновить Tcl / Tk в Python?
  • Tkinter сообщение без окна?
  • Как добавить пространство между двумя виджетами, размещенными в сетке в tkinter ~ python?
  • Python & Tkinter -> О вызове долговременной функции, которая замораживает программу
  • Базовый таймер обратного отсчета Tkinter
  • python tkinter как связать ключ с кнопкой
  • Эквивалентная функция для xticks для объекта AxesSubplot
  • Python - лучший язык программирования в мире.