2016-04-06 14 views
0

Şimdi örnek değişkenler ve sınıflar kavramını anlıyorum, daha önce onlarla hiç bir sorunum olmadı ve bunları sık sık kullanıyorum. Ancak MainWindow sınıfımı oluşturduğumda, örnek değişkenlere erişmeye çalışana kadar her şey şeftali. Python Tkinter - Değişkenleri ana pencere sınıfının dışından nasıl değiştiririm?

http://pastebin.com/tDs5EJhi tam bir koddur, ancak bu noktada sadece etiket ve çerçevelerin yerleştirilmesi ve neyin yok, gerçek bir mantık yok. Pencere iyi görünüyor ve kötü bir şey olmaz.

Sorun, pencerenin içindeki şeyleri dışarıdan değiştirmeyi denediğimde ortaya çıkıyor. Ben sadece sınıfın bir örneğini yapabildiğim ve normalde olduğu gibi değişkenleri değiştirebildiğimi düşündüm (örnekvariable.ImageCanvas.itemconfig()), fakat Tkinter bu konuda hoş değil ve bunun Tkinter'in ana karakteri olduğunu düşünüyorum ().

İşte ben örnek değişkenleri nasıl düzenleneceği böyle öğrendim Yani ben (207 ln) sorun yaşıyorum benim sınıf MainWindow() ait çerez

  ... 
      self.C4 = Tk.PhotoImage(file="temp.png") 
      self.card4 = self.CardCanvas.create_image(120,46,image=self.C4, state=Tk.NORMAL) 
      #self.CardCanvas.itemconfig(4, state=Tk.HIDDEN) # < It works here 
      ... 
     self.root.mainloop() 

window = MainWindow() 
window.CardCanvas.itemconfig(4, state=Tk.HIDDEN) # < It doesn't work here 

bu. Pencere açıldığında, itemconfig komutu aslında sınıfın içinde olduğu gibi uygulanmaz (veya belki yaptı ve pencere henüz güncellenmedi?) Ve pencereyi kapattıktan sonra şu hatayı aldım:

Varsayacağım bir şey var, çünkü artık var olmayan değişkenlere bir metot uygulamaya çalıştığı, şimdi pencerenin kapandığıdır.

Yani sanırım işte büyük bir sorum var - MainWindow sınıfım var ve söyleyebildiğim kadarıyla, Tk.mainloop() çalışmakta olduğu için hiçbir şey sınıfın dışından değiştirilemez. itemconfig gibi çalıştırdıktan sonra diğer kod. Bu değişkenleri değiştirmeye nasıl giderim? Örnek değişken bildirimi sonrası kod, MainWindow() kapalı olana kadar çalışmamaktadır.

cevap

0

mainloop'dan sonra bu kodun çalışmazsınız. Sadece GUI yok edildikten sonra yapar. Tkinter, mainloop numaralı çağrı için, çalıştırılabilir kodun son (veya hemen hemen sonuncu) satırı olmak üzere tasarlanmıştır. Bir kez çağrıldığında, diğer tüm işler olaylara tepki olarak yapılmalıdır. GUI programlamanın özü budur.

"Değişkenleri değiştirme konusunda nasıl giderim" yanıtı basit: mainloop numaralı telefonu aramadan önce yapın veya bir olaya tepki olarak yapın. Örneğin, bir düğmeyi geri aramada yapın, bir olaya bağlı bir işlevde yapın veya after aracılığıyla bir zamana dayalı olaya yapın.

+0

Sanırım pencereyi güncellemek için aradığım şey 'after'. Yardım için teşekkürler! – Hexic