Konuyu Oyla:
  • Toplam: 2 Oy - Ortalama: 1
  • 1
  • 2
  • 3
  • 4
  • 5
Kivy Dili Soru & Cevap
Tekrar Merhaba.
Kivy'de label'ın içine textbox'tan gelen yazıyı yada sqlite database'den tek satır yazıyı yazdırabiliyorum fakat for döngüsü ile altalta dizilmiş kayıtları yazdıramıyorum.

- Cümleyi split ile parçalara ayırdıktan sonra kelimeleri bir yerde listelemem lazım.
- Sqlitetten bilgisayarın konuşması ile gelen cümleleri yazdırmam lazım
- benim yazdığım cümleleri onun altına yazmam lazım. Bi o bi ben chat konuşması gibi olacak yani.
Sonuçta ikisi de sanırım değişkeni kivy'ye atamayla ilgilidir belkide.

Örnek ( Biri textbox'a yazdığım diğeri , bilgisayarın veritabanından seçtiği cümle) :
- Nasılsın?
- İyiyim.
- Sen bir robotsun musun?
- Evet, ben bir robotum.
Şeklinde.

Bunun için listview varmış ama örnekler hep tırnak içinde önceden belirtilip hazır ifadeleri yazdırmayla ilgili... sqlite veritabanıyla ilgili örnekte bulamadım.


Örnek Split kodu :

      item1 = self.adi.text
       cumlebol=item1.split(' ')
       for i in cumlebol:

Örnek veritabanı kodu :          
    db = sqlite3.connect("kayit.db")
        im = db.cursor()
        im.execute("""SELECT * FROM kayit""")
        veriler = im.fetchall()
       for i in veriler:

yada item1 = self.adi.text şeklinde

Ben textbox'a yazıp enter'a bastığımda sırasıyla görüntülenen listeye nasıl işlerim ? Örnek bir kod var mı bildiğiniz. Yardımcı olabilirseniz sevinirim.



PHP Kod:
#!/usr/bin/python
# -*- coding: utf-8 -*-
#!/usr/bin/kivy
import sqlite3
import kivy


from kivy
.app import App
from kivy
.uix.widget import Widget
from kivy
.uix.gridlayout import GridLayout
from kivy
.uix.boxlayout import BoxLayout
from kivy
.uix.label import Label
from kivy
.uix.textinput import TextInput
from kivy
.uix.button import Button


from kivy
.config import Config
Config
.set('kivy''keyboard_mode''system')
Config.write()



class 
main(App):

 
   ## Aslinda init fonksiyonunda veritabanini acmaya gerek yok
 
   ## Ama yine de init ornegi olsun diye yazdim.
 
   def __init__(self, **kwargs):
 
       super(mainself).__init__(**kwargs)
 
       
       
## self.conec=sqlite3.connect('kayit.db')
 
      ## self.cur = self.conec.cursor()
 
       
       
## ## cumle adli tabloyu ekliyoruz
 
      ## self.cur.execute('''CREATE TABLE IF NOT EXISTS kayit (cumle)''')
 
       
       
## self.conec.commit()
 
      ## self.conec.close()

 
   def build(self):
 
   
        duzen 
GridLayout(cols=2,spacing=5padding=30,row_force_default=Truerow_default_height=40)
 
       self.lbl1 Label(text="Selam, birşeyler yaz:".decode('utf-8'), height=20)
 
       duzen.add_widget(self.lbl1)
 
       duzen.add_widget(Widget())
 
       self.adi TextInput(text=''multiline=False,height=20)
 
       self.adi.bind(on_text_validate=self.callback)
 
       duzen.add_widget(self.adi)
 
       gir_dugme=Button(text='Yaz ve Gönder')
 
       gir_dugme.bind(on_press=self.callback)
 
       duzen.add_widget(gir_dugme)

 
       self.title " "
 
       self.yenilbl Label(text="Konuşma yeri..."height=10)
 
       duzen.add_widget(self.yenilbl)



 
       return duzen
    
    def callback
(selfevent):
 
       ## Bu sekilde text aliyoruz
 
       self.lbl1.text "Dedin ki; " self.adi.text.capitalize()
 
       item1 self.adi.text
        
        
        db 
sqlite3.connect("kayit.db")
 
       im db.cursor()
 
       im.execute("""SELECT * FROM kayit""")
 
       veriler im.fetchall()
 
       for i in veriler:
 
           if i[0]==item1:
 
               self.ekleme()
 
               return main
            if item1
=="" or item1==" " :
 
                     self.ekleme()
 
       else:
 
                     self.cumleekle()  
                  
    def cumleekle
(self):
 
       ## cümleyi ekle  
 
       item1 self.adi.text
        self
.conec=sqlite3.connect('kayit.db')
 
       self.cur self.conec.cursor()
 
       self.cur.execute('''CREATE TABLE IF NOT EXISTS kayit (cumle)''')
 
       self.cur.execute('''INSERT INTO kayit (cumle) VALUES (?)''', (item1,))
 
       print "yeni cümle eklendi"
 
               
  
## cümleyi kelimelere ayır - ekle
 
       cumlebol=item1.split(' ')
 
       for a in cumlebol:
 
           self.cur.execute('''INSERT INTO kelimegirisi (kelime) VALUES (?)''', (a,))
 
       print "Kelimeler eklendi"
 
       self.ek()
 
          

    def kkontrol
(self):
 
       ## sözlükten kelime var mı kontrolü yap 
 
       item1 self.adi.text
        cumlebolb
=item1.split(' ')
 
       for i in cumlebolb:
 
                   self.conecb=sqlite3.connect('kayit.db')
 
       self.curb self.conecb.cursor()
 
       self.curb.execute('''SELECT * FROM turkcekelimeler where tumkelimeler like(?)''', (i,))
 
       verilerb self.curb.fetchall()
 
       for c in verilerb:
 
                  if [c[0]]==[str(cumlebolb[0])] :
 
                  print "Sözlükten baktım bu kelime var"
 
                  
                   self
.ek()
 
                  


    def ek
(self):  

        
## Kelimelerin sonunda ek var mı kontrolü
 
       item1 self.adi.text
        cumlebolek
=item1.split(' ')
 
       ek=[str(cumlebolek[0])]
 
       for i in ek:
 
           if i.endswith("dır") or i.endswith("dir") or i.endswith("tir") or i.endswith("tır") or i.endswith("dur") or i.endswith("dür") or i.endswith("dur") or i.endswith("tür" or i.endswith("tur") :
 
               print "sonunda dır veya dir gibi ekler var"
 
               ## Burada içinde dir/dir/tır/tir/dur/dür eki varsa ona göre işlem yap
 
               
                self
.aliye()


 
   def aliye(self):
 
      
        
## Bu kısım bilgisayarın cümleyi alıp yorum yapacağı yer. Geliştirilecek..
 
       
               self
.yenilbl.text "Aliye: " "Test konuşma içeriği..."
 
              if self.adi.text=="merhaba" or self.adi.text=="Merhaba" or self.adi.text=="MERHABA"
 
               self.yenilbl.text "Aliye: " "Merhaba."
 
               self.conec.commit()
 
               self.conec.close()
 
               return main
            
    def ekleme
(self):
 
       print "eklenmedi"
 
       self.adi.text=""
 
       self.aliye() 

 
       
main
().run() 
Cevapla
hiç bir şey anlamadım Smile
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
Şimdi ben böyle bişey düşündüm de kivy çalışmadı telefonda bir türlü pc de yok malesef şuan
Heralde bi bot yapmaya çalışıyorsun sen soru soracan o cevap verecek.

Önce veri tabanına belli cevapları kaydedersin.
Sonra cevapları fetchall ile listeler, listeyi de for döngüsünü koyarsın. Sonra
"nasılsın" sorusunun cevabı listenin 1. elamanı ise
İf self.adi.text == "Nasılsın" or "NASILSIN" :
self.adi.text = i[0]
else :
self.adi.text = "Anlamadım!"
Şeklinde olabilir belki. Ben bunu anladım yanlış anlamış da olabilirim. Smile
Ara
Cevapla
Pardon biraz anlatım karıştı galiba Smile kısaca şöyle; şimdi veritabanındakileri yada split'le böldüklerimizi print yaparak altalta listeleyebiliyoruz. Bunu kivy'de listeleme ( listview) ile yapmak istiyorum. label içine altalta listeleme olmuyor o yüzden.

sqlite veritabanından gelen cümleyi kivy ile listeleme ( listview)
ve textbox'ta yazdığım cümleyi onun altına kivy ile listeleme ( aynı listview içerinde)
split ile kelimelere bölüp kivy ile listeleme (bu da başka listview)

Evet bot gibi ama anlatmak istediğim kivy'de değişkenler veya veritabanı içerikleri nasıl listview'de listelenir ?
Cevapla
@Cüneyt Partak asagidaki basit bir listview örneği. Umarım yardımcı olur.

PHP Kod:
from kivy.app import App
from kivy
.adapters.listadapter import ListAdapter
from kivy
.uix.listview import ListView
from kivy
.uix.floatlayout import FloatLayout
from kivy
.uix.label import Label

class ListExample(App):
    
    
def build(self):
        
self.duzen FloatLayout()
    
        
# Bu ornek bir liste, split ile boldugun veya veritabanindan cektigin...
        
self.veriler = ["hello""world""merhaba""dunya""nasil""gidiyor"]
        
        
# list adaptor'deki "data" liste elemanlaridir
        
self.list_adaptor ListAdapter(data=self.veriler,
                                        
cls=Label,
                                        
selection_mode='single')

        
self.liste ListView(adapter=self.list_adaptor,
                              
size_hint=(.5,.2), 
                              
pos_hint={'center_x':.5,'center_y':.5})
    
        
self.duzen.add_widget(self.liste)
        return 
self.duzen
        
        
if __name__ == "__main__":
    
ListExample().run() 
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
Bunun benzerini kivy github'tan indirip denemiştim. Benim button yada enter ile çağırdığım def aşağıda olduğu için değişken ile verdiğim liste değeri ile yukarıdaki liste değişmiyor. Belki self.veriler = ["hello", "world", "merhaba", "dunya", "nasil", "gidiyor"] ibaresinden önce veri tabanına bağlanıp listeye yüklersem belki sorun çözülür. Tabiki textbox'tan gelende o listeye yerleşecek o enter ile geliyor. Deneyeyim bakalım tekrar artık. Örnek için sağol gecemor

birde bir çıktıda print , [(u'gel',)] şeklinde çıkıyor. Diğer çıktıda gel şeklinde o yüzden bu iki değişken eşitlenmiyor.

if veriler==test:
print "cümlenin son kelimesinde yüklem var"
else:
print "cümlenin son kelimesinde yüklem yok"

O yüzden yüklem yok diyor halbuki eşitler nasıl düzeltirim.

Teşekkür ederim
Cevapla
Veritabanından çektiğin liste ile listadapter'e uygun listenin uyumsuz olması normal çünkü fetchall() ile çektiğin veriler "liste içinde demet şeklindedir ve tipi unicode'dur". Bunu düzeltmek için veritabanından çektiğin verileri sonradan oluşturduğun bir listede toplayabilirsin.

#boş bir liste oluştur.
sonraki_liste = []

#bu veritabanından çektiğin liste olsun.
veriler = im.fetchall()

bunları for döngüsüne sokarak sonraki liste elemanlarını yerleştirelim

PHP Kod:
for i in veriler:
    
#gelen liste elemanı demet olacağından onun da ilk elemanını seç '[0]' ile...
    #sonra stringe dönüştür 'str()' ile...
    
yeni_eleman str(i[0])
    
    
#son olarak sonraki listeye ekleyelim
    
sonraki_liste.append(yeni_eleman

budandan sonra "sonraki_liste" ile "list_adapter" listesi yani "data" listesi artık uyumlu olacaktır.

data = sonraki_liste
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
Henüz kivy listview hazırlamaya vaktim olmadı ama [] içine ekleyip denedim print çıktısı "gel" şeklinde göstermek yerine ekstra [] ekledi kelimeye. Bende eşitlemek yerine if i[0] in test: şeklinde yapınca yüklem içinde var dedi. Yani şuan amacıma ulaştım. Listviev'i de söylediğin gibi yapacağım.

Bilgilendirme için çok teşekkür ederim.
Cevapla
Merhaba.. Whatsapp ve benzeri uygulamalarda ikonun yanında, yuvarlak içinde, kaç mesajın geldiğini gösteren özelliği kivy'de yapabilir miyiz ?
( (3) şeklinde gibi whatapp kapalı olduğunda görünür mesela )
Birde whatapp kapalıyken üstte gelen mesajı gösteriyor mesela . Bunları kivy'de yapabilir miyiz, yapabilirsek nasıl yaparız?

Bir uygulama düşünüyorum da bunlar olması gerekiyor. Yoksa bunu android programlamada mı yapmalıyım ? Tavsiye verebilir misiniz?
Cevapla
Android programlamadan kastın ne bilmiyorum fakat kivy de zaten java sınıfını kullanıyor dolaylı olarak. Kivy ile apk oluşturmadan önce izinleri ve gerekli java sınıfını bulup adapte edilerek yapılır. Tabi bu dediklerim apk için, eğer qpython kullanarak yapmayı düşünüyosan olacağını sanmıyorum.
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla

{lang: 'en'}


Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Programı Hızlandırma ile ilgili bir soru SD-16 8 5,426 29-04-2020, Saat: 21:02
Son Yorum: ahgonlum
  Kivy de basit animsyonlar nasıl oluşturulur SD-16 3 3,442 31-03-2020, Saat: 11:27
Son Yorum: HackLord
  Kivy programını .exe yapmak SD-16 3 4,051 15-04-2019, Saat: 01:20
Son Yorum: gecemor
  Kivy button SD-16 4 4,190 26-01-2019, Saat: 22:33
Son Yorum: SD-16
  Kivy yazıcı modülü SD-16 1 2,540 27-11-2018, Saat: 22:19
Son Yorum: Ethnic

Hızlı Menü:


Konuyu Okuyanlar: 1 Ziyaretçi
Change Theme