from kivy.app import App from kivy.storage.jsonstore import JsonStore from kivy.lang import Builder from kivy.uix.screenmanager import Screen, ScreenManager from kivy.core.window import Window from tinydb import TinyDB, Query, where from kivy.properties import ListProperty Window.clearcolor = (0.02745098, 0.074509804, 0.121568627, 1) Window.size = (2000, 900) db = TinyDB('bcodb.json') class TitleScreen(Screen): pass class MainScreen(Screen): pass class CreateProfile(Screen): def __init__(self, **kwargs): super(CreateProfile, self).__init__(**kwargs) self.store = JsonStore("bcodb.json") def save(self): db.insert({'first': self.first.text, 'middle': self.middle.text, 'last': self.last.text}) def update(self): db.update({'first': self.first.text, 'middle': self.middle.text, 'last': self.last.text}) class LoadProfile(Screen): rows = ListProperty([("First", "Middle", "Last")]) def __init__(self, **kwargs): super(LoadProfile, self).__init__(**kwargs) self.store = JsonStore("bcodb.json") def load(self): if db.search(where('last') == self.last.text): print(self.rows) else: print("not found") def delete(self): db.remove({'first': self.first.text, 'middle': self.middle.text, 'last': self.last.text}) class CreatePacket(Screen): pass class ScreenManagement(ScreenManager): pass presentation = Builder.load_file("customwidget2.kv") class CustomWidgetApp(App): def build(self): return presentation if __name__ == "__main__": CustomWidgetApp().run()
.kv
#: import FadeTransition kivy.uix.screenmanager.FadeTransition #: import hex kivy.utils.get_color_from_hex #: import FocusBehaviors kivy.uix.behaviors.focus ScreenManagement: transition: FadeTransition() TitleScreen: MainScreen: CreateProfile: LoadProfile: CreatePacket: <MainLabel@Label>: font_size:50 bold: True size_hint_x: 1 size_hint_y: 1.85 color: 0.396078431, 0.803921569, 0.807843137, 1 font_name: './pirulen rg.ttf' <SubLabel@Label>: font_size: 35 bold: True halign: "center" size_hint_x: 1 size_hint_y: 1.5 color: 0.396078431, 0.803921569, 0.807843137, 1 font_name: './pirulen rg.ttf' <OtherLabel@Label>: font_size: 12 bold: True color: 0.396078431, 0.803921569, 0.807843137, 1 font_name: './pirulen rg.ttf' text_size: self.size <Button@Button>: font_size: 20 bold: True color: 0.396078431, 0.803921569, 0.807843137, 1 font_name: './pirulen rg.ttf' background_color: 0.02745098, 0.074509804, 0.121568627, .01 canvas.before: Color: rgba: 0.396078431, 0.803921569, 0.807843137, 1 Line: width: 2 rectangle: self.x, self.y, self.width, self.height on_press: self.background_color = (0.396078431, 0.803921569, 0.807843137, 1) on_release: self.background_color = (0.02745098, 0.074509804, 0.121568627, .01) # TODO: Create a focus behavior to "Tab" between widgets <TextInput@TextInput>: font_size: 12 color: 0.396078431, 0.803921569, 0.807843137, 1 font_name: './pirulen rg.ttf' padding_x: 10 padding_y: 10 focus_next: None focus_previous: None unfocus_on_touch: True background_color: 0.02745098, 0.074509804, 0.121568627, .01 canvas.before: Color: rgba: 0.396078431, 0.803921569, 0.807843137, 1 Line: width: 1 rectangle: self.x, self.y, self.width, self.height <TitleScreen>: id: "title" FloatLayout: MainLabel: text: "Easy Button" size_hint_x: 1 size_hint_y: 1.25 SubLabel: text: 'Test' size_hint_x: 1 size_hint_y: 1 Button: text: "Click Here To Continue" on_release: app.root.current = "main_screen" size_hint: (.75, .15) pos_hint: {'x': .12, 'y': .2} <MainScreen>: name: "main_screen" MainLabel: text: "Home Page" FloatLayout: Button: on_release: app.root.current = "create_profile" text: "Create Profile" size_hint: (.5, .15) pos_hint: {'x': .23, 'y': .65} Button: on_release: app.root.current = "load_profile" text: "Load Profile" size_hint: (.5, .15) pos_hint: {'x': .23, 'y': .45} Button: on_release: app.root.current = "create_packet" text: "Create Packet" size_hint: (.5, .15) pos_hint: {'x': .23, 'y': .25} <CreateProfile>: name: "create_profile" first: first middle: middle last: last AnchorLayout: anchor_x: 'center' anchor_y: 'top' MainLabel: text: "Create Profile" size_hint: (1, .15) BoxLayout: size_hint: (.95, .2) pos_hint: {'x': 0, 'y': .85} spacing: 10 padding: 10 halign: "left" OtherLabel: text: "First" OtherLabel: text: "Middle" OtherLabel: text: "Last" BoxLayout: size_hint: (.95, .07) pos_hint: {'x': 0, 'y': .8} spacing: 20 padding: 10 halign: "right" text_size: self.size TextInput: id: first TextInput: id: middle TextInput: id: last BoxLayout: Button: on_release: app.root.current = "main_screen" text: "back Home" size_hint: (.5, .15) Button: on_release: root.save() text: "Save Profile" size_hint: (.5, .15) <LoadProfile>: name: "load_profile" first: first middle: middle last: last AnchorLayout: anchor_x: 'center' anchor_y: 'top' MainLabel: text: "Load Profile" size_hint: (1, .15) BoxLayout: size_hint: (.95, .2) pos_hint: {'x': 0, 'y': .85} spacing: 10 padding: 10 halign: "left" OtherLabel: text: "First" OtherLabel: text: "Middle" OtherLabel: text: "Last" BoxLayout: size_hint: (.95, .07) pos_hint: {'x': 0, 'y': .8} spacing: 20 padding: 10 halign: "right" text_size: self.size TextInput: id: first TextInput: id: middle TextInput: id: last BoxLayout: size_hint: (.95, .2) pos_hint: {'x': .4, 'y': .75} spacing: 10 padding: 10 halign: "left" GridLayout: cols: 3 size_hint_x: None pos_hint_y: .75 OtherLabel: text: "Created Profiles" BoxLayout: Button: on_release: app.root.current = "main_screen" text: "back Home" size_hint: (.5, .15) Button: on_release: root.load() text: "Load Profile" size_hint: (.5, .15) <CreatePacket>: name: "create_packet" MainLabel: text: "Select Packet" FloatLayout: Button: on_release: app.root.current = "main_screen" text: "back Home" size_hint: (1, .15)