Kivy Yükleme İşareti

Yapıcagım program da bir yükleme işareti olarak yazının sonun da her 1 saniyede 1 nokta koyması gerek ama program direk en sondaki yazıyı çıkartıyor. Bunu sorunu nasıl çözebilirim.?

  • Kodlar
*main.py

from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
import time

class main2(BoxLayout):
	pass

class main(App):
	def build(self):
		return main2()

	def bas(self):
		self.root.ids.lbl.font_size = 20
		for i in range(1):
			time.sleep(1)
			self.root.ids.lbl.text = "Yükleniyor."

		for i in range(1):
			time.sleep(1)
			self.root.ids.lbl.text = "Yükleniyor.."

		for i in range(1):
			time.sleep(1)
			self.root.ids.lbl.text = "Yükleniyor..."
			
		for i in range(1):
			time.sleep(1)
			self.root.ids.lbl.font_size = 30
			self.root.ids.lbl.text = "Merhaba !!!"

if __name__ == "__main__":
	main().run()

*main.kv

<main2>:
	orientation: "vertical"
	Label:
		id: lbl

	Button:
		text: "Tamam"
		id: btn
		on_press: app.bas()
from kivy.app import App 
from kivy.uix.boxlayout import BoxLayout 
import time

class main2(BoxLayout):
    pass

class main(App):
    def build(self):
        return main2()

    def bas(self):
        yuklenme_yazi = "Yukleniyor"   
        self.root.ids.lbl.font_size = 20
        for i in range(3):
            time.sleep(1)
            yuklenme_yazi += "."
            self.root.ids.lbl.text = yuklenme_yazi
        self.root.ids.lbl.font_size = 30
        self.root.ids.lbl.text = "Merhaba !!!"

if __name__ == "__main__":
    main().run()

Bence main.py de o kadar döngü ile ugraşmanıza gerek yoktu.Yanlışlık olursa söyleyin düzeltmeye çalışalım.

Kolay gelsin :slight_smile:

Bende bir ara bu şekilde yapdım ama bende başka sonuç verdi acaba başka bir yerde mi hata yaptım :thinking: ginede teşşekür ederim :slight_smile:

Arkada bir iş yapılırken böyle bir ekranın oluşmasını istiyorsanız, @Cihat_Altiparmak’ın önerdiği çözüm işe yaramayacaktır. Bu “bas” fonksiyonunu, “Yükleme” işlemi bitene kadar farklı bir thread içerisinde çalıştırmak işinizi görecektir.

Haklısınız olmayacaktır,farkedemedim.Aşagıda yeni bir şey yazdım.

from kivy.app import App 
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout 
import time
from kivy.clock import Clock
from threading import Timer
kv = """
<main2>:
    orientation: "vertical" 	
    Label:
        id: lbl 
        text: ""	
    Button: 
        text: "Tamam" 		
        id: btn 		
        on_press: app.bas()
"""


class main2(BoxLayout):
    pass

class main(App):
    def build(self):
        self.yuklenme_yazi = "Yukleniyor" 
        Builder.load_string(kv)
        return main2()

    def bas(self):        
        Clock.schedule_interval(self.etikette_goster, 1)
        sayac = Timer(5, self.durdurucu) 
        sayac.start() 
        
                            
        

    def etikette_goster(self, za):          
        self.root.ids.lbl.font_size = 20
        self.root.ids.lbl.text = self.yuklenme_yazi
        self.yuklenme_yazi+="."
        
        
    def durdurucu(self):
        Clock.unschedule(self.etikette_goster)
        self.root.ids.lbl.font_size = 30
        self.root.ids.lbl.text = "Merhaba !!!"
        self.yuklenme_yazi = "Yukleniyor"
if __name__ == "__main__":
    main().run()

Bu işe yarar, ben threading.Timer kullanarak hallettim.

Ben sorunu Timer ile halledip cevaba yazacakken sizin cevabı gordum mutlu oldum,zaten çözdüm sorunu,ama sizin onerinizi gorunce daha bir mutlu oldum açıkçası.

Thread kullanılacak diye bir kural yok ama,mesela bu,basit bir kronometredir,ama threading modulu kullanılmadan yapılmış.
main.py
https://paste.ubuntu.com/p/wrh4k54N2z/

kronometre.kv
https://paste.ubuntu.com/p/YWt95Yynr6/

Anlayamadıgınız yer olursa elimden geldigince yardım etmeye çalışırım
Kolay gelsin :slight_smile:

Benim aklıma ilk aşağıdaki gibi bir şey geldi, o yüzden thread ile yapmak iş görecektir dedim.

import threading

[...]
class TestApp(App):
    _STOP = False
[...]
    def bas(self):
        while True:
            if self._STOP != False:
                break
            [...]
    def process(self):
        [...]
        self._STOP = False 
[...]

Yok hocam mantıksız demedim zaten,gayet mantıklı,eline saglık.

Kolay gelsin :slight_smile: