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 から継承し
、別の「ウィンドウ」をフレームに配置します。次に、フレームで、または
を使用して、フレームを非表示にすることができます。フレームを破壊しないことを選択した場合、フレームを再出現させるために 使用します。 これは、元のフレーム (aFrame) が結果フレーム (rFrame) を表示してから 3000 ミリ秒後に再表示 される簡単なデモです。下部のおよびメソッドを 参照してください。grid_forget()destroy()
grid()


result_screengo_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 に答える