Python kivy sayac artmıyor


#1

Aşşagıdaki kivy kodlarında bir liste var ve listeye her bir kelime ekledigimizde sayac +1 artıyor ama sadece bir kere artıyor bu konu hakkında bir çözümü veya fikri olan. :slight_smile:

from kivy.app import App 
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
Builder.load_string("""
<main2>:
	BoxLayout:
		orientation: "vertical"
		TextInput:
			font_size: 25
			id: txt
		Label:
			id: lbl
			font_size: sp(25)

		BoxLayout:
			Button:
				font_size: sp(25)
				text: "Ekle"
				on_release: root.ekle()
""")
liste = []
class main2(Screen):
	def ekle(self):
		self.sayac = 0
		if not self.ids.txt.text:
			self.ids.lbl2.text = "BOS GECEMYİN!"
		else:
			liste.append(self.ids.txt.text)
			self.ids.txt.text = ""
			self.sayac = self.sayac + 1
			self.ids.lbl.text = "Eklene Cümle Sayısı: %s" % str(self.sayac)
sm = ScreenManager()
sm.add_widget(main2(name = "main2"))
class main(App):
	def build(self):
		return sm
if __name__ == "__main__":
	main().run()

#2
	#-*-coding:utf8;-*-
from kivy.app import App 
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import StringProperty

Builder.load_string("""
<main2>:
	BoxLayout:
		orientation: "vertical"
		TextInput:
			font_size: 25
			id: txt
		Label:
			id: lbl
			font_size: sp(25)

		BoxLayout:
			Button:
				text: "Ekle"
				on_release: root.ekle()

			Button:
				text: "İleri"
				on_release: 
					root.manager.transition.direction = "up"
					root.manager.transition.duration = 1
					root.manager.current = "main3"

<main3>:
	BoxLayout:
		Label:
			id: lbl2
			text: root.yazi
			font_size: 25
			#Listeye ekledigim cümmleleri bu sınıftaki Labele yazıcak..........................................
""")

liste = []
class main2(Screen):

	def ekle(self):
		self.sayac = 0  #sayac'ın 0 a eşit oldugu yer
		if not self.ids.txt.text:
			self.ids.lbl.text = "BOS GECEMYİN!"
		else:
			liste.append(self.ids.txt.text)
			self.ids.txt.text = ""
			self.sayac = self.sayac + 1  #Sayacaı +1 arttırdıgı yer....................................
			self.manager.get_screen('main3').yazi = "Eklene Cumle Sayisi: %s" % str(self.sayac)#Burda sayac +1 arttırıcak ve ekrana basıcak.............

class main3(Screen):
	yazi = StringProperty('')

sm = ScreenManager()
sm.add_widget(main2(name = "main2"))
sm.add_widget(main3(name = "main3"))

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

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

#3

Cevap geç oldu ama yinede teşekkürler. :slight_smile:


#4

Yanlız burda birşey çıkaramadım sadece modül eklenmiş. :smiley:

Bana sadece sayacı arttıma lazım. :slight_smile:


#5

Yani vikipedia değilim sonuçta, her konuya hakim değilim, senin yerine ben araştırıp yapıyorum ama 1 gün senin için gecikmeyse daha fazlasını yapamam, çalıştığım bir iş, baktığım bir aile var. Birde sorularını özelden değilde konu açarak sorarsan sevinirim. Özelden olunca insan kendini cevaplamak zorunda hissediyor, burda ise eğer konu hakkında bilgin varsa yazarsın, kırgınlık olmaz hemde aynı konuda sıkıntı yaşayan insanlar için kaynak olur.


#6

Bana özelden yazdığın şekilde yaptım. Yenisi hakkında fikrim yok. Kolay gelsin.


#7

Zaten böyle bir konu daha önceden açmışdım ama hiç cevap gelmedi. Bende sizde görmediniz diye size özelden size attım ama sizde cevap vermediniz sonra 3 -4 gün daha ugraşdım cevabını buldum şimdi de bu sayaç artımada sorun yaşıuorum buda 1 - 2 oldu çözemedim araştırdım yabancı sitelere bakdım ama tam olarak istedigimi bulmadım. Ben siz kivu hakim oldugunuzu düşünerek özelden attım kusura bakmayın.


