2

レストランの従業員向けにメニューのテストを行っています。計画では、メニュー項目が「ここに項目をループ」をループし、その時点で正しいチェックボタン (材料) を選択してから、「送信して続行ボタン」をクリックします。彼らが送信ボタンをクリックしたら、まずチェックボタンのオンとオフの値を読み取って、どの項目が選択されたかを判断し、それらをリストの辞書で定義した正解と比較し、すべてのチェックボタンをクリアして、答えが間違っているか正しいか、プログラムは続行され、最終的に結果画面が表示されますが、現在、チェックボタンのオンとオフの値を読み取る方法にこだわっています。選択した野菜を今印刷しようとしているだけで、わかりません。

それらが異なるメソッドにあるという事実と、それらがループに追加されたという事実に関係していると思いますか? 正確にはわかりませんが、コードが間違ったものを読み取ろうとしていることはわかっています。

長い質問で申し訳ありませんが、私がやろうとしていることを理解するために、できるだけ多くの情報を提供することが有益だと思いました..

スクリーンショット

from tkinter import *

class GUI(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.parent = parent
        self.initUI()

    def initUI(self):
        self.grid()
        self.parent.title("Wahoos Menu Test")
        self.create_buttons()

    global count
    count = -1

    def create_buttons(self):
        for r in range(20):
            for c in range(14):
                Label(self, text='',
                    borderwidth=0).grid(row=r,column=c)
        B = Button(self, text ="Begin Exam", relief=RIDGE, fg="black", command= self.on_button_press).grid(row=19, column=7)
        L = Label(self, text="What comes in the following", fg="blue").grid(row=6, column=0)
        self.veg = ['Lettuce', 'Cabbage', 'Cheese', 'Ahee Rice', 'Brown Rice', 'Banzai Veg', 'Red Cabbage', 'Black Beans', 'Cajun White Beans']
        self.vegboxes = []
        self.opt = []
        c = 1
        for ve in self.veg:
            c +=1
            self.v = IntVar()
            self.vegboxes.append(self.v)
            vo = Checkbutton(self, text=ve, variable=self.v, onvalue=1, offvalue=0).grid(row=c, column=11, sticky=W)

    def on_button_press(self):
        global count
        count = count + 1
        menuItems = {'nft': ['cabbage', 'cheese', 'corn', 'nf', 'salsa'],
        'nckt': ['lettuce', 'cheese', 'corn', 'nck', 'salsa']}
        menu = ['blackened fish taco', 'wahoos chicken salad']
        if count == len(menu):
            C = Button(self, text ="           Your Done!          ", relief=RIDGE, fg="black").grid(row=19, column=7)
        else:
            m = Label(self, text=menu[count], fg="black").grid(row=7, column=0)
            C = Button(self, text ="Submit and Continue", relief=RIDGE, fg="black", command= self.read_checks).grid(row=19, column=7)
    def read_checks(self):
        for v in self.veg:
            if self.v == 1:
                print(self.veg[v])


def main():
    root = Tk()
    app = GUI(root)
    root.mainloop()

if __name__ == '__main__':
    main()
4

1 に答える 1

5

辞書を作成し、各キーをチェックボタンのラベルに
し、値を「制御変数」の状態にすることができます。
次に、以下の例に示すように、制御変数の get() メソッドで状態を確認します。

import tkinter as tk

class GUI(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)

        self.buttonDic = {
        'Brown Rice':0,
        'Banzai Veg':0,
        'Red Cabbage':0,
        'Black Beans':0
        }

        for key in self.buttonDic:
            self.buttonDic[key] = tk.IntVar()
            aCheckButton = tk.Checkbutton(self, text=key,
                                            variable=self.buttonDic[key])
            aCheckButton.grid(sticky='w')

        submitButton = tk.Button(self, text="Submit",
                                        command=self.query_checkbuttons)
        submitButton.grid()

    def query_checkbuttons(self):
        for key, value in self.buttonDic.items():
            state = value.get()
            if state != 0:
                print(key)
                self.buttonDic[key].set(0)

gui = GUI()
gui.mainloop()

このアプローチにより、1 つのディクショナリでチェックボタンを作成および分析できます。 防止するために必要な
items() の使用に注意してください。for key, value in self.buttonDic.items():

ValueError: too many values to unpack

Checkbutton ウィジェットとその変数の詳細については、こちらを参照してください。


誰かが制御変数をもう少し理解するのに役立つ場合に備えて、
Checkbutton ウィジェットのonvalueとに基づいた私の最初の試みを含めます。offvalue

import tkinter as tk

class GUI(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)

        self.bRiceV = tk.StringVar()
        bRice = tk.Checkbutton(self, text="Brown Rice",variable=self.bRiceV,
                                    onvalue="Brown Rice", offvalue="Off")
        bRice.pack()

        self.bVegV = tk.StringVar()
        bVeg = tk.Checkbutton(self, text="Banzai Veg",variable=self.bVegV,
                                    onvalue="Banzai Veg", offvalue="Off")
        bVeg.pack()

        self.varList = [self.bRiceV, self.bVegV]

        submitButton = tk.Button(self, text="Submit",
                                command=self.query_checkbuttons)
        submitButton.pack()

    def query_checkbuttons(self):
        for var in self.varList:
            value = var.get()
            if value != 'Off':
                print(value)
                var.set('Off')

gui = GUI()
gui.mainloop()
于 2012-04-10T07:12:51.567 に答える