Üst Üye
 
Üyelik Tarihi: 04-07-2018
Yorum Sayısı: 163
Konu Sayısı: 35
Rep Puanı:
0
02-08-2018, Saat: 19:24
(Son Düzenleme: 26-01-2021, Saat: 13:17, Düzenleyen: SD-16.)
Kİvy de aşşagıdaki gibi bir şey lazımdı. Mantık olarak birşeyler yapmaya çalışdım mantıklı oldugu halde çalışmadı.
Özet olarak; 2 tane sınıfımız var bu sınıflardaki main3 sınıfının labelinin font büyüklügünü diger sınıf olan main2 den degiştirip birde main2 nin labeline main3 ün labelin font büyüklügünü bastıstıyoruz. Bu şekilde biraz karşık olabilir ama aşşagıdaki kodlara bakarsanız ne yapmak istedigimi anlarsınız.
PHP Kod:
# -*- coding: utf-8 -*- from kivy.app import App from kivy.lang import Builder from kivy.uix.screenmanager import ScreenManager, Screen from kivy.properties import StringProperty, NumericProperty, BoundedNumericProperty #belki bunlar lazım olur. :)
Builder.load_string(""" <main3>: BoxLayout: orientation: "vertical" Label text: "YAZI BOYUT AYARLAMA ÖRNEGİ" font_size: sp(25) id: lbl
Button: text: "Boyutu ayarla" on_press: root.manager.transition.direction = "up" root.manager.current = "main2"
<main2>: BoxLayout: orientation: "vertical" Label: text: str(root.deger()) #diger sınıftaki labelin degeri burda her arttırdımıda veya azaltıgımzda gözükücek id: lbl2
Button: text: "+5 Arttır" on_press: root.arttir()
Button: text: "-5 Azalt" on_press: root.azalt()
Button: text: "Geri" on_press: root.manager.transition.direction = "down" root.manager.current = "main3"
""")
class main2(Screen): def deger(self, obj): main3().deger2()
def arttir(self): main3().arttir2()
def azalt(self): main3().azalt2()
class main3(Screen): def arttir2(self): self.ids.lbl.font_size += 5
def azalt2(self): self.ids.lbl.font_size -= 5
def deger2(self): lbldeger = self.ids.lbl.font_size main2().deger(lbldeger)
sm = ScreenManager() sm.add_widget(main3(name = "main3")) sm.add_widget(main2(name = "main2"))
class main(App): def build(self): return sm
main().run()
Şimdi screen manager kullanırken her screen için sınıf kullanıyoruz biliyosun, işte sınıf içinde root kullandığımızda o sınıfın değişkenlerini baz alır, yani bütün main.py baz almaz. Bu yüzden screen manager üzerinden iletişim kurmalısın. Mesela,
sm = ScreenManager()
sm.add_widget(main3(name = "main3"))
sm.add_widget(main2(name = "main2"))
print sm.screens[0]
dediğimizde main3 screen'e ait sınıfı çağırıp içindeki değişkenleri yönetebiliyoruz. Umarım doğru anlamışımdır
Üst Üye
 
