Halo, para pejuang bug dan error! 😄
Kali ini kita bakal ngulik gimana caranya bikin halaman profil member di aplikasi Android, tapi bukan pake Java yang bikin kepala ngebul—kita pakai Python + Kivy yang lebih santuy dan ringan.
Di sini, pengguna bisa lihat dan update data mereka sendiri, biar aplikasi kamu makin interaktif dan kelihatan profesional. Gak cuma buat belajar, tapi siapa tahu jadi jalan ninja jadi developer beneran, kan?
Langsung saja.
tambahkan baris kode di main.py yang berada di BlajarKivy - main.py berikut kodenya
from kivymd.app import MDApp
from kivymd.uix.screenmanager import ScreenManager
from kivy.core.text import LabelBase
from kivy.core.window import Window
Window.size = (500, 650)
from screens.screens import *
class WindowManager(ScreenManager):
pass
class LapakNgoding(MDApp):
def build(self):
self.logged_user = None
self.wm = WindowManager()
screens =[
Hallog(name="hallog"),
Daftar(name="daftar"),
Hallogadmin(name="hallogadmin"),
Beranda(name='beranda'),
Profil(name='profil'), #tambahkan ini
]
for screen in screens:
self.wm.add_widget(screen)
return self.wm
def logout(self):
self.wm.current = "hallog"
def profil(self):
self.wm.current = "profil" #tambahkan ini
if __name__ == '__main__':
LabelBase.register(name="Atma", fn_regular="kv/assets/fonts/Atma-Bold.ttf")
LabelBase.register(name="Tagline", fn_regular="kv/assets/fonts/Ubuntu-LI.ttf")
LabelBase.register(name="Line", fn_regular="kv/assets/fonts/Ubuntu-M.ttf")
LapakNgoding().run()
dan jangan lupa tambahkan juga baris kode import di screens.py yang berada di BelajarKivy - screens - screens.py berikut kodenya
from screens.hallog import Hallog
from screens.daftar import Daftar
from screens.daftaradm import DaftarAdm
from screens.beranda import Beranda
from screens.hallogadmin import Hallogadmin
from screens.profil import Profil #tambahkan ini
lalu buat 2 buah file
1. profil.py berada di folder BelajarKivy - screens - profil.py
from kivy.app import App
from kivy.uix.label import Label
from kivy.lang import Builder
from kivymd.uix.dialog import MDDialog
from kivymd.app import MDApp
from kivymd.uix.screen import MDScreen
from kivymd.uix.label import MDLabel
import sqlite3
import bcrypt
import os
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DB_PATH = os.path.join(BASE_DIR, '..', 'LapakNgoding.db')
from screens.screens import *
class Profil(MDScreen):
def __init__(self, **kwargs):
Builder.load_file("kv/profil.kv")
super().__init__(**kwargs)
def on_pre_enter(self):
app = MDApp.get_running_app()
username = app.logged_user or ""
self.ids.welcome_label.text = f"Hi {username}, mohon diperhatikan untuk perubahan data!"
try:
conn = sqlite3.connect(DB_PATH)
c = conn.cursor()
c.execute("SELECT nama, email, nohp, alamat FROM member WHERE username = ?", (username,))
result = c.fetchone()
conn.close()
print("Data dari DB:", result)
if result:
self.ids.nama.text = str(result[0])
self.ids.email.text = str(result[1])
self.ids.nohp.text = str(result[2])
self.ids.alamat.text = str(result[3])
except Exception as e:
print("Error:", e)
def update_profil(self):
nama = self.ids.nama.text.strip()
email = self.ids.email.text.strip()
nohp = self.ids.nohp.text.strip()
alamat = self.ids.alamat.text.strip()
username = MDApp.get_running_app().logged_user
try:
conn = sqlite3.connect(DB_PATH)
c = conn.cursor()
c.execute("""UPDATE member SET nama=?, email=?, nohp=?, alamat=? WHERE username=?""",
(nama, email, nohp, alamat, username))
conn.commit()
conn.close()
self.dialog = MDDialog(text="Data berhasil diperbarui!", radius=[20, 7, 20, 7])
self.dialog.open()
except Exception as e:
print("Error update:", e)
self.dialog = MDDialog(
text="Gagal memperbarui data!",
radius=[20, 7, 20, 7]
)
self.dialog.open()
2. profil.kv berada di folder BelajarKivy - kv - profil.kv
#:kivy 2.1
<profil>:
MDFloatLayout:
md_bg_color: ("#d3ede6")
Image:
source: "kv/assets/foto/lapakngodingtr.png"
size_hint: 0.5, 0.5
pos_hint: {"center_x": 0.70, "center_y": 0.87}
Image:
source: "kv/assets/foto/logoLapakngodin9.png"
size_hint: 0.2, 0.2
pos_hint: {"center_x": 0.13, "center_y": 0.90}
MDLabel:
text: "L a p a k N g o d i n g"
halign: "center"
font_size: "30sp"
font_name: "Atma"
pos_hint: {"center_x": 0.60, "center_y": 0.95}
MDLabel:
text: "Belajar Ngoding dengan Browsing"
halign: "center"
font_size: "16sp"
font_name: "Tagline"
pos_hint: {"center_x": 0.60, "center_y": 0.90}
color: ("#808080")
MDLabel:
id: welcome_label
text: ''
halign: "center"
font_size: "18sp"
font_name: "Tagline"
pos_hint: {"center_x": 0.50, "center_y": 0.80}
color: ("#808080")
MDLabel:
text: "Profil Saya"
font_style: "H5"
halign: "center"
pos_hint: {"center_y": 0.75}
MDTextField:
id: nama
hint_text: "Nama Lengkap"
mode: "rectangle"
icon_left: "account"
size_hint: 0.70, 0.09
pos_hint: {"center_x": 0.5, "center_y": 0.69}
MDTextField:
id: email
hint_text: "Email aktif"
mode: "rectangle"
icon_left: "email-check-outline"
size_hint: 0.70, 0.09
pos_hint: {"center_x": 0.5, "center_y": 0.59}
MDTextField:
id: nohp
hint_text: "No HP"
mode: "rectangle"
icon_left: "cellphone-basic"
size_hint: 0.70, 0.09
pos_hint: {"center_x": 0.5, "center_y": 0.49}
MDTextField:
id: alamat
hint_text: "Alamat"
mode: "rectangle"
icon_left: "city-variant"
size_hint: 0.70, 0.09
pos_hint: {"center_x": 0.5, "center_y": 0.39}
MDTextField:
id: password
password: True
hint_text: "Password"
mode: "rectangle"
icon_left: "key-variant"
size_hint: 0.35, 0.09
pos_hint: {"center_x": 0.32, "center_y": 0.29}
MDRaisedButton:
text: "Simpan"
font_size: "16sp"
font_name: "Atma"
size_hint: 0.30, 0.07
pos_hint: {"center_x": 0.32, "center_y": 0.19}
md_bg_color: ("#23a484")
on_release: root.update_profil()
MDTopAppBar:
md_bg_color: ("#23a484")
use_overflow: True
left_action_items:
[["home", lambda x: app.callback(x), "Home", "Home"]]
right_action_items:
[["logout", lambda x: app.logout(), "Logout", "Logout"]]
selesai lalu jalankan. untuk versi videonya menyusul ya.
Terima kasih
Jakarta, saat BMKG bingung menentukan musim cuaca atau gua yang baru tahu istilah Kemarau Basah.
Komentar
Posting Komentar