Langsung ke konten utama

BELAJAR PYTHON - KIVY : MEMBUAT INPUT DATA BARANG | APLIKASI POS KAFE - WARUNG - RUMAH MAKAN

 

SESI 03 : MEMBUAT FORM INPUT DATA BARANG

Assalamualaikum warahmatullohi wabarohatuh,  salam sukses mari kita lanjutkan coding kita, disesi yang ke 3 (bagian ke tiga) ini kita akan membuat halaman untuk input / entry / menambah data data master barang, rencana tampilan seperti ini. 





Disini kita harus membuat form atau halaman khusus untuk input data barang, adapun item-item yang akan kita masukkan adalan jenis barang meliputi ( 1 - kode untuk jenis makanan atau food, 2 - kode untuk minuman dan 3 - kode untuk snack atau cemilan ), bentuk dasar rancangan akan kita buat seperti ini :


Jadi kita harus membuat file kivy khusus untuk membuat form atau halaman diatas, misalnya kita kasih nama barang_new.kv serta untuk mengontrol form tersebut kita  juga harus membuat class baru difile python main.py yaitu misalnya kita kasih nama class BarangNew(Screen), dengan 2 (dua) buang fungsi atau metod pengontrol simpan dan tampilkan gambar barang :

class BarangNew(Screen):    
    def tampilkan_gambar(self,lokasi):
        self.ids.cetakgambar.source=lokasi

    def simpan(self):
        isidata = []
        isijenis= self.ids.jenis.text.strip()
        isinama = self.ids.nama.text.strip()
        isiharga= self.ids.harga.text.strip()
        isigambar= self.ids.gambar.text.strip()

        isidata.append(isijenis)
        isidata.append(isinama)
        isidata.append(isiharga)
        isidata.append(isigambar)
        isidata.append('kosong')
        daftarbarang.append(isidata)
        self.manager.transition.direction = 'right'
        self.manager.current = 'MenuBarang'