Üyelik Tarihi: 04-07-2018
Yorum Sayısı: 163
Konu Sayısı: 35
Rep Puanı:
0
02-08-2018, Saat: 23:32
(Son Düzenleme: 03-08-2018, Saat: 18:16, Düzenleyen: SD-16.)
(02-08-2018, Saat: 21:49)gecemor Nickli Kullanıcıdan Alıntı: Şimdi screen manager kullanırken her screen için sınıf kullanıyoruz biliyosun, işte sınıf içinde root kullandığımızda o sınıfın değişkenlerini baz alır, yani bütün main.py baz almaz. Bu yüzden screen manager üzerinden iletişim kurmalısın. Mesela,
sm = ScreenManager()
sm.add_widget(main3(name = "main3"))
sm.add_widget(main2(name = "main2"))
Bundan sonrası bende yok.  Biraz daha açıklasanız veya örnekde olabilir.
O zaman senin örneğini şu şekilde düzenleyerek vereyim
PHP Kod:
# -*- coding: utf-8 -*- from kivy.app import App from kivy.lang import Builder from kivy.uix.screenmanager import ScreenManager, Screen from kivy.properties import StringProperty, NumericProperty, BoundedNumericProperty #belki bunlar lazm olur. :)
Builder.load_string(""" <main3>: BoxLayout: orientation: "vertical" Label: text: "YAZI BOYUT AYARLAMA ÖRNEGİ" font_size: sp(25) id: lbl
Button: text: "Boyutu ayarla" on_press: root.manager.transition.direction = "up" root.manager.current = "main2"
<main2>: BoxLayout: orientation: "vertical" Label: text: root.get_text() id: lbl2
Button: text: "+5 Arttır" on_press: root.arttir()
Button: text: "-5 Azalt" on_press: root.azalt()
Button: text: "Geri" on_press: root.manager.transition.direction = "down" root.manager.current = "main3"
""")
class main2(Screen):
def arttir(self): sm.screens[0].ids.lbl.font_size += 5 self.ids.lbl2.text= str(sm.screens[0].ids.lbl.font_size)
def azalt(self): sm.screens[0].ids.lbl.font_size -= 5 self.ids.lbl2.text= str(sm.screens[0].ids.lbl.font_size)
def get_text(self): return str(sm.screens[0].ids.lbl.font_size)
class main3(Screen): pass
sm = ScreenManager() sm.add_widget(main3(name = "main3")) sm.add_widget(main2(name = "main2"))
class main(App): def build(self): return sm
main().run()
Üst Üye
 
Üyelik Tarihi: 04-07-2018
Yorum Sayısı: 163
Konu Sayısı: 35
Rep Puanı:
0
Tamam şimdi jeton düştü. Saolun
rica ederim, screenler arası benzer iletişimi bu şekilde sağlayabilirsin. Kolay gelsin...
Üst Üye
 
Üyelik Tarihi: 04-07-2018
Yorum Sayısı: 163
Konu Sayısı: 35
Rep Puanı:
0
04-08-2018, Saat: 00:20
(Son Düzenleme: 04-08-2018, Saat: 00:26, Düzenleyen: SD-16.)
(03-08-2018, Saat: 21:43)gecemor Nickli Kullanıcıdan Alıntı: Yanlız programa main4 diye bir sınıf daha katınca hata verdi.
KODLAR:
PHP Kod:
# -*- coding: utf-8 -*- from kivy.app import App from kivy.lang import Builder from kivy.uix.screenmanager import ScreenManager, Screen
Builder.load_string(""" <main3>: BoxLayout: orientation: "vertical" Label: text: "YAZI BOYUT AYARLAMA ÖRNEGİ" font_size: sp(25) id: lbl
Button: text: "Boyutu ayarla" on_press: root.manager.transition.direction = "up" root.manager.current = "main2"
<main2>: BoxLayout: orientation: "vertical" Label: text: root.get_text() id: lbl2
Button: text: "+5 Arttır" on_press: root.arttir()
Button: text: "-5 Azalt" on_press: root.azalt()
Button: text: "main4 +5 Arttır" on_press: root.arttir2()
Button: text: "main4 -5 Azalt" on_press: root.azalt2()
Button: text: "ileri" on_press: root.manager.transition.direction = "left" root.manager.current = "main4" Button: text: "Geri" on_press: root.manager.transition.direction = "down" root.manager.current = "main3" <main4>: BoxLayout: orientation: "vertical" Label: id: deneme text: "örnek yazı" """)
class main2(Screen): def arttir(self): sm.screens[0].ids.lbl.font_size += 5 self.ids.lbl2.text= str(sm.screens[0].ids.lbl.font_size)
def azalt(self): sm.screens[0].ids.lbl.font_size -= 5 self.ids.lbl2.text= str(sm.screens[0].ids.lbl.font_size)
def arttir2(self): sm.screens[0].ids.deneme.font_size += 5 self.ids.lbl2.text= str(sm.screens[0].ids.deneme.font_size)
def azalt2(self): sm.screens[0].ids.deneme.font_size -= 5 self.ids.lbl2.text= str(sm.screens[0].ids.deneme.font_size)
def get_text(self): return str(sm.screens[0].ids.lbl.font_size)
class main3(Screen): pass
class main4(Screen): pass sm = ScreenManager() sm.add_widget(main3(name = "main3")) sm.add_widget(main2(name = "main2")) sm.add_widget(main4(name = "main4"))
class main(App): def build(self): return sm
main().run()
iyi de sen mevzuyu tam anlamamışsın, bütün screenlere "0" indexi ile erişemeyiz. Senin ScreenManager 'a eklediğin her screen "screens" değişkeninde bir liste.
sm = ScreenManager()
sm.add_widget(main3(name = "main3"))
sm.add_widget(main2(name = "main2"))
sm.add_widget(main4(name = "main4"))
ise
sm.screens[0] = "main3"
sm.screens[1] = "main2"
sm.screens[2] = "main4"
Önemli olan hangi screen'e ait sınıftan eleman çağıracağın. Hepsine sm.screens[0] yemez
Üst Üye
 
