Langsung ke konten utama

Membuat Aplikasi Android dengan Python dan Kivy | Upload dan Ubah Foto di Halaman Profil

 Hai Sobat Ngoding gimana kabarnya? kalau kamu menemukan blog ini berarti tujuan kita sama yaitu Belajar Ngoding dengan Browsing. saya mo lanjutin yang kemarin ya sob yang baru mampir silahkan cek Membuat Aplikasi Android dengan Python dan Kivy | Halaman Profil Member untuk Update Data dan Membuat Aplikasi Android dengan Python dan Kivy | Tutorial Ganti Password .  Sekarang kita bahas lanjutannya yaitu Membuat Aplikasi Android dengan Python dan Kivy | Upload dan Ubah Foto di Halaman Profil dicatatan kali ini saya ga nambah file, cuma menambah fungsi di profil.py, daftar.py, profil.kv serta menambahkan kolom foto di tabel database SQLite. di file profil.py saya menambahkan fungsi untuk menampilkan foto profil, fungsi ubah dan upload foto ke folder yang sudah ditentukan, lalu merubah nama foto berdasarkan username. Berikut susuna kodenya profil.py from kivy.app import App from kivy.uix.label import Label from kivy.lang import Builder from kivymd.uix.dialog import MDDialog fro...

Membuat Aplikasi Android dengan Python dan Kivy | Tutorial Ganti Password

 Halo Sobat Ngoding!

Selamat datang kembali di blog Catatan Mantan IT. Semoga apa yang saya catat di blog ini dapat membantu kalian dalam mempelajari bahasa pemrograman Python dan UI Kivy.

Catatan sebelumnya saya sudah mencatat tentang Tutorial Membuat Halaman Profil Member untuk update data. Nah, sekarang kelanjutannya Tutorial Ganti Password

Proses pembuatan Ganti Password di Python dan Kivy ada yang perlu ditambahkan di file main.py, screens.py, profil.py dan profil.kv. lalu buat 2 file, gantipassword.py dan gantipassword.kv

oke saya mulai dari main.py saya menambahkan baris kode python di window manager "Gantipassword(name='gantipassword')," dan " fungsi def gantipass(self): self.wm.current = "gantipassword" " berikut susunan kodenya

main.py

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'),
            Gantipassword(name='gantipassword'), #ini yang ditambahkan
        ]
        for screen in screens:
            self.wm.add_widget(screen)
        return self.wm
        
    def callback(self, instance):
        self.root.current = 'beranda'
    
    def logout(self):
        self.wm.current = "hallog"
        
    def profil(self):
        self.wm.current = "profil"
        
    #ini yang ditambahkan
    def gantipassword(self):
        self.wm.current = "gantipassword"

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()

setelah selesai main.py sekarang kita beralih ke screens.py di sini sama saya menambahkan kode python hanya sebaris saja "from screens.gantipassword import Gantipassword"  berikut susunan kode python -nya

screens.py

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
from screens.gantipassword import Gantipassword #ini yang di tambahkan

dari screens.py sekarang kita menuju profil.py perlakuannya pun sama, saya hanya menambahkan kode python sebagai fungsi perpindahan layar atau halaman dari profil ke ganti password  " def gantipassword(self): self.manager.current = 'gantipassword' " berikut susunan kode python -nya

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()
            
    #ini yang ditambahkan
    def gantipassword(self):
        self.manager.current = 'gantipassword'

terakhir yang perlu di tambahkan atau di edit profil.kv, ini adalah kode kivy sebagai desain UI -nya. ya.. kalau di HTML sama dengan CSS lah. di file ini saya menambahkan button yang jika di klik akan menuju ke screen atau halaman ganti password berikut susunan kode kivy -nya 

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}

        MDRaisedButton:
            text: "Simpan"
            font_size: "16sp"
            font_name: "Atma"
            size_hint: 0.30, 0.07
            pos_hint: {"center_x": 0.32, "center_y": 0.29}
            md_bg_color: ("#23a484")
            on_release: root.update_profil()
        
        #ini yang ditambahkan
        MDRaisedButton:
            text: "Ganti Password"
            font_size: "16sp"
            font_name: "Atma"
            size_hint: 0.30, 0.07
            pos_hint: {"center_x": 0.68, "center_y": 0.29}
            md_bg_color: ("#23a484")
            on_release: root.gantipassword()

        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"]]