Jangan lupa panggil file kivynya agar bisa dibaca yaitu kita insert/link-kan dalam file python dengan perintah Builder.load_file('barang_new.kv'), serta didalam manajemen layarnya kita tambahi untuk pengontrol class tersebut misalnya sm.add_widget(BarangNew(name='BarangNew') jadi kalau dituliskan manajemen screen langkapnya seperti  ini :

sm = ScreenManager()   
sm.add_widget(MenuUtama(name='MenuUtama'))      
sm.add_widget(MenuBarang(name='MenuBarang'))
sm.add_widget(BarangNew(name='BarangNew'))
return sm

Secara lengkapnya scrip programnya menjadi :

File python : main.py
from kivy.lang import Builder
from kivy.core.window import Window
from kivy.uix.screenmanager import ScreenManager,Screen
from kivy.properties import StringProperty

from kivymd.app import MDApp
from kivymd.uix.floatlayout import MDFloatLayout

Window.size = (400,600)

Builder.load_file('menu.kv')
Builder.load_file('barang.kv')
Builder.load_file('barang_item.kv')
Builder.load_file('barang_new.kv')

#            jenis nama item     harga   lokasi gambar      status
daftarbarang=[['1','Food No. 01','25000','image/food01.png','Kososng'],
              ['1','Food No. 02','25000','image/food02.png','Kososng'],
              ['1','Food No. 03','20000','image/food03.png','Kososng'],
              ['2','Drink No. 01','7000','image/drink01.png','Kososng'],
              ['3','Snack No. 01','15000','image/snack01.png','Kososng'],
            ]

class MenuUtama(Screen):
    def buka_menubarang(self):
        self.manager.transition.direction = 'left'
        self.manager.current = 'MenuBarang'

class BarangItem(MDFloatLayout):
    jenis = StringProperty ("Item Food")
    nama = StringProperty ("Food No: 01")
    harga = StringProperty ('10000')
    gambar = StringProperty ("image/food01.png")

class BarangNew(Screen):
    def tampilkan_gambar(self,lokasi):
        self.ids.cetakgambar.source=lokasi

    def simpan(self):
        isidata = []
        isijenis= self.ids.jenis.text.strip()
        isinama = self.ids.nama.text.strip()
        isiharga= self.ids.harga.text.strip()
        isigambar= self.ids.gambar.text.strip()

        isidata.append(isijenis)
        isidata.append(isinama)
        isidata.append(isiharga)
        isidata.append(isigambar)
        isidata.append('kosong')
        daftarbarang.append(isidata)
        self.manager.transition.direction = 'right'
        self.manager.current = 'MenuBarang'

class MenuBarang(Screen):
    def on_pre_enter(self):
        self.ids.gridbarang.clear_widgets()
        self.tampil_barang()
       
    def tampil_barang(self):
        jmldata=len(daftarbarang)
        for i in range(jmldata):
            item=BarangItem()
            if daftarbarang[i][0]=='1': item.jenis='Item Food'
            if daftarbarang[i][0]=='2': item.jenis='Item Drink'
            if daftarbarang[i][0]=='3': item.jenis='Item Snack'
            item.nama=daftarbarang[i][1]
            item.harga=daftarbarang[i][2]
            item.gambar=daftarbarang[i][3]
            self.ids.gridbarang.add_widget(item)
        return self

class MyResto(MDApp):
    def build(self):
        sm = ScreenManager()
        sm.add_widget(MenuUtama(name='MenuUtama'))
        sm.add_widget(MenuBarang(name='MenuBarang'))
        sm.add_widget(BarangNew(name='BarangNew'))
        return sm
       
   
MyResto().run()

file kivy : barang_new.kv
<BarangNew>:
    MDBoxLayout:
        size_hint: 1,.1
        pos_hint: {'x':0,'y':.9}
        md_bg_color: rgba(0, 0, 255, 255)
        MDLabel:
            text: 'ENTRY ITEM BARANG'
            color: rgba(255, 255, 255, 255)
            halign: "center"
            font_size: '30dp'
            bold: True
   
    MDFloatLayout:
        size_hint: 1,.8
        pos_hint: {'x':0,'y':.1}
        md_bg_color: rgba(255, 255, 255, 255)

        MDLabel:
            text: 'Jenis Item'
            text_color: 0, 0, 0, 1
            size_hint: .3, .1
            pos_hint: {"x":.1, "y": .8}
        MDTextField:
            id:jenis
            size_hint_x: .1
            pos_hint: {"x":.4, "y": .8}

        MDLabel:
            text: 'Nama Item'
            text_color: 0, 0, 0, 1
            size_hint: .3, .1
            pos_hint: {"x":.1, "y": .7}
        MDTextField:
            id:nama
            size_hint_x: .5
            pos_hint: {"x":.4, "y": .7}

        MDLabel:
            text: 'Harga Item'
            text_color: 0, 0, 0, 1
            size_hint: .3, .1
            pos_hint: {"x":.1, "y": .6}
        MDTextField:
            id:harga
            size_hint_x: .5
            pos_hint: {"x":.4, "y": .6}

        MDLabel:
            text: 'Alamat Gambar'
            text_color: 0, 0, 0, 1
            size_hint: .3, .1
            pos_hint: {"x":.1, "y": .5}
        MDTextField:
            id:gambar
            size_hint_x: .5
            pos_hint: {"x":.4, "y": .5}
            on_text: root.tampilkan_gambar(self.text)

        MDBoxLayout:
            size_hint: .4,.3
            line_color: rgba(0, 0, 0, 255)
            pos_hint: {'center_x':.5,'y':.1}
            FitImage:
                id:cetakgambar
                source: ''


    MDBoxLayout:
        size_hint: 1,.1
        pos_hint: {'x':0,'y':0}
        md_bg_color: rgba(0, 255, 0, 255)
        orientation: 'horizontal'

        MDRectangleFlatButton:
            text: "Batal"
            text_color: rgba(0, 0, 255, 255)
            line_color: rgba(0, 0, 255, 255)
            md_bg_color: rgba(255, 255, 0, 255)
            size_hint_x: .5
            pos_hint: {"center_x": .5, "center_y": .5}
            on_release:
                root.manager.transition.direction = 'right'
                root.manager.current = 'MenuBarang'

        MDRectangleFlatButton:
            text: "Simpan"
            text_color: rgba(0, 0, 255, 255)
            line_color: rgba(0, 0, 255, 255)
            md_bg_color: rgba(255, 255, 0, 255)
            size_hint_x: .5
            pos_hint: {"center_x": .5, "center_y": .5}
            on_release: root.simpan()

file kivy : barang.kv
difile kivy menu master barang ini yang diubah/ditambahi perintah adalah diobject icon button yang tombol plus agar bisa link dengan file kivy barang_new.kv, jadi file menu master barang menjadi :
<MenuBarang>:
    MDBoxLayout:
        size_hint: 1,.1
        pos_hint: {'x':0,'y':.9}
        md_bg_color: rgba(250, 250, 0, 150)
        MDLabel:
            text: 'DAFTAR ITEM'
            halign: "center"
            color: rgba(0, 0, 255, 255)
            font_size: '30dp'
   
    MDBoxLayout:
        size_hint: 1,.9
        pos_hint: {'x':0,'y':0}
        ScrollView:
            id: layarbarang
            size_hint_x: self.size_hint_x
            size_hint_y: self.size_hint_y
            do_scroll_x: False

            MDGridLayout:
                id: gridbarang
                cols: 2
                row_default_height: 200
                row_force_default: True
                adaptive_height: True
                padding: dp(30), dp(30)
                spacing: dp(30)
   
    MDIconButton:
        icon: "plus"
        md_bg_color: rgba(0, 0, 250, 255)
        pos_hint: {'x':.85,'y':.03}
        on_release:
            root.manager.transition.direction = 'left'
            root.manager.current = 'BarangNew'

    MDIconButton:
        icon: "select-group"
        md_bg_color: rgba(0, 0, 250, 255)
        pos_hint: {'x':.03,'y':.03}
        on_release:
            root.manager.transition.direction = 'left'
            root.manager.current = 'MenuUtama'

Demikian sesi ketigaini yang kita buat dengan harapan agar mudah dipahami, untuk lebih detailnya bisa lihat tutorial videonya, karena kita masih sama2 masih belajar kalau ada kesalahan saya mohon maaf dan semoga bermanfaat. 



Komentar

...