Üyelik Tarihi: 04-07-2018
Yorum Sayısı: 163
Konu Sayısı: 35
Rep Puanı:
0
04-08-2018, Saat: 01:43
(Son Düzenleme: 04-08-2018, Saat: 01:51, Düzenleyen: SD-16.)
aynen tam anlamamışım, ama bende oraya 1 yazmışdım niye çalışmadı? galiba digerlerinide yazmadıgım için çalışmadı. 
şimdi bakdım kullanıcagım hepsine 1 yazmışım orda hata yok, ama sıra olarak yanlış olmuş. 
4. screen 3. de ben 2. yazmışım. Tekrardan saolun.
Üst Üye
 
Üyelik Tarihi: 04-07-2018
Yorum Sayısı: 163
Konu Sayısı: 35
Rep Puanı:
0
04-08-2018, Saat: 21:07
(Son Düzenleme: 04-08-2018, Saat: 21:14, Düzenleyen: SD-16.)
Kodları deleyip .apk yaptıgım zaman androidde düzgün çalışmıyor. Alttaki gibi.
Önce .apk dosyamı açıyorum sonra +1 arttır tıklıyorum ama 2 katı gibi bir deger atlıyor. ama pc de düzgün çalışıyor.
KODLAR
PHP Kod:
# -*- coding: utf-8 -*- from kivy.app import App from kivy.uix.screenmanager import ScreenManager,Screen from kivy.lang import Builder
Builder.load_string(""" <ekran2>: BoxLayout: orientation: "vertical" Label: font_size: sp(20) id: lbl text: "Deneme Metni" Button: text: "Fontunu Ayarla" on_release: root.manager.transition.direction = "up" root.manager.current = "font_ayarla"
<font_ayarla>: BoxLayout: orientation: "vertical" Label: text: "Labelin Font Boyutu: 20" id: lbl2 BoxLayout: orientation: "horizontal" Button: text: "+1 Arttır" on_release: root.arttir()
Button: text: "-1 Azalt" on_release: root.azalt()
Button: text: "Geri" on_release: root.manager.transition.direction = "down" root.manager.current = "ekran2" """)
class ekran2(Screen): pass
class font_ayarla(Screen): def arttir(self): sm.screens[0].ids.lbl.font_size += 1 self.ids.lbl2.text = str("Labelin Font Boyutu: " + str(int(sm.screens[0].ids.lbl.font_size)))
def azalt(self): sm.screens[0].ids.lbl.font_size -= 1 self.ids.lbl2.text = str("Labelin Font Boyutu: " + str(int(sm.screens[0].ids.lbl.font_size)))
sm = ScreenManager() sm.add_widget(ekran2(name = "ekran2")) sm.add_widget(font_ayarla(name = "font_ayarla"))
class ekran(App): def build(self): return sm
ekran().run()
Dosyayı açıyorum.
+1 e Tıklıyorum
Ama daha fazla artıyor
|