2017-01-30 14 views
0

私は、init関数はtkinterウィンドウを構築しています。ウィンドウ内には乗算5 * 10と入力ボックスがあります。ユーザーが正しい答えでボックスを埋める場合、結果関数を実行するボタンを押した後に、正しいメッセージでラベルを表示しなければならない、そうでなければ間違ったメッセージでラベルを表示しなければならない。問題は:Python Tkinterエントリ - 値を取得

でも正しいです、間違ったメッセージを表示します。結果関数にself.contentを表示すると、端末に正しい値が表示されます。問題は内部のif文の結果関数です。 Tkinterのインポート*から

クラスの小道具:

def __init__(self): 

    self.root = Tk() 
    self.root.geometry("800x600") 

    self.x = 5 
    self.y = 10 

    self.title = Label(self.root, text = "TEST") 
    self.title.grid(row=0, column=0, columnspan=6) 
    self.title.config(font=("Courier", 30)) 

    self.labelx = Label(self.root,text=self.x) 
    self.labelx.grid(row=2, column=2) 
    self.labelx.config(font=("Courier", 30)) 

    self.epi = Label(self.root,text="X") 
    self.epi.grid(row=2, column=3) 
    self.epi.config(font=("Courier", 30)) 

    self.labely = Label(self.root,text=self.y) 
    self.labely.grid(row=2, column=4) 
    self.labely.config(font=("Courier", 30)) 

    self.total = Entry(self.root, font = "Courier 25 bold",justify="center",width=3) 
    self.total.grid(row=2, column=5, padx=20) 

    button = Button(self.root, text="OK", command = self.result) 
    button.grid(row=3, column=2) 

    self.content = Entry.get(self.total) 

    self.root.mainloop() 

def result(self): 
    if self.content == (self.x * self.y): 
     self.labres = Label(self.root, text="Right") 
     self.labres.grid(row=2, column=6) 
     self.labres.config(font=("Courier", 30)) 
    else: 
     self.labres = Label(self.root, text="Wrong") 
     self.labres.grid(row=2, column=6) 
     self.labres.config(font=("Courier", 30)) 

スタート=小道具()値が入力される前に、エントリの内容を読んでいる

答えて

1

。ボタンをクリックした後に内容を読む必要があります。

また、文字列とintをself.content == (self.x * self.y)で比較しています。 int(self.content) == (self.x * self.y)を使用してください。

更新結果機能は次のとおりです。

def result(self): 
     self.content = Entry.get(self.total) 
     if int(self.content) == (self.x * self.y): 
      self.labres = Label(self.root, text="Right") 
      self.labres.grid(row=2, column=6) 
      self.labres.config(font=("Courier", 30)) 
     else: 
      self.labres = Label(self.root, text="Wrong") 
      self.labres.grid(row=2, column=6) 
      self.labres.config(font=("Courier", 30)) 
+0

私がしなければ:int型(self.contentは)私が取得する場合:ValueErrorをします。intための無効なリテラル()ベース10と: – Athon

+0

@Athon確か '自己をしてください.content'は空ではないか、アルファベットや記号を含んでいません。あなたは 'int(self.content)'でそれを使う前に 'self.content'を検証する必要があります。 –

+0

あなたは前に妥当性を確認することを私に説明できますか? – Athon

関連する問題