2017-07-15 5 views
-6

フィールドergStringVarで自動更新しようとしていますが、関数で設定しました。私はbindを使ってそうしようとしましたが、うまくいきませんでしたか?私はJava開発者です。Pythonの学習に1時間ほどかかりましたが、小さなプログラムを作ったのですが、tkinterのバインディングは動作しません。

import math 
from tkinter import * 

class LeerException(Exception): 
    __message="falscher buchstabe" 

def multiply(event): 
    wa = int(a.get()) 
    if wa=="": 
     raise LeerException() 
    wb = int(b.get()) 
    try: 
     for x in range(0,wb+1): 
      wa = wa*wa 
     ergebnis.set(wa) 
     print(wa) 
    except LeerException: 
     print("ERROR"); 

root = Tk() 

ergebnis = StringVar() 
werta= Label(root,text="WertA") 
werta.pack() 

a = Entry(root) 
a.pack() 

wertb= Label(root,text="Anzahl") 
wertb.pack() 

b = Entry(root) 
b.pack() 

erg= Entry(root) 
erg.focus_set() 
erg.bind(ergebnis) 
erg.pack() 

button = Button(root) 
button.bind("<Button-1>",multiply) 
button.pack() 

root.mainloop() 
+2

あなたはPythonを学ぶつもりはなく、時間の中で 'tkinter'を使う方法はずっと少なく、より現実的な期待を得ることができます。 StringVarと自動更新が行われるまでは、[** _変数クラス(BooleanVar、DoubleVar、IntVar、StringVar)_ **](http://effbot.org/tkinterbook/variable.htm)を参照してください。それらに関する情報、およびそれらの仕組みについて説明します。 – martineau

答えて

0
import tkinter as tk 

def multiply(): 
    try: 
     wa = int(a.get()) # will raise a ValueError if it's not valid (ie empty) 
     wb = int(b.get()) 
     for x in range(wb+1): 
      wa *= wa 
     ergebnis.set(wa) 
    except ValueError: 
     ergebnis.set("ERROR") 

root = tk.Tk() 

ergebnis = tk.StringVar() 
werta= tk.Label(root,text="WertA") 
werta.pack() 

a = tk.Entry(root) 
a.pack() 

wertb= tk.Label(root,text="Anzahl") 
wertb.pack() 

b = tk.Entry(root) 
b.pack() 

erg= tk.Entry(root, textvariable=ergebnis) 
erg.focus_set() 
erg.pack() 

button = tk.Button(root, text='go', command=multiply) 
button.pack() 

root.mainloop() 

私はいくつかの改良を行いました。まず、Pythonが既に持っているもののために独自のエラータイプを定義する必要はありません。次に、ワイルドカードのインポート(from module import *)は使用しないでください。第3に、Buttonにはコマンド引数があり、マウスに特別にバインドする必要はありません。

関連する問題