2016-03-26 30 views
1

Tkinter giriş widget'ları ile çok garip bir Sorun yaşadım. Onlara bir şey girmeyi denediğimde, girişimi kabul etmiyorlar.Python Tkinter giriş eklendi giriş kabul edilmedi

Bazı PC'yi yeniden başlattıktan ve Python'u yeniden yüklemeden sonra bunun nedenini anladım: Kodda root.mainloop()'dan hemen önce bir ileti kutusu vardı.

def xyz(): 
    if not messagebox.askyesno("Title","Some text"): 
     exit() 
xyz() 
root.mainloop() 

buldum, sadece elle sonra tekrar farklı bir pencerede odaklanmak ve edebilirsiniz sorunu gidermek için: Kod şöyle görünür. Bunu yapmanın daha iyi bir yolu olup olmadığını bilmek ister misiniz? Mesaj kutumu saklamak istiyorum, VE el ile değişen pencere odağını bağımsız bir çözüm istemiyorum.

+0

Python böylece şeyleri kendiniz kod zorunda değiştirdiğinizi istediğiniz hangi pencere, bu yüzden bilmiyor, hiçbir büyü yapmaz (olup olmadığını o unelegant ya da olmasın) Odaklanmak istediğiniz her şey, yani focus_set(). –

+0

Bence bu bilinen bir böcek. Sanırım Windows'dasınız, çünkü bence bu hatayı içeren tek platform. Ya xyz() 'yi çağırmak yerine 'root.after_idle (xyz)' yaparsan ne olur? Bu, 'mainloop' başlatma şansı verir, ancak GUI başladığında mesaj kutusunu hala gösterir. –

+0

@BryanOakley Teşekkürler, çözümünüz mükemmel çalıştı! Daha önce 'after_idle()' yi bilmiyordum. –

cevap

1

Böyle kodunu düzeltebilirsiniz:

def xyz(): 
    if not messagebox.askyesno("Title","Some text"): 
     exit() 
root.after(10,xyz) #show the messagebox after root.mainloop() 
root.mainloop()