Aplikasi kasir

Run Settings
LanguagePython
Language Version
Run Command
import tkinter as tk from tkinter import ttk, messagebox from PIL import Image, ImageTk import sqlite3 from datetime import datetime # Fungsi untuk mengecek login def check_login(): username = entry_username.get() password = entry_password.get() if username == "admin" and password == "1234": login_window.destroy() main_application() else: messagebox.showerror("Login Error", "Username atau Password salah!") # Fungsi untuk aplikasi utama def main_application(): # Koneksi ke database conn = sqlite3.connect("barang.db") cursor = conn.cursor() # Membuat tabel barang jika belum ada cursor.execute('''CREATE TABLE IF NOT EXISTS barang ( id INTEGER PRIMARY KEY, nama TEXT NOT NULL, harga INTEGER NOT NULL)''') conn.commit() # Window Utama Aplikasi Kasir window = tk.Tk() # Membuat window utama aplikasi window.title("Aplikasi Kasir Sederhana") # Set judul aplikasi window.geometry("800x600") # Set ukuran window window.config(bg="white") # Set warna latar belakang aplikasi menjadi putih # Menambahkan Gambar Background dengan Pillow try: img = Image.open("kasir.jpg") # Coba membuka gambar dari file kasir.jpg bg_image = ImageTk.PhotoImage(img) # Mengkonversi gambar menjadi format yang bisa digunakan di Tkinter bg_label = tk.Label(window, image=bg_image) # Membuat label untuk menampilkan gambar bg_label.place(relwidth=1, relheight=1) # Menempatkan gambar di seluruh ukuran window bg_label.image = bg_image # Simpan referensi gambar agar tidak hilang except Exception as e: messagebox.showerror("Error", f"Gagal memuat gambar: {e}") # Menampilkan pesan error jika gambar gagal dimuat return # Frame Input Barang frame_input = tk.Frame(window, pady=10, bg="#D3D3D3") # Membuat frame untuk input barang frame_input.pack(fill="x") # Memasukkan frame ke window dan membuatnya memenuhi lebar window # Label untuk Nama Toko dengan Teks Berjalan def update_label(): current_text = label_toko.cget("text") # Ambil teks saat ini label_toko.config(text=current_text[1:] + current_text[0]) # Geser teks ke kiri window.after(200, update_label) # Perbarui label setiap 200ms label_toko = tk.Label(window, text="Markus Paru", font=("Arial", 18, "bold"), bg="black", fg="white") label_toko.pack(side="top", fill="x") # Menampilkan label di atas window untuk teks berjalan update_label() # Mulai animasi teks berjalan # Menampilkan Hari, Tanggal dan Jam def update_time(): current_time = datetime.now().strftime("%A, %d %B %Y - %H:%M:%S") label_time.config(text=current_time) window.after(1000, update_time) label_time = tk.Label(window, font=("Arial", 14), bg="black", fg="white") label_time.pack(side="bottom", fill="x") update_time() # Label dan Entry untuk Nama Barang tk.Label(frame_input, text="Nama Barang:", bg="#D3D3D3").grid(row=0, column=0, padx=5, pady=5) entry_nama = tk.Entry(frame_input) # Membuat entry untuk nama barang entry_nama.grid(row=0, column=1, padx=5, pady=5) # Label dan Entry untuk Jumlah Barang tk.Label(frame_input, text="Jumlah:", bg="#D3D3D3").grid(row=1, column=0, padx=5, pady=5) entry_jumlah = tk.Entry(frame_input) # Membuat entry untuk jumlah barang entry_jumlah.grid(row=1, column=1, padx=5, pady=5) # Label dan Entry untuk Harga Barang tk.Label(frame_input, text="Harga Satuan:", bg="#D3D3D3").grid(row=2, column=0, padx=5, pady=5) entry_harga = tk.Entry(frame_input) # Membuat entry untuk harga satuan barang entry_harga.grid(row=2, column=1, padx=5, pady=5) # Fungsi Tambah Barang def tambah_barang(): nama = entry_nama.get() jumlah = entry_jumlah.get() harga = entry_harga.get() if nama and jumlah.isdigit() and harga.isdigit(): jumlah = int(jumlah) harga = int(harga) total = jumlah * harga tree.insert("", "end", values=(nama, jumlah, harga, total)) entry_nama.delete(0, tk.END) entry_jumlah.delete(0, tk.END) entry_harga.delete(0, tk.END) update_total() cursor.execute("INSERT INTO barang (nama, harga) VALUES (?, ?)", (nama, harga)) conn.commit() else: messagebox.showerror("Input Error", "Pastikan semua kolom diisi dengan benar!") # Fungsi Hapus Barang def hapus_barang(): selected_item = tree.selection() # Mengambil item yang dipilih dari tabel if selected_item: tree.delete(selected_item) # Menghapus item yang dipilih update_total() # Update total harga setelah penghapusan else: messagebox.showerror("Delete Error", "Pilih barang yang ingin dihapus!") # Pesan error jika tidak ada yang dipilih # Fungsi Cek Harga Barang def cek_harga(): nama = entry_nama.get() # Ambil nama barang dari entry if nama: cursor.execute("SELECT harga FROM barang WHERE nama=?", (nama,)) # Cari harga berdasarkan nama barang result = cursor.fetchone() # Ambil hasil pencarian pertama if result: harga = result[0] # Ambil harga barang messagebox.showinfo("Harga Barang", f"Harga {nama}: Rp {harga:,}") # Tampilkan harga barang else: messagebox.showerror("Error", "Barang tidak ditemukan!") # Pesan error jika barang tidak ditemukan else: messagebox.showerror("Input Error", "Masukkan nama barang untuk cek harga!") # Fungsi Edit Barang def edit_barang(): selected_item = tree.selection() # Mengambil item yang dipilih if selected_item: values = tree.item(selected_item, "values") # Mengambil nilai dari item yang dipilih entry_nama.delete(0, tk.END) # Menghapus nilai yang ada di entry nama entry_nama.insert(0, values[0]) # Menampilkan nama barang yang dipilih entry_jumlah.delete(0, tk.END) # Menghapus nilai yang ada di entry jumlah entry_jumlah.insert(0, values[1]) # Menampilkan jumlah barang yang dipilih entry_harga.delete(0, tk.END) # Menghapus nilai yang ada di entry harga entry_harga.insert(0, values[2]) # Menampilkan harga barang yang dipilih tree.delete(selected_item) # Menghapus item yang dipilih dari tabel else: messagebox.showerror("Error", "Pilih barang yang ingin diedit!") # Pesan error jika tidak ada yan dipilih # Fungsi Cetak Struk def cetak_struk(): messagebox.showinfo("Cetak Struk", "Struk berhasil dicetak!") # Menampilkan pesan info setelah cetak struk # Fungsi Keluar Aplikasi def keluar_aplikasi(): if messagebox.askyesno("Keluar", "Apakah Anda yakin ingin keluar?"): window.quit() # Tombol untuk menambah barang tk.Button(frame_input, text="Tambah Barang", command=tambah_barang, bg="#4CAF50", fg="white").grid(row=3, column=1, pady=10) # Tombol untuk cek harga barang tk.Button(frame_input, text="Cek Harga", command=cek_harga, bg="#FF5733", fg="white").grid(row=3, column=2, pady=10) # Tombol untuk mengedit barang tk.Button(frame_input, text="Edit Barang", command=edit_barang, bg="#FFC107", fg="white").grid(row=3, column=3, pady=10) # Tombol untuk hapus barang tk.Button(frame_input, text="Hapus Barang", command=hapus_barang, bg="#4CAF50", fg="white").grid(row=3, column=4, pady=10) # Tombol untuk mencetak struk tk.Button(frame_input, text="Cetak Struk", command=cetak_struk, bg="#4CAF50", fg="white").grid(row=3, column=5, pady=10) # Tombol Keluar tk.Button(window, text="Keluar", command=keluar_aplikasi, bg="#FF0000", fg="white").pack(side="bottom", pady=10) # Tabel Barang frame_table = tk.Frame(window) frame_table.pack(fill="both", expand=True) columns = ("Nama Barang", "Jumlah", "Harga Satuan", "Total") tree = ttk.Treeview(frame_table, columns=columns, show="headings", height=10) tree.pack(side="left", fill="both", expand=True) for col in columns: tree.heading(col, text=col) tree.column(col, width=100) scrollbar = ttk.Scrollbar(frame_table, orient="vertical", command=tree.yview) scrollbar.pack(side="right", fill="y") tree.config(yscrollcommand=scrollbar.set) # Fungsi Update Total def update_total(): total_semua = 0 for item in tree.get_children(): total_semua += int(tree.item(item, "values")[3]) label_total.config(text=f"Total: Rp {total_semua:,}") # Label Total frame_total = tk.Frame(window, pady=10, bg="#D3D3D3") frame_total.pack(fill="x") label_total = tk.Label(frame_total, text="Total: Rp 0", font=("Arial", 16), fg="blue", bg="#D3D3D3") label_total.pack(side="left", padx=20) # Menjalankan aplikasi window.mainloop() # Jendela Login login_window = tk.Tk() login_window.title("Login Aplikasi Kasir") login_window.geometry("400x300") tk.Label(login_window, text="Username:").pack(pady=10) entry_username = tk.Entry(login_window) entry_username.pack(pady=5) tk.Label(login_window, text="Password:").pack(pady=10) entry_password = tk.Entry(login_window, show="*") entry_password.pack(pady=5) tk.Button(login_window, text="Login", command=check_login).pack(pady=20) login_window.mainloop()
Editor Settings
Theme
Key bindings
Full width
Lines