0

我目前对我的餐厅有一个工作菜单测试,它读取检查按钮接收到的输入,将它们与正确答案进行比较,然后显示一个好的工作消息框或一个继续工作的消息框。我还设置了它,如果他们没有正确回答问题,它会打印他们回答的内容,然后是正确答案。而不是消息框并简单地打印他们做错了什么我想要一个最终结果屏幕要么有很好的工作(或类似的东西)消息,要么上面印有错误与正确的答案。这是我的代码,向您展示到目前为止我是如何实现所有内容的,就像我说的一切正常,我只是想找出一种方法让它更美观,但还没有找到一种方法来做到这一点。

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)是我进行比较并打印我想在结果屏幕上显示的输出的地方,这也是我弹出消息框的地方。

4

1 回答 1

3

我会让 GUI 继承自 Tk,
然后将不同的“窗口”放在 Frames 中。
然后,您可以在 Frame 上使用grid_forget()destroy()使其消失。
如果您选择不销毁它,请在框架上使用grid()以使其重新出现。
这是一个简化的演示,
其中原始帧 (aFrame) 在显示结果帧 (rFrame) 3000 毫秒后重新出现。
见底部的result_screenand方法: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()
于 2012-04-14T04:10:23.380 回答