setelah menabahkan baris kode pada 4 file di atas. sekarang kita buat 2 file python dan kivy berikut susunan kode python dan kivy -nya

1. gantipassword.py (BelajarKivy-screens-gantipassword.py)

from kivymd.uix.screen import MDScreen
from kivymd.uix.dialog import MDDialog
from kivymd.app import MDApp
from kivy.lang import Builder
import sqlite3, bcrypt, os

BASE_DIR = os.path.dirname(os.path.abspath(__file__))
DB_PATH = os.path.join(BASE_DIR, '..', 'LapakNgoding.db')

class Gantipassword(MDScreen):
    show_password = False

    def __init__(self, **kwargs):
        Builder.load_file("kv/gantipassword.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 Password!"

    def toggle_password_visibility(self, state):
        self.show_password = state
        # Trigger update
        self.ids.old_password.password = not self.show_password
        self.ids.new_password.password = not self.show_password
        self.ids.confirm_password.password = not self.show_password

    def change_password(self):
        username = MDApp.get_running_app().logged_user
        old_pw = self.ids.old_password.text.strip()
        new_pw = self.ids.new_password.text.strip()
        confirm_pw = self.ids.confirm_password.text.strip()

        if not old_pw or not new_pw or not confirm_pw:
            self.show_dialog("Semua kolom harus diisi!")
            return

        if new_pw != confirm_pw:
            self.show_dialog("Password baru tidak cocok!")
            return

        if len(new_pw) < 8:
            self.show_dialog("Password baru minimal 8 karakter!")
            return

        try:
            conn = sqlite3.connect(DB_PATH)
            c = conn.cursor()
            c.execute("SELECT password FROM member WHERE username = ?", (username,))
            result = c.fetchone()

            if result and bcrypt.checkpw(old_pw.encode(), result[0]):
                new_hashed = bcrypt.hashpw(new_pw.encode(), bcrypt.gensalt())
                c.execute("UPDATE member SET password = ? WHERE username = ?", (new_hashed, username))
                conn.commit()
                self.show_dialog("Password berhasil diubah.")
            else:
                self.show_dialog("Password lama salah.")
        except Exception as e:
            print("Error:", e)
            self.show_dialog("Terjadi kesalahan.")
        finally:
            conn.close()

    def show_dialog(self, message):
        dialog = MDDialog(text=message, radius=[20, 7, 20, 7])
        dialog.open()

2. gantipassword.kv (BelajarKivy-kv-gantipassword.kv) 

#:kivy 2.1

<Gantipassword>:

    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: "Ganti Password"
            font_style: "H5"
            halign: "center"
            pos_hint: {"center_y": 0.75}

        MDTextField:
            id: old_password
            hint_text: "Password Lama"
            password: not root.show_password
            mode: "rectangle"
            icon_left: "lock"
            size_hint: 0.70, 0.09
            pos_hint: {"center_x": 0.5, "center_y": 0.69}

        MDTextField:
            id: new_password
            hint_text: "Password Baru"
            password: not root.show_password
            mode: "rectangle"
            icon_left: "lock"
            size_hint: 0.70, 0.09
            pos_hint: {"center_x": 0.5, "center_y": 0.59}

        MDTextField:
            id: confirm_password
            hint_text: "Konfirmasi Password Baru"
            password: not root.show_password
            mode: "rectangle"
            icon_left: "lock-check"
            size_hint: 0.70, 0.09
            pos_hint: {"center_x": 0.5, "center_y": 0.49}

        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.change_password()

        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, semoga bermanfaat.

jangan berhenti mencoba. Setiap kesalahan atau kegagalan adalah anak tangga menuju sukses yang kita pijak.

Jakarta, selagi jaga anak, karena istri lagi hiling ke bandung. sampai ketemu lagi di tutorial berikutnya. dan jangan lupa kunjungi juga channelnya lapakngoding.

 

Komentar

Postingan populer dari blog ini

Membuat Aplikasi Android dengan Python dan Kivy untuk Halaman Login Administrator

Melanjutkan dari Catatan yang kemrin yaitu Membuat Aplikasi Android SistemEnkripsi dan Deskripsi Password Bcrypt untuk Autentikasi Login denganPython dan Kivy . Buat yang baru mampir silahkan baca catatan sebelumnya agar dapat mengerti alurnya catatan kali ini. Sekarang saya ingin mencatat Membuat Aplikasi Android dengan Python dan Kivy untuk Halaman Login Administrator. langkah awal, di file main.py yang berada di folder Aplikasi Python - main.py tambahkan kode pada class LapakNgoding untuk memanggil atau menjalankan file hallogadmin.py baris kodenya ada di baris ke 19 perhatikan baris kode di bawah ini. lanjut kita buat file python dengan nama hallogadmin.py yang berada di folder Aplikasi Python - screens - hallogadmin.py berikut susunan kodenya. lalu untuk meload class Hallogadmin yang berada di dalam file hallogadmin.py kita perlu menambahkan kode di file screens.py yang berada di folder Aplikasi Python - screens - screens.py tambahakan dengan kode from screens . hallogadmin ...

Membuat Aplikasi Android Sistem Enkripsi dan Deskripsi Password Bcrypt untuk Autentikasi Login dengan Python dan Kivy

  Hai Koder, jangan lupa baca catatan sebelumnya ya untuk mengerti alur catatan Membuat Aplikasi Android Sistem Enkripsi dan Deskripsi Password Bcrypt untuk Autentikasi Login dengan Python dan Kivy. Silahkan koder baca disini . oke kita mulai Membuat Aplikasi Android Sistem Enkripsi dan Deskripsi Password Bcrypt untuk Autentikasi Login dengan Python dan Kivy Skema filenya sebagai berikut buka file hallog.kv yang berada di Aplikasi Python - kv - hallog.kv lalu pada bagian button login di tambahkan kode on_press : root.loginAcc pada bagian akhir MDRiseButton . berikut full kode hallog.kv. Jangan lupa id pada textfieldnya di bagian MDTextField id : username dan id : password . hallog.kv #:kivy 2.1 <Hallog>: MDFloatLayout: md_bg_color: ( "#d3ede6" ) Image: source: "kv/assets/foto/lapakngodingtr.png" size_hint: . 5 , . 5 pos_hint: { "center_x" : 0 . 5 , "center_y" : 0 . 70 } Image: source:...

Cara Membuat Aplikasi Android Form Pendaftaran dengan Python dan Kivy dengan Parameter Input if elif else

begini koder, kemarin kan saya sudah mencatat Cara Membuat Form pendaftaran dengan Python dan GUI dengan KivyMD lalu di input ke database sqlite. Nah sekarang ini kelanjutanya dengan menambahkan form input username dan parameter pada username dan penambahan form input konfirmasi password. buat yang baru baca catatan ini lebih baik ikuti dahulu di catatan sebelumnya. agar dapat memahami alur dan susunan foldernya di kategori Membuat Aplikasi Android . Jadi, logikanya sebagai berikut : 1. Jika password yang di input kurang dari delapan karakter maka akan di tolak, lalu muncul notif "Password terlalu pendek mimal 8 karakter". beikut tampilannya 2. Jika username kurang dari 3 karakter, maka akan ditolak dan muncul notif Usename Minimal 3 karakter. berikut tampilanya 3. Jika Username sudah terdaftar di database maka akan di tolak, dan muncul notif "Username sudah terdaftar". berikut tampilannya 4. Jika pendaftaran berhasil maka akan muncul notif "Selamat kamu telah ...