2017-07-15 39 views
-6

我想自动更新现场erg与我在multiply()功能设置的StringVar。我试图通过使用bind来实现,但它不起作用?我是一名Java开发人员。学习Python的,因为一小时左右,我做了一个小PROGRAMM,但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 *)。第三,Button有一个命令参数,所以你不需要特别绑定鼠标。

相关问题