3

PythonGUIを使用した特定のアイテムに関する宿題の質問があります。

私の目標は、ランダムな数式を要求するGUIを作成することです。方程式が正しく評価されると、それが正しいことを示すメッセージが表示されます。

私の主な問題は、ラベルに表示されるようにステートメントを配置する場所を見つけることです。ランダム方程式を生成するテキストボックスが1つあり、次のテキストボックスは空白でソリューションを入力し、最後に[Enter]ボタンを押してソリューションを評価します。

次のようになります。

[*randomly generated equation*][*Empty space to enter solution*] [ENTER]

レイアウトと評価パラメータを取得できましたが、ここからどこに行くのかわかりません。

これはこれまでの私のコードです:

class Equation(Frame):

    def __init__(self,parent=None):
        Frame.__init__(self, parent)
        self.pack()
        Equation.make_widgets(self)
        Equation.new_problem(self)

    def make_widgets(self):
        Label(self).grid(row=0, column=1)
        ent = Entry(self)
        ent.grid(row=0, column=1)
        Label(self).grid(row=0, column=2)
        ent = Entry(self)
        ent.grid(row=0, column=2)
        Button(self, text='Enter', command=self.evaluate).grid(row=0, column=3)

    def new_problem(self):
        pass

    def evaluate(self):
        result = eval(self.get())
        self.delete(0, END)
        self.insert(END, result)
        print('Correct')
4

2 に答える 2

1
self.labeltext = StringVar() # in __init__

# ...
Label(self, textvariable=self.labeltext) # in make_widgets

# ...
self.labeltext.set("Correct!") # in evaluate
于 2012-10-13T22:05:14.880 に答える
0

ではmake_widgets()、一連のウィジェットを作成していますが、それらを変数に割り当てていません。これにより、作成後にそれらにアクセスできなくなります。それらをインスタンス変数に割り当ててみてください。

def make_widgets(self):
        self.equation_label = Label(self)
        self.equation_label.grid(row=0, column=1) #notice that grid() is on another line
        self.entry1 = Entry(self)
        ent.grid(row=0, column=1)
        self.solution_label = Label(self)
        self.solution_label.grid(row=0, column=2)
        self.entry2 = Entry(self)
        ent.grid(row=0, column=2)
        self.button = Button(self, text='Enter', command=self.evaluate)
        self.button.grid(row=0, column=3)

そうすれば、クラス内の他の関数から次のようにアクセスできます。

self.solution_label.config(text="Hello World")

したがって、コールバックは次のようになります。

def evaluate(self):
        result = eval(self.get())
        self.solution_label.config(text=str(result))

ウィジェットの場合、EntryJFSebastian の回答を使用するか、insert anddeleteメソッドを使用できます (とにかく実行しようとしていたようです)。

def evaluate(self):
    #...some code...
    self.solution_entry.delete(0, END)
    self.solution_entry.insert(0, "Some text")
    #...more code...

Tkinterbookは、ウィジェットの構成オプションなどを検索するための優れたリソースです。

編集

ウィジェットの値を設定する別の方法については、 JFSebastian の回答を参照してください。

于 2012-10-13T22:06:04.413 に答える