#8

Anladım saolun. Kusura bakmayın bir daha atmam.


#9

Birincisi özel mesaj mevzusunu sinirle yazmadım, aynı konudan muzdarip kişiler için kaynak oluştuşturacağı için daha faydalı olacağı kanımın arkasındayım.

Soruna gelirsek, yukardaki örneği özelden sorduğun şu kısma cevaben yaptım ve eğer denersen sadece bir modül eklemediğimi görürsün.

"Listeye ekledigim cümleleri diger sınıf olan main3 deki labelde ekrana basmak istiyorum ama onu da bir türlü yolunu bulamadım. "

Sayaç kısmına gelirsek ekle isimli fonksiyonu her çalıştırdığında sayac = 0 diye sayacı sıfırlıyorsun zaten, o yüzden sayaç sadece 1 defa artıyor.


#10

Evet bende o sayacın sıfır kadıgının farkındayım, ve nereye yerleştirirdiysem sürekli farklı bir hata verdi ve çözümünü bir türlü bulmadım onun için daha çoook araştırma yapmam lazım.
Sizide anladım herkezin faydalanmasını istiyorsunuz bende size söyledim zaten yukarda o konuyu açmışdım ama neyse artık uzatmayıyım.


#11
	#-*-coding:utf8;-*-
from kivy.app import App 
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.properties import NumericProperty

Builder.load_string("""
<main2>:
	BoxLayout:
		orientation: "vertical"
		TextInput:
			font_size: 25
			id: txt
		Label:
			id: lbl
			font_size: sp(25)

		BoxLayout:
			Button:
				font_size: sp(25)
				text: "Ekle"
				on_release: root.ekle()
""")
liste = []
class main2(Screen):
	sayac = NumericProperty(0) 
	def ekle(self):
		if not self.ids.txt.text:
			self.ids.lbl2.text = "BOS GECEMYİN!"
		else:
			liste.append(self.ids.txt.text)
			self.ids.txt.text = ""
			self.manager.get_screen('main2').sayac += 1 
			self.ids.lbl.text = "Eklene Cümle Sayısı: %s" % str(self.manager.get_screen('main2').sayac)
sm = ScreenManager()
sm.add_widget(main2(name = "main2"))
class main(App):
	def build(self):
		return sm
if __name__ == "__main__":
	main().run()

#12

Şöyle bir şey daha buldum ama çözmüşsünü saolun. :slight_smile:


#13

Doğru tahmin üzerinden gitmişim demek, sayacı numericproperty ile tanımladıktan sonra sadece self.sayac diye çağırabiliyormuşuz, o kadar uzun yazmaya gerek yokmuş, bende bunu öğrenmiş oldum. :slight_smile:


#14

Aynen bende ilk defa poperty kullanmış oldum, ilerde çok kullanırım bunları. :smiley:


#15

Arkadaşlar, özelden sorulan soruları foruma yönlendirebilirsiniz. Mesela ben hep öyle yapıyorum. Özelden cevaplayınca başkalarına faydası dokunmuyor, forum anlamını yitiriyor. Bir de işinize karışmak gibi olmasın da yapıcı olmak adına söylüyorum: Hakaret harici hiçbir şey kırıcı söz söylemeye mazeret olamaz. Hele ki sorulan bir soru. Bu forumda programlamaya yeni başlamış birçok arkadaş var. Yaşı küçük de birçok arkadaş var. Bu arkadaşlar programlamayı ya da forum kültürünü henüz yeni yeni deneyimliyor olabilirler. Doğrudan zanda bulunup kırıcı sözler söylemek yerine yapıcı olup yol göstermek her zaman en iyisidir. Örneğin; bu forumda en çok cevap veren ve mesaj alan kişilerden biri benimdir, ancak hiç kimse tek bir kırıcı sözümü gösteremez. Demem o ki, sakin olunca ve isteyince gerçekten de oluyor. Sözlerim yanlış anlaşılmalara neden olmasın, eğer olursa da affola. Dediğim gibi yapıcı bir söylemde bulunmak istedim sadece.