2012-10-27 30 views
7

komutunda kullanılan işlevden dönüş değerini A'dan C'ye nasıl alabilirim? Bu arada ders kullanmıyorum.python tkinter dönüş değeri,

def button: 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    return A 

B = StringVar() 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = button).grid(row = 1, column = 1) 

cevap

3

Sen button işlev içinde C.set diyebiliriz:

def button: 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    C.set(A) 
    # return A # return values are useless here 
7

Kısa cevap: bunu yapamazsınız. Geri dönüşler bir şey döndüremez çünkü geri dönüş değeri olan hiçbir şey yapmayan olay döngüsü dışında, geri döndürecek bir yer yoktur.

Etkinlik tabanlı bir uygulamada, genellikle yapacağınız şey bir sınıfa bir özellik belirlemektir. Veya, yeni başlayan bir iseniz, global bir değişken ayarlayabilirsiniz. Küresel bir değişken kullanmak, zamanla sürdürülmesi gereken gerçek kod için iyi bir fikir değil, ancak deneme için sorun değil.

def button(): 
    global C 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    C = A 
2

sadece bir küresel kolay beyan ediyor: C sizin örnekte global bir değişken olması sebebiyle

Yani, örneğin, gibi bir şey yapardı.

def button: 
global A 
mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
A = B.get() 
return A 

B = StringVar()` 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = button).grid(row = 1, column = 1) 
# and then A is not empty 
B= A 
0

Eski soru, ancak çoğu yanıt global bir değişken önerdi. Projelerimde çok fazla global değişken kullanmayı sevmiyorum, işte çözümüm.

Tkinter düğmenizi bildirirken, komut olarak bir lambda işlevi kullanabilirsiniz. Bu lambda, tanımladığınız düğme ile aynı ad alanı içinde bulunan değişkenlerle etkileşim kurabilir. Düğmeyi başlatmadan önce bu değişkeni tanımladığınızdan emin olun.

def button(): 
    mylabel = Label(myGui, text = "hi").grid(row = 0, column = 0) 
    A = B.get() 
    return A 

B = StringVar() 
C = "" 
myentry = Entry(myGui, textvariable = B).grid(row = 1, column = 0) 
Submit = Button(myGui, text = "Submit", command = lambda: C=button()).grid(row = 1, column = 1) 

Sen proje organizasyonu bağlı button için bir argüman olarak self gerekebilir, ancak kavram aynıdır. Lambda komutları, argümanları buton komutuna iletmek için de kullanışlıdır.