BeeWare mi Kivy mi

Merhabalar,
Python ile mobil uygulama geliştirmek için BeeWare ve Kivy arasında kaldım.
Öğrendiğim kadarıyla;

  • Yazdığımız kodu hem BeeWare hem de Kivy ile aynı anda masaüstü, android ve ios platformlarında çalıştırabiliyoruz.
  • Kivy’nin artısı olarak Kivy, BeeWare’e nazaran daha köklü.
  • Diğer taraftan BeeWare hangi platformda çalıştırılırsa o platformun asıl (native) arayüzünü kullanırken Kivy de bu sabit.

Kivy ya da BeeWare kullanan arkadaşlar neler düşünür, önerir merak ediyorum.

İkisinden birine hiç göz gezdirdiniz mi yani şekli, kod biçimi açısından nasıldır diye baktınız mı, bilmiyorum ancak daha önceden kivy ile yazdığım bir programı buraya atabilirim.

from kivy.app import App
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.gridlayout import GridLayout
from kivy.core.window import Window
from kivy.config import Config
from kivy.uix.widget import Widget
from kivy.uix.popup import Popup
from kivy.uix.textinput import TextInput
from kivy.uix.image import Image
import locale
import datetime
import time

locale.setlocale(locale.LC_ALL, "")

class Test(App):
    def build(self):        
        self.düzen = FloatLayout()
        self.title = "Cevap Kağıdı"

        #Resim
        self.resim = Image(source="resim-4.jpg", allow_stretch=True)

        #Label
        self.şıklar = Label(text="", font_size="50sp", pos_hint={"x":0.01, "y":0.1},
        color=[1,1000,1000,1])        
        self.şık_deposu = ""
        
        #Tarih
        self.an = datetime.datetime.now() 
        self.tarih = datetime.datetime.strftime(self.an, "%d.%m.%Y  %A")
        self.tarih = str(self.tarih)
        self.tarih_göster = Label(text=self.tarih, font_size="30sp", pos_hint={"x":0.38, "y":0.45},
        color=[1000,1,1,1])

        #Boyutlar
        self.şık_boyut = (0.2,0.15)
        self.diğer_boyut = (0.2,0.15)

        #Diğer butonlar
        self.çık = Button(text="Çıkış", font_size="30sp", size_hint=(self.şık_boyut),
        pos_hint={"x":0.75, "y":0.05}, on_release=self.çıkış)
        
        self.sil = Button(text="Sil", font_size="30sp", size_hint=(self.şık_boyut),
        pos_hint={"x":0.75, "y":0.25}, on_release=self.yazı_sil)

        self.geri_alma = Button(text="Geri Al", font_size="30sp", size_hint=(self.şık_boyut),
        pos_hint={"x":0.025, "y":0.05}, on_release=self.geri_al_kont)

        #Şıklar
        self.A_şık = Button(text="A", font_size="40sp", size_hint=(self.şık_boyut),
        pos_hint={"x":0.25, "y":0.25})
        self.A_şık.bind(on_press=lambda x: self.yaz("-A", None))

        self.B_şık = Button(text="B", font_size="40sp", size_hint=(self.şık_boyut),
        pos_hint={"x":0.5, "y":0.25})
        self.B_şık.bind(on_press=lambda y: self.yaz("-B", None))

        self.C_şık = Button(text="C", font_size="40sp", size_hint=(self.şık_boyut),
        pos_hint={"x":0.25, "y":0.05})
        self.C_şık.bind(on_press=lambda z: self.yaz("-C", None))

        self.D_şık = Button(text="D", font_size="40sp", size_hint=(self.şık_boyut),
        pos_hint={"x":0.5, "y":0.05})
        self.D_şık.bind(on_press=lambda n: self.yaz("-D", None))

        #Resim
        self.düzen.add_widget(self.resim)
        
        #Butonların düzene aktarılması
        self.düzen.add_widget(self.A_şık)
        self.düzen.add_widget(self.B_şık)
        self.düzen.add_widget(self.C_şık)
        self.düzen.add_widget(self.D_şık)
        
        #Diğer elemanlar
        self.düzen.add_widget(self.şıklar)
        self.düzen.add_widget(self.çık)
        self.düzen.add_widget(self.sil)
        self.düzen.add_widget(self.geri_alma)
        self.düzen.add_widget(self.tarih_göster)

        return self.düzen

    def yazı_sil(self, olay=None): #Tüm yazıyı silme
        self.şık_deposu = ""
        self.şıklar.text = ""
        
    def yazı_geri_al(self, olay=None, başlangıç=0, bitiş=-1): #En son yazılanı geri alma
        self.şık_deposu = self.şık_deposu[başlangıç:bitiş]
        self.şıklar.text = self.şıklar.text[başlangıç:bitiş]
    
    def geri_al_kont(self, olay=None): #A,B,C,D karakterlerinden önce bir şey var ise 
        if self.şık_deposu[-1] and self.şıklar.text[-1] == "A" or "B" or "C" or "D":
            self.yazı_geri_al(başlangıç=0, bitiş=-2)
        
        elif self.şık_deposu[-1] and self.şıklar.text[-1] != "A" or "B" or "C" or "D":
            self.yazı_geri_al(başlangıç=0, bitiş=-1)

        elif self.şık_deposu[-1] and self.şıklar.text[-1] == "" or " ":
            pass

        else:
            pass
        
        #if self.şık_deposu[-1] and self.şıklar.text[-1] == "A" or "B" or "C" or "D":
        #    self.yazı_geri_al(başlangıç=0, bitiş=-1)

    def yaz(self, şık, olay): #Yazma işlemi
        self.şık_deposu += şık
        self.şıklar.text = self.şık_deposu[1:]

    def çıkış(self, olay=None): #Çıkış 
        self.düzen = GridLayout(cols=1)
        
        self.düzen.add_widget(Label(text="Çıkmak istiyor musunuz?", size_hint_y=0.3, font_size="30sp"))
        self.düzen.add_widget(Widget(size_hint_y=0.1))
        
        self.buton = BoxLayout(size_hint_y=0.2)
        self.buton.add_widget(Button(text="Evet", markup=True, size_hint_y=0.7, on_release=self.kontrol))
        
        self.buton.add_widget(Button(text="Hayır", markup=True, size_hint_y=0.7, on_release=self.kontrol))
        self.düzen.add_widget(self.buton)
        
        self.popup = Popup(title = "Çıkış",
                      title_size = "20sp",
                      content = self.düzen,
                      auto_dismiss = False,
                      size_hint = (None,None),
                      size = (700,500))
        self.popup.open()
    
    def kontrol(self, olay=None): #Çıkışı kontrol ederken kullanılmakta
        self.buton_yazısı = olay.text
        if (self.buton_yazısı == "Evet"):
            Window.close()    
        else:
            self.popup.dismiss()

