Konuyu Oyla:
  • Toplam: 2 Oy - Ortalama: 1
  • 1
  • 2
  • 3
  • 4
  • 5
Kivy Dili Soru & Cevap
Direkt çalışır ekstra bişey yüklemene gerek yok
Ara
Cevapla
@Cüneyt Partak , sqlite scriptini ele alarak söylemem gerekirse sınıflı yapı kullanmada prblemler yaşamışsın ve buna bağlı olarak yapmışsın ilk hatanı. "adi" is not defined diye hata aldığında ilk olarak tanımlama konusunda sorun yaşadığını anlaman gerekirdi.

İkinci olarak, sınıflı yapıdaki hataları düzelttikten sonra "TextInput" olarak tanımladığın "adi" değişkeninden yazıyı alabilmen için get() metodunu kullanmamalısın. TextInputtan ve kivy'nin diğer widgetlerinden text içeriğini "text" olarak alıyoruz. Yani

"self.adi.get()" yerine "self.adi.text" kullanman yeterli olacaktır. Geri kalan hatalar ise sınıflı yapıda yapmış olduğun hatalardır. İstersen temize çekerim kodları ama bence kendin düzeltmen daha yararlı olacaktır.
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
[quote pid='34713' dateline='1498989589']
gecemor Kivy'nin sitesinden yapısı düzgün olan kodlamayı örnek aldım. Dediğin gibi yaptım şuan veritabanına sorunsuz ekliyor. Yalnız cursor'de hata verdi. Onu da silince çalıştı.  Çok teşekkür ederim.
[/quote]
Cevapla
@Cüneyt Partak senin kodları şu şekilde toparladım, belki daha faydalı olur.

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


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 BoxLayout(orientation='vertical')

        
duzen.add_widget(Label(text='cumle:'))
        
self.adi TextInput()
        
duzen.add_widget(self.adi)

        
duzen.add_widget(Widget())

        
gir_dugme=Button(text='Gir')
        
gir_dugme.bind(on_press=self.callback)
        
duzen.add_widget(gir_dugme)
     
        
self.title " "  

        
return duzen

    def callback
(selfevent):
        
## Bu sekilde text aliyoruz
        
item1 self.adi.text
        
        
## Ekrandaki texti silmek icin bu daha pratik olacaktir.
        
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,))
        
self.conec.commit()
        
self.conec.close()

        
main().run() 
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
gecemor öğrenmem açısından çok güzel oldu sağol.
Cevapla
kivy'nin sitesinden bakıp enter'a basılınca kaydetmeyi yapmaya çalışıyorum.

self.adi = TextInput(multiline=False)
adi.bind(on_text_validate=on_enter)

Şeklinde yapacağımızı gösteriyor.

def on_enter(self, value):

Şeklinde de çağırma...

gene hangi tanımlama hatasını yanlış yapıyorum.

NameError: global name 'adi' is not defined diyor.

Başına self ekledim bu seferde on_enter ' a hata verdi.
Cevapla
@Cüneyt Partak on_enter da aynı sınıftaysa ona da "self.on_enter" demelisin

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


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 on_enter(selfvalue):
        print(
'User pressed enter in'self)
        
self.adi.text=""
        
    
def build(self):
    
        
duzen BoxLayout(orientation='vertical')

        
duzen.add_widget(Label(text='cumle:'))
        
self.adi TextInput(multiline False)
        
duzen.add_widget(self.adi)

        
self.adi.bind(on_text_validate=self.on_enter)

        
duzen.add_widget(Widget())

        
gir_dugme=Button(text='Gir')
        
gir_dugme.bind(on_press=self.callback)
        
duzen.add_widget(gir_dugme)
     
        
self.title " "  

        
return duzen

    def callback
(selfevent):
        
## Bu sekilde text aliyoruz
        
item1 self.adi.text
        
        
## Ekrandaki texti silmek icin bu daha pratik olacaktir.
        
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,))
        
self.conec.commit()
        
self.conec.close()

        
main().run() 
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
tabi enter ile veri tabanına kayıt etmeye devam etmek istiyosan "on_enter" fonksiyonu yerine yine "callback" fonksiyonunu kullanmalısın. Sitesinde on_enter olarak örnek vermişler, yani enter'dan sonra çağırılması gereken fonsiyon olarak. Bu yüzden

self.adi.bind(on_text_validate=self.callback)

yapıp on_enter fonksiyonunu silebilirsin çünkü gir butonu ile enter aynı görevi yapacak.
Turbobit Premium Link Çeviri | Turbobit Link Generator | http://turbobit.qpython.club
Cevapla
gecemor sınıf olayını şimdi çok daha iyi anladım. O da mantıklı. Tamamdır şuan oldu. Çok teşekkürler.
Cevapla
Rica ederim, iyi calismalar.
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