Konuyu Oyla:
  • Toplam: 0 Oy - Ortalama: 0
  • 1
  • 2
  • 3
  • 4
  • 5
Kİvyde garip bir sorunum var. :)
#1
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ı. Smile


Ö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 yapamk istedigimi anlarsınız.   Big Grin
PHP Kod:
# -*- coding: utf-8 -*-
from kivy.app import App 
from kivy
.lang import Builder
from kivy
.uix.screenmanager import ScreenManagerScreen
from kivy
.properties import StringPropertyNumericPropertyBoundedNumericProperty #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(selfobj):
        
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() 
Ara
Cevapla
#2
Ş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 Smile
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
#3
(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. Big Grin Biraz daha açıklasanız veya örnekde olabilir. Smile
Ara
Cevapla
#4
O zaman senin örneğini şu şekilde düzenleyerek vereyim Smile

PHP Kod:
# -*- coding: utf-8 -*-
from kivy.app import App 
from kivy
.lang import Builder
from kivy
.uix.screenmanager import ScreenManagerScreen
from kivy
.properties import StringPropertyNumericPropertyBoundedNumericProperty #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.textstr(sm.screens[0].ids.lbl.font_size)

    
def azalt(self):
        
sm.screens[0].ids.lbl.font_size -= 5
        self
.ids.lbl2.textstr(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() 
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
#5
Tamam şimdi jeton düştü. Saolun Smile
Ara
Cevapla
#6
rica ederim, screenler arası benzer iletişimi bu şekilde sağlayabilirsin. Kolay gelsin...
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
#7
(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 ScreenManagerScreen

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.textstr(sm.screens[0].ids.lbl.font_size)

 
   def azalt(self):
 
       sm.screens[0].ids.lbl.font_size -= 5
        self
.ids.lbl2.textstr(sm.screens[0].ids.lbl.font_size)

 
   def arttir2(self):
 
       sm.screens[0].ids.deneme.font_size += 5
        self
.ids.lbl2.textstr(sm.screens[0].ids.deneme.font_size)

 
   def azalt2(self):
 
       sm.screens[0].ids.deneme.font_size -= 5
        self
.ids.lbl2.textstr(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() 
Ara
Cevapla
#8
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 Smile
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
#9
aynen tam anlamamışım, ama bende oraya 1 yazmışdım niye çalışmadı? galiba digerlerinide yazmadıgım için çalışmadı. Smile
şimdi bakdım kullanıcagım hepsine 1 yazmışım orda hata yok, ama sıra olarak yanlış olmuş. Smile
4. screen 3. de ben 2. yazmışım. Tekrardan saolun.   Shy
Ara
Cevapla
#10
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 Boyutu20"
            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
   
Ara
Cevapla

{lang: 'en'}


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Python kivyde android için klavye yapma SD-16 10 2,850 21-08-2018, Saat: 20:03
Son Yorum: excel
  Kivyde programda müzik çalmak SD-16 47 9,394 07-08-2018, Saat: 23:24
Son Yorum: SD-16

Hızlı Menü:


Konuyu Okuyanlar: 1 Ziyaretçi
Change Theme