Merhaba arkadaşlar.
Ben ubuntu 18.04 kullanıyorum. Kivy kullanarak kendi programımı yazıyorum. Kodlarımı çalıştırınca sıkıntı yaşamıyordum. Builder.load_file ile tam dizin belirterek .kv dosyamı sorunsuz yüklüyor sorunsuz çalıştırıyordum. Ancak dün yani 21 haziran 2019’da ubuntunun sistem güncellemesinden sonra şöyle bir hata mesajı aldım:
Traceback (most recent call last):
File “main.py”, line 16, in
Builder.load_file("/home/omer/Masaüstü/yol/yol.kv")
File “/usr/lib/python3/dist-packages/kivy/lang/builder.py”, line 301, in load_file
return self.load_string(data, **kwargs)
File “/usr/lib/python3/dist-packages/kivy/lang/builder.py”, line 399, in load_string
widget = Factory.get(parser.root.name)(__no_builder=True)
File “/usr/lib/python3/dist-packages/kivy/factory.py”, line 130, in getattr
raise AttributeError
AttributeError
Daha önce sorunsuz çalıştırdığım kodlarımdan şimdi neden bu hatayı alıyorum. Ubuntu ile mi alakalı. Sizce ne yapmalıyım.
İşte İnterpreterin sevmediğim kısmı öyle bir haya veriyor ki ne dediğini anlıyana helal olsun araştırma yapacaksın o bile zor varsa bilen sorunu bizi de bilgilendirsin
Ya kivy’de (ya da Python’da) uyum bozan bir degisiklik olmus, ya da kullandigin resmi olmayan seylerden bir tanesi yeni bir versiyonda gitmis. (Veya update’in yan etkilerinden bir tanesi etkiliyor da olabilir ama dusuk ihtimal.)
Fakat google’a soracagin seyi buraya sormussun, biz de senin yerine google’a soruyoruz.
Buradaki insanlardan yardim istiyorsan kaynak kodunu ve kullandigin Python ve kutuphanelerin versiyonlarini yazman lazim.
sm = ScreenManager()
sm.add_widget(ekran(name = “ekranim”))
class abc(App):
def build(self):
return sm
abc().run()
deneme.kv:
:
BoxLayout:
Button:
text: “Deneme”
Aldığım hata mesajı:
Traceback (most recent call last):
File “main.py”, line 4, in
Builder.load_string("/home/omer/Masaüstü/deneme.kv")
File “/usr/lib/python3/dist-packages/kivy/lang/builder.py”, line 399, in load_string
widget = Factory.get(parser.root.name)(__no_builder=True)
File “/usr/lib/python3/dist-packages/kivy/factory.py”, line 130, in getattr
raise AttributeError
AttributeError
load_string() değil, load_file() olması gerekiyor. Çünkü siz bir dosyadan yükleme yapıyorsunuz. load_string() içerisinde yanlış bir girdi olduğu için hata veriyor. Ayrıca önceden nasıl çalışıyordu anlamadım.
efendim çok pardon. Ben bu kodu hangi kafayla buraya koyduğumu hatırlamıyorum. Artık o zaman nasıl bir dalgınlık varsa bende gelmişi bu kodu paylaşmışım. İşte asıl programım içindeki Builder’i kullanışım:
(...)
if name not in classes:
if name[0] == name[0].lower():
# if trying to access attributes like checking for `bind`
# then raise AttributeError
raise AttributeError
(...)
if __name__ == '__main__':
Factory.register('Vector', module='kivy.vector')
Factory.register('Widget', module='kivy.uix.widget')
parser.root.name'in aldığı değeri incelemekte fayda var, ve isimlendirme konusunda kurallar vs yazıyorsa dökümanlarda, göz gezdirmenizi öneririm. Buradan anlaşıldığı kadarıyla (if name[0] == name[0].lower()), name değişkeni tamamen küçük harflerden oluşmamalı. (Belki Widget yazmanız gerekirken widget yazmış olabilirsiniz.)
sorunu buldum. Kodların en sonunda yanlışlıkla eklenmiş bir c harfi varmış. Meğer bütün sorun oymuş, onu silince her şey düzeldi. Forumu da boşuna meşgul etmiş olduk. (Ama bana da hak verin yani. Bu hata mesajına bakınca insan sorunun ne olduğunu anlayamıyor ve hata mesajından dolayı sorunu bambaşka yerlerde arıyor. )