#!/usr/bin/env python
# -*- coding: utf-8 -*-
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager,Screen
Builder.load_file("screen.kv")
class pencere1(Screen):
def kayt(self):
f=open("dosyaTR.txt","w")
f.write(self.root.ids.txt.text)
f.write("\n")
f.close()
def oku(self):
f=open("dosyaTR.txt","r")
self.yazi=(f.read())
self.manager.pencere2="%s"% self.yazi
class pencere2(Screen):
pass
sm=ScreenManager()
sm.add_widget(pencere1(name="pencere1"))
sm.add_widget(pencere2(name="pencere2"))
class uygulama(App):
def build(self):
return sm
uygulama().run()
-----------------------------------------------------
#kv dosyası...
<pencere1>:
BoxLayout:
TextInput:
id:txt
multiline:True
BoxLayout:
Button:
text:"Oku"
size_hint_y:.2
on_press:app.oku()
Button:
text:"Kayıt"
size_hint_y:.2
on_press:app.kayt()
Button:
text:"Git"
size_hint_y:.2
on_press:
root.manager.transition.direction="left"
root.manager.transition.duration=.2
root.manager.current="pencere2"
<pencere2>
BoxLayout:
Label:
id: lbl
Button:
text:"Geri"
size_hint_y:.2
on_press:root.manager.current=root.manager.previous()
#1 pencerede dosyayı kayıt edip 2 inci pencerede göstericem.Ama kayıt olmuyor.AttributeErorr veriyor
[...]
<pencere1>:
id: siir #burada screenin idini siir yaptım
BoxLayout:
TextInput:
id:txt
multiline:True
BoxLayout:
Button:
text:"Oku"
size_hint_y:.2
on_press:siir.oku(txt)
Button:
text:"Kayıt"
size_hint_y:.2
on_press:siir.kayt(txt) #sen burada app.kayt diyemezsiniz. app.kayt demen için uygulama adlı classın içinde o fonksiyonun olması lazım pencere1 adlı class ın içindeki kayt fonksiyonunu kullanman için siir.kayt demelisin. siir burada pencere1 adlı class ın yerine geçer
#ayrıca ben orada siir.kayt(txt) yaptım. txt orada TextInput classının kendisidir.
Button:
text:"Git"
size_hint_y:.2
on_press:
root.manager.transition.direction="left"
root.manager.transition.duration=.2
root.manager.current="pencere2"
[...]
class pencere1(Screen):
def kayt(self, nesne):
print("burada nesne nedir sorusuna bir cevap",nesne)
f.open("dosyaTR.txt","w")
f.write(nesne.text)
f.write("\n")
f.close()
[...]
Edit: Ayrıca oku fonksiyonu da hata verecektir. sen app.oku dediğinde oku fonksiyonu uygulama adlı class içinde aranacak, bulunamayınca bir attribute error yükseltecektir.
Kolay gelsin
Cihat bu dosya kayıt yapılıyor onu biliyorum ama oku dediğimde pencere 2 de gözükmesini istiyorum.Yani 1 pencerede butona tıklayınca 2 inci pencerede yazıyı okunacak.Yani şöyle deyim hamburger menu gibi…
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager,Screen
Builder.load_string("""
<pencere1>:
BoxLayout:
TextInput:
font_size: sp(25)
id: txt
BoxLayout:
Button:
text: "Oku"
size_hint_y: .2
on_press: root.oku()
Button:
text: "Kayıt"
size_hint_y: .2
on_press: root.kayt()
Button:
text: "Git"
size_hint_y: .2
on_press:
root.manager.transition.direction = "left"
root.manager.transition.duration = .5
root.manager.current = "pencere2"
<pencere2>
BoxLayout:
orientation: "vertical"
Label:
id: lbl
font_size: sp(25)
BoxLayout:
Button:
text: "Göster"
size_hint_y: .2
on_press: root.goster()
Button:
text: "Geri"
size_hint_y: .2
on_press:
root.manager.transition.direction = "right"
root.manager.transition.duration = .5
root.manager.current = "pencere1"
""")
class pencere1(Screen):
def kayt(self):
f = open("dosyaTR.txt","w")
f.write(self.ids.txt.text)
f.write("\n")
f.close()
def oku(self):
f = open("dosyaTR.txt","r")
self.yazi = (f.read())
self.ids.txt.text = "%s" % self.yazi
class pencere2(Screen):
def goster(self):
f = open("dosyaTR.txt","r")
self.yazi = (f.read())
self.ids.lbl.text = self.yazi
sm = ScreenManager()
sm.add_widget(pencere1(name = "pencere1"))
sm.add_widget(pencere2(name = "pencere2"))
class uygulama(App):
def build(self):
return sm
uygulama().run()