2016-03-27 40 views
0

Sorunum kullandığınızda yani, nasıl yapılır:döngü için çizgiler çizmek fonksiyonları (Tkinter 3.x)

from tkinter import * 
import time 

root = Tk() 
root.geometry("800x850") 

cans=Canvas(root,height=500,width=600) 

a=Scale(root,from_=0,to=600) 
b=Scale(root,from_=0,to=500) 
c=Scale(root,from_=0,to=600) 

for i in range(0,50): 
    cans.create_line(i,0,0,i) #< the loop that i am talking about 

cans.pack() 
root.mainloop() 

Ne Tkinter yapar, çizgiler çizilir kadar bekler olmasıdır (döngü tekrar kendini 50 kez tekrar eder ve sadece uygulamayı görüntüler.

Bu döngüde ne yapmaya çalıştığım, uygulama görüntülenirken gerçek zamanlı olarak daha ince çizgiler çizmek. Birisi bana bunu yapmak için alternatif bir yöntem verebilir mi, yoksa bana kodun nesi yanlış olduğunu söyleyebilir mi?

GÜNCELLEME: Tkinter, mainloop ile herhangi bir döngüye izin vermiyor(), gerçekten bunun bir alternatifi olmasını umuyorum.

+0

Yardım istiyorsanız lütfen bir [MCVE] (http://stackoverflow.com/help/mcve) yazın. –

+0

Bitti. Dağınıklık için gerçekten üzgünüm, kodun geri kalanını tamamen unutmuşum. Sanırım bunu gönderdiğimde kafamı kaybettim. – Koteu

+0

Alt işlemcileri kullanabilir ve satırları aynı anda çizebilirsiniz, benzer bir işlem yapmanız gerekiyorsa daha hızlı ve daha kolay uyarlanabilir. Ek olarak tuvali oluşturabilirsin ve sonra ** alt satırlarla –

cevap

0

tk (iç) olarak, canlı döngü root.after ile yapılır. [tkinter] root.after arayarak bulabileceğiniz SO üzerinde birçok örnek vardır. Aşağıda, kodunuzun bir versiyonu, bir MCVE'ye indirgenmiş, çizgiler biraz aralanmış halde.

from tkinter import * 
import time 

root = Tk() 

cans=Canvas(root,height=500,width=600) 
cans.pack() 

delay = 200 # milliseconds 
def draw_line(i=0): 
    if i <= 150: 
     cans.create_line(i,0,0,i) 
     root.after(delay, draw_line, i+3) 

draw_line()  
root.mainloop() 
+0

Son bir soru: Bu etkileşimli nasıl yapılır? Sadece bir tuşa basma fonksiyonu çalışmıyor, bu konuda ayrı bir soru sormalı mıyım? – Koteu

+0

Soruyu soruyorsun çünkü aynı başlıktaki önceki soru Scales ile etkileşimli girdi hakkındaydı. Her durumda, IDLE'yi denemenizi şiddetle öneririz. 'Root.mainloop' yorumunu yapın, böylece kodu çalıştırdıktan sonra gui ile deney yapabilir ve etkileşimde bulunabilirsiniz. Dokümanlarda listelenen çevrimiçi kaynakları okuyun. SO hakkındaki diğer titiz soruna çözümler deneyin. Daha sonra yeni bir kod yazdıktan sonra yeni bir soru sorun ve kendiniz düzeltmeye çalışın. –