Test().run()


Hatalarım olmuştur, zaten kütüphaneye daha aşina olanlar bilecektir, düzeltecektir. İyi çalışmalar…
Not: Ortaokulda olduğum halde zorlayan hocalarım var. Test kitapları da pahalı olunca internetten ya da arkadaştan alıp işaretlemeden çözmek kalıyor geriye. :smiley:

1 Beğeni

Kiviy kolay bir dil.Zorlanmadan uygulamayı yaparsın.Bunda bir sıkıntı yok.Ama androide yazdığın uygulamayı apk yapman gerekecek ozamanda çokca buildozerde hatalar alacaksın.
Bazen hataları çözmekte uygulamayı yapmaktan zor.
Bunun için linux a aşina olman lazım.
Kivy sadece profosyonel yazılımcılar için bir araç.

2 Beğeni

Teşekkürler, tkinter kullanmışlığım var, Kivy ile oldukça benzermiş kod dizilimi.

Teşekkürler yorumlarınız için. Anlamadığım, tüm kurulumları doğru bir şekilde yapıp android studio vs. ne gerekiyor bilmiyorum, sonrasında da doğru kodları yazdığınız halde mi apk yaparken hatalar alıyorsunuz?

Kivy başka android studio başka.Pythonun mobil i kivy.kivy ile uygulamayı yapıp sonra bunu javaya çevirmek zorundasın.yoksa Play store yükleyemezsin.Bu yüzden apk yapması uygulama yazmasından zor.

kivy nin de android studio nun da ne olduğunu biliyorum. android studio ile java da kotlin de kullanmışlığım var.
dediklerinizden şunu anlıyorum, yazdığınız kodun apk sını almak zor kivy problem çıkarıyor. ben de merak ediyorum tüm kurulumları doğru yaptığınız, kodlarınız da doğru olduğu halde mi bu böyle? ya da apk almadan önce javaya çevirmek gerektiğini söylüyorsunuz, problem orada
mı javaya mı çeviremiyor? mesela android studio kotlin ile javayı bazen ufak tefek sıkıntılar olsa da birbirine çevirebiliyordu.

Kivy ile apk oluştururken python kodlarınız Java’ya dönüştürülmez. Bunun yerine python’ın kendisi derlenip apk içine gömülür ve sizin kivy kodlarınız bu gömülü python sayesinde çalışır.

Kivy ile ilgili hataların %80 civarı hep android derlemesiyle ilgilidir. Kivy uygulamaları buildozer denen araçla apk haline getirilir. Bu araç, internetten gereklilikleri indirir ve bir araya getirerek derler ve son olarak apk üretir. Ancak sürekli sürüm numaraları bir türlü birbirini tutmaz, indirdiği sdk içerisindeki araçlar çalışmaz, 3. parti kütüphane eklemek tam bir işkencedir, sürekli dosya indirir vs çok sıkıntılı bir süreçtir.

Java biliyorsanız, android programlama için kesinlikle java kullanın. Kivy’e android için hiç bulaşmayın, onun dışında normal PC’ler de kullanabilirsiniz. Bunları bizzat kivy belgelerinin yazarı olarak söylüyorum :smiley:

İyi forumlar.

4 Beğeni

Anladım, teşekkür ederim. Tek kod yazıp birkaç platformda çalışma fikri hoşuma gidiyor. Kivy’den uzaklaştım, BeeWare’e bir göz atacağım.

BeeWare için çok fazla kaynak yok. Kendi resmi sitesinde bile birkaç sayfa anlatılmış. Ama yine de karar sizin. İyi çalışmalar :slight_smile:

1 Beğeni

PyCon videolarını filan gördüm, onlarla giriş yaparım diye umuyorum. ilginize teşekkürler, iyi çalışmalar.

1 Beğeni