MENEMUKAN MODUL ANTAR FILE, SENDIRI BUAT TABEL DI DATABASE
Tolong perbaiki kode isi file: CRUD_Gn_Biru.py berikut ini:
import tkinter sebagai tk dari tkinter import ttk import sqlite3Inisialisasi jendela utamaroot = tk.Tk() root.geometry("690x1390") root.title("Arah Arus Musik Gn_Biru")main_frame = tk.Frame(root) main_frame.pack(isi =tk.BOTH, perluas=1)canvas = tk.Canvas(main_frame) canvas.pack(sisi=tk.KIRI, isi=tk.BOTH, perluas=1)scrollbar_y = ttk.Scrollbar(main_frame, orientasi=tk.VERTIKAL , perintah=canvas.yview) scrollbar_y.pack(sisi=tk.KANAN, isi=tk.Y)scrollbar_x = ttk.Scrollbar(root, orientasi=tk.HORIZONTAL, perintah=canvas.xview) scrollbar_x.pack(sisi=tk.BOTTOM, isi=tk.X)canvas.konfigurasi(yscrollcommand=scrollbar_y.set, xscrollcommand=scrollbar_x.set) canvas.bind('', lambda e: canvas.konfigurasi(scrollregion=canvas. bbox("semua")))bingkai_konten = tk.Bingkai(kanvas) kanvas.buat_jendela((0, 0), jendela=bingkai_konten, jangkar="baru")bingkai_data = tk.Bingkai(bingkai_konten) bingkai_data.kotak(baris= 0, kolom=0, padx=10, pady=10)def create_database(): conn = sqlite3.connect("DATAMUSIK.db") c = conn.cursor() c.execute('''BUAT TABEL JIKA TIDAK ADA Gn_Biru (ID INTEGER PRIMER KEY, Level NYATA, Bass_1 NYATA, Trebel_1 NYATA, Bass_2 NYATA, Trebel_2 NYATA, Bass_3 NYATA, )''') conn.commit() conn.close() Fungsi CRUD untuk Gn_Birudef create_gn_biru_record(): conn = sqlite3.connect(' DATAMUSIK.db') c = conn.cursor() coba: c.execute("MASUKKAN KE Gn_Biru (ID, Level, Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3) NILAI (?, ?, ?, ?, ?, ? , ?)", (ID_entry.get(), Level_entry.get(), Bass_1_entry.get(), Trebel_1_entry.get(), Bass_2_entry.get(), Trebel_2_entry.get(), Bass_3_entry.get())) conn.commit() kecuali Pengecualian sebagai e: print(f"Kesalahan memasukkan rekaman: {e}") conn.close() clear_entries_gn_biru() read_gn_biru_records()def read_gn_biru_records(): conn = sqlite3.connect('DATAMUSIK.db' ) c = conn.cursor() coba: c.execute("SELECT * FROM Gn_Biru") Records = c.fetchall() kecuali Pengecualian sebagai e: print(f"Kesalahan membaca rekaman: {e}") Records = [] conn.close()untuk widget di data_frame_gn_biru.winfo_children():
widget.hancurkan()
# Menampilkan data
untuk indeks, rekam dalam enumerate(records):
untuk col, nilai dalam enumerate(record):
tk.Label(data_frame_gn_biru, teks=nilai, bg="#e0e0e0").grid(baris=indeks+1, kolom=kolom, padx=5, pady=5)
# Menampilkan header kolom
kolom = ["ID", "Level", "Bass_1", "Trebel_1", "Bass_2", "Trebel_2", "Bass_3"]
untuk col_index, col_name di enumerate(kolom):
tk.Label(data_frame_gn_biru, text=col_name, font=('bold')).grid(row=7, column=col_index, padx=5, pady=5)def update_gn_biru_record(): conn = sqlite3.connect('DATAMUSIK.db') c = conn.cursor() try: c.execute("PERBARUI Gn_Biru SET Level = ?, Bass_1= ?, Trebel_1 = ?, Bass_2 = ?, Trebel_2 = ?, Bass_3 = ? WHERE ID = ?", (Level_entry.get(), Bass_1_entry.get(), Trebel_1_entry.get(), Bass_2_entry.get(), Trebel_2_entry.get(), Bass_3_entry.get(), ID_entry.get())) conn.commit() kecuali pengecualian sebagai berikut: print(f"Kesalahan saat memperbarui rekaman: {e}") conn.close() clear_entries_gn_biru() read_gn_biru_records()def delete_gn_biru_record(): conn = sqlite3.connect('DATAMUSIK.db') c = conn.cursor() try: c.execute("HAPUS DARI Gn_Biru DI MANA ID = ?", (ID_entry.get(),)) conn.commit() kecuali Pengecualian sebagai e: print(f"Kesalahan saat menghapus rekaman: {e}") conn.close() clear_entries_gn_biru() read_gn_biru_records()def clear_entries_gn_biru(): ID_entry.delete(0, tk.END) Level_entry.delete(0, tk.END) Bass_1_entry.delete(0, tk.END) Trebel_1_entry.delete(0, tk.END) Bass_2_entry.delete(0, tk.END) Trebel_2_entry.delete(0, tk.END) Bass_3_entry.delete(0, tk.END)Fungsi setup_default_modedef setup_default_mode(mode): if mode == 1: read_gn_biru_records()Entri untuk Gn_Biru.Label(data_frame, text="ID \n Gn_Biru").grid(baris=0, kolom=0, padx=5, pady=5) ID_1_entry = tk.Entry(data_frame, lebar=4) ID_1_entry.grid(baris=1, kolom=0, padx=5, pady=5) ID_2_entry = tk.Entry(data_frame, lebar=4) ID_2_entry.grid(baris=2, kolom=0, padx=5, pady=5) ID_3_entry = tk.Entri(bingkai_data, lebar=4) ID_3_entri.grid(baris=3, kolom=0, padx=5, pady=5)tk.Label(bingkai_data, teks="Level").grid(baris=0, kolom=1, padx=5, pady=5) Entri_Level_1 = tk.Entri(bingkai_data, lebar=6) Entri_Level_1.grid(bar is=1, kolom=1, padx=5, pady=5) Entri_Level_2 = tk.Entri(bingkai_data, lebar=6) Entri_Level_2.grid(baris=2, kolom=1, padx=5, pady=5) Entri_Level_3 = tk.Entri(bingkai_data, lebar=6) Entri_Level_3.grid(baris=3, kolom=1, padx=5, pady=5) tk.Label(bingkai_data, teks="Bass_1").grid(baris=0, kolom=2, padx=5, pady=5) Bass_1_1_entry = tk.Entri(bingkai_data) Bass_1_1_entry.grid(baris=1, kolom=2, padx=5, pady=5) Bass_1_2_entry = tk.Entri(bingkai_data) entry.grid(baris=2, kolom=2, padx=5, pady=5) Bass_1_3_entry = tk.Entri(bingkai_data) Bass_1_3_entry.grid(baris=3, kolom=2, padx=5, pady=5)tk.Label(bingkai_data, teks="Trebel_1").grid(baris=0, kolom=3, padx=5, pady=5) Trebel_1_1_entry = tk.Entri(bingkai_data) Trebel_1_1_entry.grid(baris=1, kolom=3, padx=5, pady=5) Trebel_1_2_entry = tk.Entri(bingkai_data) Trebel_1_2_entry.grid(baris=2, kolom=3, padx=5, pady=5) Trebel_1_3_entry = tk.Entri( bingkai_data) Trebel_1_3_entry.grid(baris=3, kolom=3, padx=5, pady=5)tk.Label(bingkai_data, teks="Bass_2").grid(baris=0, kolom=4, padx=5, pady=5) Bass_2_1_entry = tk.Entri(bingkai_data) Bass_2_1_entry.grid(baris=1, kolom=4, padx=5, pady=5) Bass_2_2_entry = tk.Entri(bingkai_data) Bass_2_2_entri.grid(baris=2, kolom=4, padx=5, pady=5) Bass_2_3_entry = tk. Entri(bingkai_data) Bass_2_3_entry.grid(baris=3, kolom=4, padx=5, pady=5)tk.Label(bingkai_data, teks="Trebel_2").grid(baris=0, kolom=5, padx=5 , pady=5) Trebel_2_1_entry = tk.Entri(bingkai_data) Trebel_2_1_entry.grid(baris=1, kolom=5, padx=5, pady=5) Trebel_2_2_entry = tk.Entri(bingkai_data) Trebel_2_2_entry.grid(baris=2, kolom=5, padx=5, pady=5) Trebel_2_3_entry = tk.Entri(bingkai_data) Trebel_2_3_entry.grid(baris=3, kolom=5, padx=5, pady=5)tk. Label(bingkai_data, teks="Bass_3").grid(baris=0, kolom=6, padx=5, pady=5) Bass_3_1_entry = tk.Entri(bingkai_data) Bass_3_1_entry.grid(baris=1, kolom=6, padx =5, pady=5) Bass_3_2_entry = tk.Entri(bingkai_data) Bass_3_2_entry.grid(baris=2, kolom=6, padx=5, pady=5) Bass_3_3_entry = tk.Entri(bingkai_data) Bass_3_3_entry.grid(baris=3, kolom=6, padx=5, pady=5)pemisah = ttk.Pemisah(bingkai_data, orient='horizontal') separator.grid(baris=4, kolom= 0, sticky="ew", pady=15)Tombol CRUDtk.Button(data_frame, teks="BUAT Gn_Biru", perintah=buat_rekaman_gn_biru, bg="biru", fg="kuning").grid(baris=5, kolom =0, jarak_kolom=4, padx=5, pady=5, ipadx=50) tk.Button(data_frame, teks="BACA Gn_Biru", perintah=baca_rekaman_gn_biru, bg="biru", fg="kuning").grid (baris=6, kolom=0, jarak_kolom=4, padx=5, pady=5, ipadx=50) tk.Button(data_frame, teks="PERBARUI Gn_Biru", perintah=perbarui_rekaman_gn_biru, bg="biru", fg="kuning").grid(baris=7, kolom=0, jarak_kolom= 4, padx=5, pady=5, ipadx=50) tk.Button(data_frame, text="HAPUS Gn_Biru ", command=delete_gn_biru_record, bg="biru", fg="kuning").grid(baris=8, kolom=0, bentang kolom=4, padx=5, pady=5, ipadx=50) tk.Button(data_frame, text="HAPUS Entri ", command=clear_entries_gn_biru, bg="biru muda", fg="kuning"). kisi(baris=9, kolom=0, bentang kolom=4, padx=5, pady=5, ipadx=50)pemisah = ttk.Pemisah(data_frame, orient='horizontal') pemisah.grid(baris=10, kolom=0, sticky="ew", pady=15)data_frame_gn_biru = tk.Frame(content_frame) data_frame_gn_biru. grid(baris=11, Kolom=0, padx=10, pady=10, RentangKolom=4, sticky="w")pemisah = ttk.Pemisah(bingkai_data, orientasi='horizontal') pemisah.grid(baris=12, Kolom=0, sticky="baru", pady=15)tk.Button(data_frame, text="Pilih Warna", command=clear_entries_gn_biru, bg="hijau", fg="putih").grid(row=13, Kolom=0, Rentang kolom=4, padx=5, pady=5, ipadx=50)Menjalankan setup_default_mode(1) saat aplikasi pertama kali berjalansetup_default_mode(1)root.mainloop()Agar agar EntryBox untuk input data ada sebanyak 7 kolom 3 baris, di kolom Level dibaris pertama sudah langsung ke teks "Satu", di baris kedua teks "Dua" ,dan di baris ketiga nya tertera teks "Tiga",jadi pengguna tidak perlu lagi mengimput data di kolom Level.Kemudian tambahkan batas setelah tombol Pilih Nada tempatkan di posisi setelah tampilan data_fame_gn_biru. Tentunya perbaikan ini semua ada kaitannya dengan DATAMUSIK.db pada tabel Gn_Biru. Berikut kode isi file DataMusik.py:
import sqlite3Membuat koneksi ke databasecon = sqlite3.connect("DATAMUSIK.db") c = con.cursor()Definisi tabel dan datatables = [ ("Gn_A_Bass", [ ('Satu', '123457'), ('Dua', '123457'), ('Tiga', '123457') ]), ("Gn_Biru", [ ('Satu', '1', '2', '3', '4', '5'), ( 'Dua', '1', '2', '3', '4', '5'), ('Tiga', '1', '2', '3', '4', '5') ]), ("Gn_Cyan_Atas", [ ('Satu_R', '1', '2', '3', '', '5', '1', '2', '3', '4', '5'), ('Dua_R', '1', '', '3', '4', '5', '1', '2', '3', '4', '5'), ('Tiga_R', '1', '2', '3', '4', '', '1', '2', '3', '4', '5') ]), ("Sub_Gn_Cyan_Atas ", [ ('Satu_D', 'B1', 'B2', 'B3', 'B4', '', 'T1', 'T2', 'T3', 'T4', 'T5') ]), ("Gn_Cyan_Bawah", [ ('Satu_R', 'Bass 1', 'Trebel 1', 'Trebel 1'), ('Dua_R', 'Bass 2', 'Trebel Biasa 2', 'Trebel Aneh 2'), ('Tiga_R', 'Bass 3', 'Trebel Biasa 3', 'Trebel Aneh 3'), ('Empat_R', 'Bass 4', '', 'Trebel Aneh 4') ]), ("Sub_Gn_Cyan_Bawah", [ ('Satu_D', 'Bass D', 'Trebel Biasa D', 'Trebel Aneh D') ]), ("Gn_A_Trebel", [ ('Satu', '3457'), ('Dua', '3457' ), ('Tiga', '3457') ]) ]Membuat tabel dan memasukkan data untuk nama_tabel, data dalam tabel: if nama_tabel == "Gn_Biru": create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PENINGKATAN OTOMATIS KUNCI UTAMA, TEKS Level, TEKS Bass_1, Trebel_1 TEKS, Bass_2 TEKS, Trebel_2 TEKS, Bass_3 TEKS ) """ sisipkan_query = f"MASUKKAN KE {nama_tabel} (Level, Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3) NILAI (?, ?, ?, ?, ?, ? )" data_to_insert = data[:3] # Batasan data menjadi 3 baris elif nama_tabel == "Gn_Cyan_Atas": create_query = f""" CREATE TABLE IF NOT EXISTS {nama_tabel} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level_R TEXT, Bass_1 TEXT, Bass_2 TEKS, Bass_3 TEKS, Bass_4 TEKS, Bass_5 TEKS, Trebel_1 TEKS, Trebel_2 TEKS, Trebel_3 TEKS, Trebel_4 TEKS, Trebel_5 TEKS ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level_R, Bass_1, Bass_2, Bass_3, Bass_4, Bass_5, Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5) NILAI (?, ?, ?, ?, ?, ?, ? , ?, ?, ?, ?)" data_to_insert = data[:3] # Batasi data menjadi 3 baris elif table_name == "Gn_Cyan_Bawah":create_query = f""" BUAT TABEL JIKA TIDAK ADA {nama_tabel} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level_R TEKS, Bass TEKS, Trebel_Biasa TEKS, Trebel_Aneh TEKS ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level_R, Bass, Trebel_Biasa, Trebel_Aneh) NILAI (?, ?, ?, ?)" data_yang_di_masukkan = data[:4] # Batasan data menjadi 4 baris elif nama_tabel == "Sub_Gn_Cyan_Atas": create_query = f""" CREATE TABLE JIKA TIDAK ADA {nama_tabel} ( Sub_ID INTEGER PRIMARY KEY AUTOINCREMENT, TEKS Level_D, TEKS Bass_1, TEKS Bass_2, TEKS Bass_3, TEKS Bass_4, Bass_5 TEKS, Trebel_1 TEKS, Trebel_2 TEKS, Trebel_3 TEKS, Trebel_4 TEKS, Trebel_5 TEKS ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level_D, Bass_1, Bass_2, Bass_3, Bass_4, Bass_5, Trebel_1, Trebel_2, Trebel_3, Trebel_4 , Trebel_5) NILAI (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" data_ke_masukkan = data[:1] # Batasan data menjadi 1 baris elif nama_tabel == "Sub_Gn_Cyan_Bawah": create_query = f""" BUAT TABEL JIKA TIDAK ADA {nama_tabel} ( Sub_ID INTEGER PRIMARY KEY AUTOINCREMENT, Level_D TEKS, Bass TEKS, Trebel_Biasa TEXT, Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris lain: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"INSERT INTO {table_name} ( Level, Gugusan_nada) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"INSERT INTO { table_name} (Level, Gugusan_nada) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"INSERT INTO { table_name} (Level, Gugusan_nada) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(buat_kueri)jalankan(create_query)jalankan(create_query)jalankan(create_query)jalankan(create_query)jalankan(create_query)jalankan(create_query)jalankan(create_query)jalankan(create_query)Level_R TEKS, Bass TEKS, Trebel_Biasa TEKS, Trebel_Aneh TEKS ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level_R, Bass, Trebel_Biasa, Trebel_Aneh) NILAI (?, ?, ?, ?)" data_yang_di_masukkan = data[:4 ] # Batasan data menjadi 4 baris elif nama_tabel == "Sub_Gn_Cyan_Atas": create_query = f""" CREATE TABLE IF NOT EXISTS {nama_tabel} ( Sub_ID INTEGER PRIMARY KEY AUTOINCREMENT, Level_D TEKS, Bass_1 TEKS, Bass_2 TEKS, Bass_3 TEKS, Bass_4 TEKS , Bass_5 TEKS, Trebel_1 TEKS, Trebel_2 TEKS, Trebel_3 TEKS, Trebel_4 TEKS, Trebel_5 TEKS ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level_D, Bass_1, Bass_2, Bass_3, Bass_4, Bass_5, Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5) NILAI (?, ?, ?, ?, ?, ?, ? , ?, ?, ?, ?)" data_ke_masukkan = data[:1] # Batasan data menjadi 1 baris elif nama_tabel == "Sub_Gn_Cyan_Bawah": create_query = f""" BUAT TABEL JIKA TIDAK ADA {nama_tabel} ( Sub_ID INTEGER PRIMARY KEY AUTOINCREMENT, TEKS Level_D, TEKS Bass, TEKS Trebel_Biasa, TEKS Trebel_Aneh ) """ insert_query = f"INSERT INTO {nama_tabel} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level, Gugusan_nada) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level, Gugusan_nada) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc. jalankan(buat_query)Trebel_Aneh TEKS ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris jika tidak: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEKS, Gugusan_nada TEKS ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level, Gugusan_nada) NILAI (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query )Level_R TEKS, Bass TEKS, Trebel_Biasa TEKS, Trebel_Aneh TEKS ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level_R, Bass, Trebel_Biasa, Trebel_Aneh) NILAI (?, ?, ?, ?)" data_yang_di_masukkan = data[:4 ] # Batasan data menjadi 4 baris elif nama_tabel == "Sub_Gn_Cyan_Atas": create_query = f""" CREATE TABLE IF NOT EXISTS {nama_tabel} ( Sub_ID INTEGER PRIMARY KEY AUTOINCREMENT, Level_D TEKS, Bass_1 TEKS, Bass_2 TEKS, Bass_3 TEKS, Bass_4 TEKS , Bass_5 TEKS, Trebel_1 TEKS, Trebel_2 TEKS, Trebel_3 TEKS, Trebel_4 TEKS, Trebel_5 TEKS ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level_D, Bass_1, Bass_2, Bass_3, Bass_4, Bass_5, Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5) NILAI (?, ?, ?, ?, ?, ?, ? , ?, ?, ?, ?)" data_ke_masukkan = data[:1] # Batasan data menjadi 1 baris elif nama_tabel == "Sub_Gn_Cyan_Bawah": create_query = f""" BUAT TABEL JIKA TIDAK ADA {nama_tabel} ( Sub_ID INTEGER PRIMARY KEY AUTOINCREMENT, TEKS Level_D, TEKS Bass, TEKS Trebel_Biasa, TEKS Trebel_Aneh ) """ insert_query = f"INSERT INTO {nama_tabel} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level, Gugusan_nada) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level, Gugusan_nada) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc. jalankan(buat_query)Trebel_Aneh TEKS ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris jika tidak: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEKS, Gugusan_nada TEKS ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level, Gugusan_nada) NILAI (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query )Trebel_Aneh TEKS ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level_R, Bass, Trebel_Biasa, Trebel_Aneh) NILAI (?, ?, ?, ?)" data_yang_di_masukkan = data[:4] # Batasan data menjadi 4 baris elif nama_tabel == "Sub_Gn_Cyan_Atas": create_query = f""" BUAT TABEL JIKA TIDAK ADA {nama_tabel} ( Sub_ID INTEGER PRIMARY KEY AUTOINCREMENT, Level_D TEKS, Bass_1 TEKS, Bass_2 TEKS, Bass_3 TEKS, Bass_4 TEKS, Bass_5 TEKS, Trebel_1 TEKS, Trebel_2 TEKS , Trebel_3 TEKS, Trebel_4 TEKS, Trebel_5 TEKS ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level_D, Bass_1, Bass_2, Bass_3, Bass_4, Bass_5, Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5) NILAI (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) " data_ke_masukkan = data[:1] # Batasan data menjadi 1 baris elif nama_tabel == "Sub_Gn_Cyan_Bawah": create_query = f""" CREATE TABLE IF NOT EXISTS {nama_tabel} ( Sub_ID INTEGER PRIMARY KEY AUTOINCREMENT, Level_D TEKS, Bass TEKS, Trebel_Biasa TEKS, Trebel_Aneh TEKS ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) NILAI (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris jika tidak: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level, Gugusan_nada) NILAI (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute( buat_query)Trebel_Aneh TEKS ) """ sisipkan_query = f"MASUKKAN KE {nama_tabel} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) NILAI (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT , Gugusan_nada TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level, Gugusan_nada) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEXT ) " "" insert_query = f"MASUKKAN KE {nama_tabel} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) NILAI (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris jika tidak: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) " "" insert_query = f"INSERT INTO {table_name} (Level, Nilai_keluar) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEKS ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level_R, Bass, Trebel_Biasa, Trebel_Aneh) NILAI (?, ?, ?, ?)" data_yang_di_masukkan = data[:4] # Batasan data menjadi 4 baris elif nama_tabel == "Sub_Gn_Cyan_Atas": create_query = f""" BUAT TABEL JIKA TIDAK ADA {nama_tabel} ( Sub_ID INTEGER PRIMARY KEY AUTOINCREMENT, Level_D TEKS, Bass_1 TEKS, Bass_2 TEKS, Bass_3 TEKS, Bass_4 TEKS, Bass_5 TEKS, Trebel_1 TEKS, Trebel_2 TEKS , Trebel_3 TEKS, Trebel_4 TEKS, Trebel_5 TEKS ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level_D, Bass_1, Bass_2, Bass_3, Bass_4, Bass_5, Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5) NILAI (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) " data_ke_masukkan = data[:1] # Batasan data menjadi 1 baris elif nama_tabel == "Sub_Gn_Cyan_Bawah": create_query = f""" CREATE TABLE IF NOT EXISTS {nama_tabel} ( Sub_ID INTEGER PRIMARY KEY AUTOINCREMENT, Level_D TEKS, Bass TEKS, Trebel_Biasa TEKS, Trebel_Aneh TEKS ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) NILAI (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris jika tidak: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level, Gugusan_nada) NILAI (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute( buat_query)Trebel_Aneh TEKS ) """ sisipkan_query = f"MASUKKAN KE {nama_tabel} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) NILAI (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT , Gugusan_nada TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level, Gugusan_nada) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEXT ) " "" insert_query = f"MASUKKAN KE {nama_tabel} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) NILAI (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris jika tidak: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) " "" insert_query = f"INSERT INTO {table_name} (Level, Nilai_keluar) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)create_query = f""" BUAT TABEL JIKA TIDAK ADA {nama_tabel} ( Sub_ID INTEGER PRIMARY KEY AUTOINCREMENT, Level_D TEKS, Bass_1 TEKS, Bass_2 TEKS, Bass_3 TEKS, Bass_4 TEKS, Bass_5 TEKS, Trebel_1 TEKS, Trebel_2 TEKS, Trebel_3 TEKS, Trebel_4 TEKS , Trebel_5 TEKS ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level_D, Bass_1, Bass_2, Bass_3, Bass_4, Bass_5, Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5) NILAI (?, ?, ?, ?, ? , ?, ?, ?, ?, ?, ?)" data_ke_masukkan = data[:1] # Batasan data menjadi 1 baris elif nama_tabel == "Sub_Gn_Cyan_Bawah": create_query = f""" BUAT TABEL JIKA TIDAK ADA {nama_tabel} ( Sub_ID INTEGER PRIMARY KEY AUTOINCREMENT, Level_D TEKS, Bass TEKS, Trebel_Biasa TEXT, Trebel_Aneh TEXT ) """ insert_query = f" INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f """ BUAT TABEL JIKA TIDAK ADA {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level, Nilai_tabel) NILAI (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel buat_query = f""" BUAT TABEL JIKA TIDAK ADA {nama_tabel} ( ID INTEGER KUNCI UTAMA AUTOINCREMENT, Level TEKS, Gugusan_nada TEKS ) """ masukkan_query = f"INSERT INTO {nama_tabel} (Level, Nilai_tabel) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f"" "BUAT TABEL JIKA TIDAK ADA {nama_tabel} (ID INTEGER KUNCI UTAMA AUTOINCREMENT, Level TEKS, Gugusan_nada TEKS)""" insert_query = f"MASUKKAN KE {table_name} (Level, Gugusan_nada) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)create_query = f""" BUAT TABEL JIKA TIDAK ADA {nama_tabel} ( Sub_ID INTEGER PRIMARY KEY AUTOINCREMENT, Level_D TEKS, Bass_1 TEKS, Bass_2 TEKS, Bass_3 TEKS, Bass_4 TEKS, Bass_5 TEKS, Trebel_1 TEKS, Trebel_2 TEKS, Trebel_3 TEKS, Trebel_4 TEKS , Trebel_5 TEKS ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level_D, Bass_1, Bass_2, Bass_3, Bass_4, Bass_5, Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5) NILAI (?, ?, ?, ?, ? , ?, ?, ?, ?, ?, ?)" data_ke_masukkan = data[:1] # Batasan data menjadi 1 baris elif nama_tabel == "Sub_Gn_Cyan_Bawah": create_query = f""" BUAT TABEL JIKA TIDAK ADA {nama_tabel} ( Sub_ID INTEGER PRIMARY KEY AUTOINCREMENT, Level_D TEKS, Bass TEKS, Trebel_Biasa TEXT, Trebel_Aneh TEXT ) """ insert_query = f" INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f """ BUAT TABEL JIKA TIDAK ADA {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level, Nilai_tabel) NILAI (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel buat_query = f""" BUAT TABEL JIKA TIDAK ADA {nama_tabel} ( ID INTEGER KUNCI UTAMA AUTOINCREMENT, Level TEKS, Gugusan_nada TEKS ) """ masukkan_query = f"INSERT INTO {nama_tabel} (Level, Nilai_tabel) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f"" "BUAT TABEL JIKA TIDAK ADA {nama_tabel} (ID INTEGER KUNCI UTAMA AUTOINCREMENT, Level TEKS, Gugusan_nada TEKS)""" insert_query = f"MASUKKAN KE {table_name} (Level, Gugusan_nada) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_5) NILAI (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" data_ke_masukkan = data[:1] # Batasan data menjadi 1 baris elif nama_tabel == "Sub_Gn_Cyan_Bawah": create_query = f""" BUAT TABEL JIKA TIDAK ADA {nama_tabel} ( Sub_ID INTEGER PRIMARY KEY AUTOINCREMENT, Level_D TEKS, Bass TEKS, Trebel_Biasa TEXT, Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" BUAT TABEL JIKA TIDAK ADA {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level, Gugusan_nada) VALUES (? , ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" BUAT TABEL JIKA TIDAK ADA {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level, Gugusan_nada) VALUES (?, ? )" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" BUAT TABEL JIKA TIDAK ADA {nama_tabel} ( ID INTEGER KUNCI PRIMER AUTOINCREMENT, Level TEKS, Gugusan_nada TEKS ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level, Gugusan_nada) NILAI (?, ?) "data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_5) NILAI (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" data_ke_masukkan = data[:1] # Batasan data menjadi 1 baris elif nama_tabel == "Sub_Gn_Cyan_Bawah": create_query = f""" BUAT TABEL JIKA TIDAK ADA {nama_tabel} ( Sub_ID INTEGER PRIMARY KEY AUTOINCREMENT, Level_D TEKS, Bass TEKS, Trebel_Biasa TEXT, Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" BUAT TABEL JIKA TIDAK ADA {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level, Gugusan_nada) VALUES (? , ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" BUAT TABEL JIKA TIDAK ADA {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level, Gugusan_nada) VALUES (?, ? )" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" BUAT TABEL JIKA TIDAK ADA {nama_tabel} ( ID INTEGER KUNCI PRIMER AUTOINCREMENT, Level TEKS, Gugusan_nada TEKS ) """ insert_query = f"MASUKKAN KE {nama_tabel} (Level, Gugusan_nada) NILAI (?, ?) "data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level, Gugusan_nada) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level, Gugusan_nada) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(buat_kueri)3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level, Gugusan_nada) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(create_query)Trebel_Aneh TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level_D, Bass, Trebel_Biasa, Trebel_Aneh) VALUES (?, ?, ?, ?)" data_to_insert = data[:1] # Batasan data menjadi 1 baris else: # Kasus default untuk Gn_A_Bass dan Gn_A_Trebel create_query = f""" CREATE TABLE IF NOT EXISTS {table_name} ( ID INTEGER PRIMARY KEY AUTOINCREMENT, Level TEXT, Gugusan_nada TEXT ) """ insert_query = f"INSERT INTO {table_name} (Level, Gugusan_nada) VALUES (?, ?)" data_to_insert = data[:3] # Batasan data menjadi 3 barisc.execute(buat_kueri)
c.executemany(insert_query, data_to_insert)Menyimpan perubahan dan menutup koneksicon.commit() con.close()print("Database DATAMUSIK.db telah berhasil dibuat dan diisi dengan data.")
Berikut adalah perbaikan kode yang diinginkan:
ular piton
impor tkinter sebagai tk
dari tkinter impor ttk
mengimpor sqlite3
# Inisialisasi jendela utama
akar = tk.Tk()
akar.geometri("690x1390")
root.title("Arah Arus Musik Gn_Biru")
rangka_utama = tk.Rangka(akar)
main_frame.pack(isi=tk.BOTH, perluas=1)
kanvas = tk.Kanvas(bingkai_utama)
kanvas.paket(sisi=tk.KIRI, isi=tk.KEDUANYA, perluas=1)
scrollbar_y = ttk.Scrollbar(bingkai_utama, orientasi=tk.VERTIKAL, perintah=kanvas.yview)
scrollbar_y.pack(sisi=tk.KANAN, isi=tk.Y)
scrollbar_x = ttk.Scrollbar(akar, orientasi=tk.HORIZONTAL, perintah=kanvas.xview)
scrollbar_x.pack(sisi=tk.BOTTOM, isi=tk.X)
kanvas.konfigurasi(yscrollcommand=scrollbar_y.set, xscrollcommand=scrollbar_x.set)
canvas.bind('<Configure>', lambda dan: canvas.configure(scrollregion=canvas.bbox("all")))
bingkai_konten = tk.Bingkai(kanvas)
kanvas.buat_jendela((0, 0), jendela=bingkai_konten, jangkar="barat_laut")
data_frame = tk.Frame(bingkai_konten)
data_frame.grid(baris=0, kolom=0, padx=10, pady=10)
def buat_database():
koneksi = sqlite3.connect("DATAMUSIK.db")
c = kon.kursor()
c.execute('''BUAT TABEL JIKA TIDAK ADA Gn_Biru
(ID INTEGER KUNCI UTAMA,
Tingkat TEKS,
Bass_1 NYATA,
Trebel_1 NYATA,
Bass_2 NYATA,
Trebel_2 NYATA,
Bass_3 (SEKARANG)''')
kon.komit()
sambung.tutup()
# Fungsi CRUD untuk Gn_Biru
def buat_gn_biru_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("MASUKKAN KE Gn_Biru (ID, Tingkat, Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3) NILAI (?, ?, ?, ?, ?, ?, ?)",
(ID_entri.dapatkan(), Level_entri.dapatkan(), Bass_1_entri.dapatkan(), Trebel_1_entri.dapatkan(), Bass_2_entri.dapatkan(), Trebel_2_entri.dapatkan(), Bass_3_entri.dapatkan()))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan memasukkan rekaman: {e}")
sambung.tutup()
hapus_entri_gn_biru()
baca_gn_biru_records()
def baca_gn_biru_records():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("PILIH *DARI Gn_Biru")
catatan = c.fetchall()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat membaca catatan: {e}")
catatan = []
sambung.tutup()
untuk widget di data_frame_gn_biru.winfo_children():
widget.hancurkan()
# Menampilkan data
untuk indeks, rekam dalam enumerate(records):
untuk col, nilai dalam enumerate(record):
tk.Label(data_frame_gn_biru, teks=nilai, bg="#e0e0e0").grid(baris=indeks+1, kolom=kolom, padx=5, pady=5)
# Menampilkan header kolom
kolom = ["ID", "Level", "Bass_1", "Trebel_1", "Bass_2", "Trebel_2", "Bass_3"]
untuk col_index, col_name di enumerate(kolom):
tk.Label(data_frame_gn_biru, teks=nama_kolom, font=('tebal')).grid(baris=0, kolom=indeks_kolom, padx=5, pady=5)
perbarui_gn_biru_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("PERBARUI Gn_Biru SET Level = ?, Bass_1 = ?, Trebel_1 = ?, Bass_2 = ?, Trebel_2 = ?, Bass_3 = ? DI MANA ID = ?",
(Level_entri.dapatkan(), Bass_1_entri.dapatkan(), Trebel_1_entri.dapatkan(), Bass_2_entri.dapatkan(), Trebel_2_entri.dapatkan(), Bass_3_entri.dapatkan()))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat memperbarui rekaman: {e}")
sambung.tutup()
hapus_entri_gn_biru()
baca_gn_biru_records()
def hapus_gn_biru_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("HAPUS DARI Gn_Biru DI MANA ID = ?", (ID_entry.get(),))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat menghapus rekaman: {e}")
sambung.tutup()
hapus_entri_gn_biru()
baca_gn_biru_records()
def clear_entries_gn_biru():
ID_entri.hapus(0, tk.AKHIR)
Level_entri.hapus(0, tk.AKHIR)
Bass_1_entri.hapus(0, tk.AKHIR)
Trebel_1_entri.hapus(0, tk.AKHIR)
Bass_2_entri.hapus(0, tk.AKHIR)
Trebel_2_entri.hapus(0, tk.AKHIR)
Bass_3_entri.hapus(0, tk.AKHIR)
# Fungsi setup_default_mode
def setup_default_mode(mode):
jika modus == 1:
baca_gn_biru_records()
# Entri untuk Gn_Biru
tk.Label(data_frame, teks="ID \n Gn_Biru").grid(baris=0, kolom=0, padx=5, pady=5)
ID_1_entri = tk.Entri(bingkai_data, lebar=4)
ID_1_entry.grid(baris=1, kolom=0, padx=5, pady=5)
ID_2_entri = tk.Entri(bingkai_data, lebar=4)
ID_2_entry.grid(baris=2, kolom=0, padx=5, pady=5)
ID_3_entri = tk.Entri(bingkai_data, lebar=4)
ID_3_entry.grid(baris=3, kolom=0, padx=5, pady=5)
tk.Label(data_frame, teks="Level").grid(baris=0, kolom=1, padx=5, pady=5)
Level_1_entri = tk.Entri(bingkai_data, lebar=6)
Level_1_entry.grid(baris=1, kolom=1, padx=5, pady=5)
Level_1_entry.insert(0, "Satu") # Teks default untuk baris 1
Level_2_entri = tk.Entri(bingkai_data, lebar=6)
Level_2_entry.grid(baris=2, kolom=1, padx=5, pady=5)
Level_2_entry.insert(0, "Dua") # Teks default untuk baris 2
Level_3_entri = tk.Entri(bingkai_data, lebar=6)
Level_3_entry.grid(baris=3, kolom=1, padx=5, pady=5)
Level_3_entry.insert(0, "Tiga") # Teks default untuk baris 3
tk.Label(data_frame, teks="Bass_1").grid(baris=0, kolom=2, padx=5, pady=5)
Bass_1_1_entri = tk.Entri(bingkai_data)
Bass_1_1_entry.grid(baris=1, kolom=2, padx=5, pady=5)
Bass_1_2_entri = tk.Entri(bingkai_data)
Bass_1_2_entry.grid(baris=2, kolom=2, padx=5, pady=5)
Bass_1_3_entri = tk.Entri(bingkai_data)
Bass_1_3_entry.grid(baris=3, kolom=2, padx=5, pady=5)
tk.Label(data_frame, teks="Trebel_1").grid(baris=0, kolom=3, padx=5, pady=5)
Trebel_1_1_entri = tk.Entri(bingkai_data)
Trebel_1_1_entry.grid(baris=1, kolom=3, padx=5, pady=5)
Trebel_1_2_entri = tk.Entri(bingkai_data)
Trebel_1_2_entry.grid(baris=2, kolom=3, padx=5, pady=5)
Trebel_1_3_entri = tk.Entri(bingkai_data)
Trebel_1_3_entry.grid(baris=3, kolom=3, padx=5, pady=5)
tk.Label(data_frame, teks="Bass_2").grid(baris=0, kolom=4, padx=5, pady=5)
Bass_2_1_entri = tk.Entri(bingkai_data)
Bass_2_1_entry.grid(baris=1, kolom=4, padx=5, pady=5)
Bass_2_2_entri = tk.Entri(bingkai_data)
Bass_2_2_entry.grid(baris=2, kolom=4, padx=5, pady=5)
Bass_2_3_entri = tk.Entri(bingkai_data)
Bass_2_3_entry.grid(baris=3, kolom=4, padx=5, pady=5)
tk.Label(data_frame, teks="Trebel_2").grid(baris=0, kolom=5, padx=5, pady=5)
Trebel_2_1_entri = tk.Entri(bingkai_data)
Trebel_2_1_entry.grid(baris=1, kolom=5, padx=5, pady=5)
Trebel_2_2_entri = tk.Entri(bingkai_data)
Trebel_2_2_entry.grid(baris=2, kolom=5, padx=5, pady=5)
Trebel_2_3_entri = tk.Entri(bingkai_data)
Trebel_2_3_entry.grid(baris=3, kolom=5, padx=5, pady=5)
tk.Label(data_frame, teks="Bass_3").grid(baris=0, kolom=6, padx=5, pady=5)
Bass_3_1_entri = tk.Entri
Setelah Bass_3_1_entry, lanjutkan kodenya hingga selesai
Bass_3_1_entri = tk.Entri(bingkai_data)
Bass_3_1_entry.grid(baris=1, kolom=6, padx=5, pady=5)
Bass_3_2_entri = tk.Entri(bingkai_data)
Bass_3_2_entry.grid(baris=2, kolom=6, padx=5, pady=5)
Bass_3_3_entri = tk.Entri(bingkai_data)
Bass_3_3_entry.grid(baris=3, kolom=6, padx=5, pady=5)
# Frame untuk Gn_Biru CRUD
crud_frame_gn_biru = tk.Frame(konten_frame)
crud_frame_gn_biru.grid(baris=1, kolom=0, padx=10, pady=10)
ID_label = tk.Label(crud_frame_gn_biru, text="ID:")
ID_label.grid(baris=0, kolom=0, padx=5, pady=5)
ID_entri = tk.Entri(crud_frame_gn_biru)
ID_entry.grid(baris=0, kolom=1, padx=5, pady=5)
Label_level = tk.Label(crud_frame_gn_biru, teks="Level:")
Level_label.grid(baris=1, kolom=0, padx=5, pady=5)
Level_entri = tk.Entri(crud_frame_gn_biru)
Level_entry.grid(baris=1, kolom=1, padx=5, pady=5)
Bass_1_label = tk.Label(crud_frame_gn_biru, teks="Bass_1:")
Bass_1_label.grid(baris=2, kolom=0, padx=5, pady=5)
Bass_1_entri = tk.Entri(crud_frame_gn_biru)
Bass_1_entry.grid(baris=2, kolom=1, padx=5, pady=5)
Trebel_1_label = tk.Label(crud_frame_gn_biru, text="Trebel_1:")
Trebel_1_label.grid(baris=3, kolom=0, padx=5, pady=5)
Trebel_1_entri = tk.Entri(crud_frame_gn_biru)
Trebel_1_entry.grid(baris=3, kolom=1, padx=5, pady=5)
Bass_2_label = tk.Label(crud_frame_gn_biru, teks="Bass_2:")
Bass_2_label.grid(baris=4, kolom=0, padx=5, pady=5)
Bass_2_entri = tk.Entri(crud_frame_gn_biru)
Bass_2_entry.grid(baris=4, kolom=1, padx=5, pady=5)
Trebel_2_label = tk.Label(crud_frame_gn_biru, text="Trebel_2:")
Trebel_2_label.grid(baris=5, kolom=0, padx=5, pady=5)
Trebel_2_entri = tk.Entri(crud_frame_gn_biru)
Trebel_2_entry.grid(baris=5, kolom=1, padx=5, pady=5)
Bass_3_label = tk.Label(crud_frame_gn_biru, teks="Bass_3:")
Bass_3_label.grid(baris=6, kolom=0, padx=5, pady=5)
Bass_3_entri = tk.Entri(crud_frame_gn_biru)
Bass_3_entry.grid(baris=6, kolom=1, padx=5, pady=5)
# Tombol-tombol untuk CRUD
buat_tombol = tk.Button(crud_frame_gn_biru, teks="Buat", perintah=buat_rekaman_gn_biru)
buat_tombol.grid(baris=7, kolom=0, padx=5, pady=5)
baca_tombol = tk.Button(crud_frame_gn_biru, text="Baca", perintah=baca_catatan_gn_biru)
baca_tombol.grid(baris=7, kolom=1, padx=5, pady=5)
update_button = tk.Button(crud_frame_gn_biru, text="memperbarui", command=perbarui_gn_biru_record)
update_button.grid(baris=8, kolom=0, padx=5, pady=5)
hapus_tombol = tk.Button(crud_frame_gn_biru, text="Hapus", perintah=hapus_catatan_gn_biru)
hapus_tombol.grid(baris=8, kolom=1, padx=5, pady=5)
# Bingkai untuk menampilkan data Gn_Biru
data_frame_gn_biru = tk.Frame(frame_konten)
data_frame_gn_biru.grid(baris=2, kolom=0, padx=10, pady=10)
# Inisialisasi database dan membaca data awal
membuat_database()
pengaturan_mode_default(1)
akar.loop utama()
Bagaimana dengan file DataMusik.py, apakah ada perubahan kodenya
Kode di `DataMusik.py` perlu disesuaikan untuk mendukung fungsi CRUD pada kedua tabel, yaitu `Gn_A_Trebel` dan `Gn_Biru`. Mari kita menambahkan fungsi CRUD untuk `Gn_Biru` pada `DataMusik.py`. Berikut adalah pembaruan yang mencakup kedua tabel:
ular piton
mengimpor sqlite3
def buat_database():
koneksi = sqlite3.connect("data_musik.db")
kursor = koneksi.kursor()
kursor.eksekusi("""
BUAT TABEL JIKA TIDAK ADA Gn_A_Trebel (
id KUNCI UTAMA INTEGER,
Tingkat TEKS,
Trebel_1 TEKS,
Bass_1 TEKS,
Trebel_2 TEKS,
Bass_2 TEKS,
Trebel_3 TEKS,
Bass_3 TEKS
)
""")
kursor.eksekusi("""
BUAT TABEL JIKA TIDAK ADA Gn_Biru (
id KUNCI UTAMA INTEGER,
Tingkat TEKS,
Bass_1 TEKS,
Trebel_1 TEKS,
Bass_2 TEKS,
Trebel_2 TEKS,
Bass_3 TEKS
)
""")
koneksi.komit()
koneksi.tutup()
# Fungsi CRUD untuk Gn_A_Trebel
def buat_gn_a_trebel_record(data):
koneksi = sqlite3.connect("data_musik.db")
kursor = koneksi.kursor()
kursor.eksekusi("""
MASUKKAN KE Gn_A_Trebel (Level, Trebel_1, Bass_1, Trebel_2, Bass_2, Trebel_3, Bass_3)
NILAI (?, ?, ?, ?, ?, ?, ?)
""", datanya)
koneksi.komit()
koneksi.tutup()
def baca_gn_a_trebel_records():
koneksi = sqlite3.connect("data_musik.db")
kursor = koneksi.kursor()
kursor.eksekusi("PILIH *DARI Gn_A_Trebel")
catatan = kursor.fetchall()
koneksi.tutup()
mengembalikan catatan
def perbarui_gn_a_trebel_record(id_rekaman, data):
koneksi = sqlite3.connect("data_musik.db")
kursor = koneksi.kursor()
kursor.eksekusi("""
UPDATE Gn_A_Trebel SET Level=?, Trebel_1=?, Bass_1=?, Trebel_2=?, Bass_2=?, Trebel_3=?, Bass_3=?
DIMANA id=?
""", (*data, id_rekaman))
koneksi.komit()
koneksi.tutup()
def hapus_gn_a_trebel_record(id_rekaman):
koneksi = sqlite3.connect("data_musik.db")
kursor = koneksi.kursor()
kursor.execute("HAPUS DARI Gn_A_Trebel DI MANA id=?", (record_id,))
koneksi.komit()
koneksi.tutup()
# Fungsi CRUD untuk Gn_Biru
def buat_gn_biru_catatan(data):
koneksi = sqlite3.connect("data_musik.db")
kursor = koneksi.kursor()
kursor.eksekusi("""
MASUKKAN KE Gn_Biru (Level, Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3)
NILAI (?, ?, ?, ?, ?, ?)
""", datanya)
koneksi.komit()
koneksi.tutup()
def baca_gn_biru_records():
koneksi = sqlite3.connect("data_musik.db")
kursor = koneksi.kursor()
kursor.eksekusi("PILIH * DARI Gn_Biru")
catatan = kursor.fetchall()
koneksi.tutup()
mengembalikan catatan
def update_gn_biru_record(id_rekaman, data):
koneksi = sqlite3.connect("data_musik.db")
kursor = koneksi.kursor()
kursor.eksekusi("""
UPDATE Gn_Biru SET Level=?, Bass_1=?, Trebel_1=?, Bass_2=?, Trebel_2=?, Bass_3=?
DIMANA id=?
""", (*data, id_rekaman))
koneksi.komit()
koneksi.tutup()
def delete_gn_biru_record(record_id):
koneksi = sqlite3.connect("data_musik.db")
kursor = koneksi.kursor()
kursor.execute("HAPUS DARI Gn_Biru DI MANA id=?", (record_id,))
koneksi.komit()
koneksi.tutup()
Bahasa Indonesia:
Fungsi CRUD untuk `Gn_Biru` telah ditambahkan dalam kode `DataMusik.py`. Dengan tambahan ini, aplikasi sekarang mendukung operasi CRUD untuk kedua tabel (`Gn_A_Trebel` dan `Gn_Biru`). Jika ada perubahan atau penyesuaian lebih lanjut yang diperlukan, silakan beri tahu!
Lanjutkan kode untuk melengkapi isi file Data musik.py
Berikut adalah kode lengkap untuk `DataMusik.py`, termasuk fungsi CRUD untuk kedua tabel `Gn_A_Trebel` dan `Gn_Biru` serta penanganan pembaruan basis data:
ular piton
mengimpor sqlite3
def buat_database():
koneksi = sqlite3.connect("data_musik.db")
kursor = koneksi.kursor()
kursor.eksekusi("""
BUAT TABEL JIKA TIDAK ADA Gn_A_Trebel (
id KUNCI UTAMA INTEGER,
Tingkat TEKS,
Trebel_1 TEKS,
Bass_1 TEKS,
Trebel_2 TEKS,
Bass_2 TEKS,
Trebel_3 TEKS,
Bass_3 TEKS
)
""")
kursor.eksekusi("""
BUAT TABEL JIKA TIDAK ADA Gn_Biru (
id KUNCI UTAMA INTEGER,
Tingkat TEKS,
Bass_1 TEKS,
Trebel_1 TEKS,
Bass_2 TEKS,
Trebel_2 TEKS,
Bass_3 TEKS
)
""")
koneksi.komit()
koneksi.tutup()
# Fungsi CRUD untuk Gn_A_Trebel
def buat_gn_a_trebel_record(data):
koneksi = sqlite3.connect("data_musik.db")
kursor = koneksi.kursor()
kursor.eksekusi("""
MASUKKAN KE Gn_A_Trebel (Level, Trebel_1, Bass_1, Trebel_2, Bass_2, Trebel_3, Bass_3)
NILAI (?, ?, ?, ?, ?, ?, ?)
""", datanya)
koneksi.komit()
koneksi.tutup()
def baca_gn_a_trebel_records():
koneksi = sqlite3.connect("data_musik.db")
kursor = koneksi.kursor()
kursor.eksekusi("PILIH *DARI Gn_A_Trebel")
catatan = kursor.fetchall()
koneksi.tutup()
mengembalikan catatan
def perbarui_gn_a_trebel_record(id_rekaman, data):
koneksi = sqlite3.connect("data_musik.db")
kursor = koneksi.kursor()
kursor.eksekusi("""
UPDATE Gn_A_Trebel SET Level=?, Trebel_1=?, Bass_1=?, Trebel_2=?, Bass_2=?, Trebel_3=?, Bass_3=?
DIMANA id=?
""", (*data, id_rekaman))
koneksi.komit()
koneksi.tutup()
def hapus_gn_a_trebel_record(id_rekaman):
koneksi = sqlite3.connect("data_musik.db")
kursor = koneksi.kursor()
kursor.execute("HAPUS DARI Gn_A_Trebel DI MANA id=?", (record_id,))
koneksi.komit()
koneksi.tutup()
# Fungsi CRUD untuk Gn_Biru
def buat_gn_biru_catatan(data):
koneksi = sqlite3.connect("data_musik.db")
kursor = koneksi.kursor()
kursor.eksekusi("""
MASUKKAN KE Gn_Biru (Level, Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3)
NILAI (?, ?, ?, ?, ?, ?)
""", datanya)
koneksi.komit()
koneksi.tutup()
def baca_gn_biru_records():
koneksi = sqlite3.connect("data_musik.db")
kursor = koneksi.kursor()
kursor.eksekusi("PILIH * DARI Gn_Biru")
catatan = kursor.fetchall()
koneksi.tutup()
mengembalikan catatan
def update_gn_biru_record(id_rekaman, data):
koneksi = sqlite3.connect("data_musik.db")
kursor = koneksi.kursor()
kursor.eksekusi("""
UPDATE Gn_Biru SET Level=?, Bass_1=?, Trebel_1=?, Bass_2=?, Trebel_2=?, Bass_3=?
DIMANA id=?
""", (*data, id_rekaman))
koneksi.komit()
koneksi.tutup()
def delete_gn_biru_record(record_id):
koneksi = sqlite3.connect("data_musik.db")
kursor = koneksi.kursor()
kursor.execute("HAPUS DARI Gn_Biru DI MANA id=?", (record_id,))
koneksi.komit()
koneksi.tutup()
Bahasa Indonesia:
Kode ini mencakup pembuatan tabel `Gn_A_Trebel` dan `Gn_Biru`, serta fungsi CRUD untuk tabel kedua. Pastikan bahwa file `data_musik.db` berada dalam direktori yang sama dengan skrip Python agar koneksi ke basis data dapat dilakukan dengan benar. Jika ada perubahan atau tambahan yang diperlukan, silakan beri tahu!
Pada kode isi file CRUD_Gn_Biru.py, kenapa harus ada tambahan EntryBox inputan lagi, mungkin bisa menginput data langsung ke EntryBox inputan yang sebanyak 6 kolom 3 baris tersebut (kolom Level tidak perlu inputan data lagi.
Benar, kita bisa memanfaatkan EntryBox yang sudah ada untuk memasukkan data secara langsung, tanpa perlu menambahkan EntryBox baru. Kita hanya perlu memastikan bahwa data yang diambil dari EntryBox tersebut sesuai dengan urutan kolom di tabel `Gn_Biru`.
Mari kita sesuaikan kode di `CRUD_Gn_Biru.py`:
ular piton
dari tkinter impor *
dari tkinter impor kotak pesan
import DataMusik # Mengimpor modul untuk mengakses fungsi CRUD
kelas CRUD_Gn_Biru:
def __init__(diri sendiri, root):
self.akar = akar
self.root.title("CRUD Gn Biru")
diri.akar.geometri("800x400")
sendiri.create_widget()
sendiri.membuat_tabel()
def buat_widget(diri sendiri):
# Labels dan EntryBox untuk memasukkan data
entri sendiri = {}
label = ["Level", "Bass_1", "Trebel_1", "Bass_2", "Trebel_2", "Bass_3"]
untuk i, label di enumerate(label):
Label(self.root, teks=label).grid(baris=i, kolom=0)
self.entri[label] = Entri(self.root)
self.entries[label].grid(baris=i, kolom=1)
# Tombol untuk operasi CRUD
Tombol(self.root, teks="Tambah", perintah=self.add_record).grid(baris=7, kolom=0)
Tombol(self.root, teks="memperbarui", perintah=self.update_record).grid(baris=7, kolom=1)
Tombol(self.root, teks="Hapus", perintah=self.delete_record).grid(baris=7, kolom=2)
Tombol(self.root, teks="Baca", perintah=self.read_records).grid(baris=7, kolom=3)
# Tabel untuk menampilkan data
self.tabel = Listbox(self.akar, lebar=80, tinggi=10)
self.table.grid(baris=8, kolom=0, jarak kolom=4)
def buat_tabel(sendiri):
DataMusik.create_database() # Pastikan tabel dibuat saat inisialisasi
def tambahkan_rekaman(diri):
data = (entri sendiri["Level"].dapatkan(), entri sendiri["Bass_1"].dapatkan(), entri sendiri["Trebel_1"].dapatkan(),
entri mandiri["Bass_2"].dapatkan(), entri mandiri["Trebel_2"].dapatkan(), entri mandiri["Bass_3"].dapatkan())
DataMusik.create_gn_biru_record(data)
messagebox.showinfo("Berhasil", "Data berhasil ditambahkan")
self.read_records() # Memperbarui tampilan tabel
def baca_catatan(diri):
catatan = DataMusik.read_gn_biru_records()
self.tabel.hapus(0, SELESAI)
untuk dicatat dalam arsip:
self.table.insert(AKHIR,catatan)
def perbarui_rekaman(diri):
dipilih = self.table.curselection()
jika tidak dipilih:
messagebox.showwarning("Peringatan", "Pilih rekaman untuk diperbarui")
kembali
record_id = self.table.dapatkan(yang dipilih[0])[0]
data = (entri sendiri["Level"].dapatkan(), entri sendiri["Bass_1"].dapatkan(), entri sendiri["Trebel_1"].dapatkan(),
entri mandiri["Bass_2"].dapatkan(), entri mandiri["Trebel_2"].dapatkan(), entri mandiri["Bass_3"].dapatkan())
DataMusik.update_gn_biru_record(record_id, data)
messagebox.showinfo("Berhasil", "Rekaman berhasil diperbarui")
self.read_records() # Memperbarui tampilan tabel
def hapus_rekaman(diri):
dipilih = self.table.curselection()
jika tidak dipilih:
messagebox.showwarning("Peringatan", "Pilih rekaman yang akan dihapus")
kembali
record_id = self.table.dapatkan(yang dipilih[0])[0]
DataMusik.delete_gn_biru_record(record_id)
messagebox.showinfo("Berhasil", "Rekaman berhasil dihapus")
self.read_records() # Memperbarui tampilan tabel
jika __nama__ == "__utama__":
akar = Tk()
aplikasi = CRUD_Gn_Biru(root)
akar.loop utama()
Bahasa Indonesia:
Kode di atas memanfaatkan `EntryBox` yang ada untuk memasukkan data ke dalam tabel `Gn_Biru`. Kode ini menggunakan `self.entries` sebagai tempat penyimpanan untuk EntryBox yang dibuat secara dinamis sesuai dengan label yang diperlukan. Fungsi CRUD (Create, Read, Update, Delete) diimplementasikan dengan mengambil data langsung dari EntryBox yang sudah ada, sehingga tidak perlu membuat EntryBox tambahan.
Ini memastikan bahwa pengguna hanya memasukkan data sekali ke EntryBox yang sudah ada, dan data tersebut digunakan untuk semua operasi CRUD.
Ketika kode isi file CRUD_Gn_Biru.py dieksekusi, muncul pesan error':
Traceback (panggilan terakhir terakhir):
File "/storage/emulated/0/NadaPL/CRUD_Gn_Biru.py", baris 3, di <modul>
import DataMusik # Mengimpor modul untuk mengakses fungsi CRUD
^^^^^^^^^^^^^^^^
ModuleNotFoundError: Tidak ada modul bernama 'DataMusik'
Padahal file DataMusik.py sudah ada di direktori yang sama dengan skrip
Pesan error tersebut menunjukkan bahwa modul `DataMusik` tidak dapat ditemukan oleh Python. Pastikan nama file `DataMusik.py` sudah benar dan terletak di direktori yang sama dengan file `CRUD_Gn_Biru.py`. Jika nama file dan lokasinya sudah benar, ada beberapa langkah yang dapat diambil untuk memastikan Python dapat menemukan modul tersebut:
1. **Pastikan Nama File Benar:**
Pastikan file `DataMusik.py` benar-benar ada di direktori yang sama dengan `CRUD_Gn_Biru.py` dan tidak ada kesalahan penamaan (misalnya, pastikan tidak ada spasi atau karakter khusus yang salah).
2. **Periksa Jalur Kerja:**
Pastikan jalur kerja saat menjalankan skrip adalah direktori yang berisi file tersebut. Anda dapat menambahkan kode berikut di awal skrip untuk mencetak jalur kerja saat ini:
ular piton
impor os
cetak(os.getcwd())
Bahasa Indonesia:
3. **Impor Relatif Penggunaan:**
Jika Anda masih mengalami masalah, Anda dapat mencoba menggunakan relative import. Misalnya, jika `DataMusik.py` berada di subdirektori, Anda dapat mengubah impor menjadi:
ular piton
dari .impor DataMusik
Bahasa Indonesia:
4. **Menambah Direktori ke Jalur:**
Jika semua langkah di atas tidak berhasil, Anda dapat menambahkan direktori yang berisi `DataMusik.py` ke `sys.path`:
ular piton
impor sistem
impor os
sys.path.tambahkan(os.path.namadir(os.path.abspath(__file__)))
impor DataMusik
Bahasa Indonesia:
Coba jalankan kembali skrip setelah memastikan salah satu langkah di atas diterapkan. Berikut adalah contoh bagaimana Anda dapat memastikan modul `DataMusik` ditemukan dan diimpor dengan benar:
ular piton
impor sistem
impor os
sys.path.tambahkan(os.path.namadir(os.path.abspath(__file__)))
import DataMusik # Mengimpor modul untuk mengakses fungsi CRUD
dari tkinter impor *
dari tkinter impor kotak pesan
kelas CRUD_Gn_Biru:
def __init__(diri sendiri, root):
self.akar = akar
self.root.title("CRUD Gn Biru")
diri.akar.geometri("800x400")
sendiri.create_widget()
sendiri.membuat_tabel()
def buat_widget(diri sendiri):
# Labels dan EntryBox untuk memasukkan data
entri sendiri = {}
label = ["Level", "Bass_1", "Trebel_1", "Bass_2", "Trebel_2", "Bass_3"]
untuk i, label di enumerate(label):
Label(self.root, teks=label).grid(baris=i, kolom=0)
self.entri[label] = Entri(self.root)
self.entries[label].grid(baris=i, kolom=1)
# Tombol untuk operasi CRUD
Tombol(self.root, teks="Tambah", perintah=self.add_record).grid(baris=7, kolom=0)
Tombol(self.root, teks="memperbarui", perintah=self.update_record).grid(baris=7, kolom=1)
Tombol(self.root, teks="Hapus", perintah=self.delete_record).grid(baris=7, kolom=2)
Tombol(self.root, teks="Baca", perintah=self.read_records).grid(baris=7, kolom=3)
# Tabel untuk menampilkan data
self.tabel = Listbox(self.akar, lebar=80, tinggi=10)
self.table.grid(baris=8, kolom=0, jarak kolom=4)
def buat_tabel(sendiri):
DataMusik.create_database() # Pastikan tabel dibuat saat inisialisasi
def tambahkan_rekaman(diri):
data = (entri sendiri["Level"].dapatkan(), entri sendiri["Bass_1"].dapatkan(), entri sendiri["Trebel_1"].dapatkan(),
entri mandiri["Bass_2"].dapatkan(), entri mandiri["Trebel_2"].dapatkan(), entri mandiri["Bass_3"].dapatkan())
DataMusik.create_gn_biru_record(data)
messagebox.showinfo("Berhasil", "Data berhasil ditambahkan")
self.read_records() # Memperbarui tampilan tabel
def baca_catatan(diri):
catatan = DataMusik.read_gn_biru_records()
self.tabel.hapus(0, SELESAI)
untuk dicatat dalam arsip:
self.table.insert(AKHIR,catatan)
def perbarui_rekaman(diri):
dipilih = self.table.curselection()
jika tidak dipilih:
messagebox.showwarning("Peringatan", "Pilih rekaman untuk diperbarui")
kembali
record_id = self.table.dapatkan(yang dipilih[0])[0]
data = (entri sendiri["Level"].dapatkan(), entri sendiri["Bass_1"].dapatkan(), entri sendiri["Trebel_1"].dapatkan(),
entri mandiri["Bass_2"].dapatkan(), entri mandiri["Trebel_2"].dapatkan(), entri mandiri["Bass_3"].dapatkan())
DataMusik.update_gn_biru_record(record_id, data)
messagebox.showinfo("Berhasil", "Rekaman berhasil diperbarui")
self.read_records() # Memperbarui tampilan tabel
def hapus_rekaman(diri):
dipilih = self.table.curselection()
jika tidak dipilih:
messagebox.showwarning("Peringatan", "Pilih rekaman yang akan dihapus")
kembali
record_id = self.table.dapatkan(yang dipilih[0])[0]
DataMusik.delete_gn_biru_record(record_id)
messagebox.showinfo("Berhasil", "Rekaman berhasil dihapus")
self.read_records() # Memperbarui tampilan tabel
jika __nama__ == "__utama__":
akar = Tk()
aplikasi = CRUD_Gn_Biru(root)
akar.loop utama()
Bahasa Indonesia:
Coba eksekusi kembali skrip ini setelah melakukan perbaikan.
Modul DataMusik masih juga tidak ditemukan, apakah penyebabnya karena penggunaan huruf besar atau kecil pada nama file, atau apa penyebab lainnya sehingga modul tidak ditemukan, padahal modul atau file DataMusik.py sudah berada di direktori yang sama dengan file CRUD_Gn_A_Biru.py
Pemakaian huruf besar atau kecil pada nama file memang bisa menjadi salah satu penyebab Python tidak dapat menemukan modul, terutama jika Anda menggunakan sistem operasi yang membedakan antara huruf besar dan kecil, seperti Linux atau macOS. Namun, jika Anda menggunakan Windows, biasanya tidak ada perbedaan antara huruf besar dan kecil dalam nama file.
Ada beberapa hal lain yang dapat menyebabkan masalah ini:
1. **Jalur Kerja Salah:**
Jika Anda menjalankan skrip dari direktori yang berbeda dengan direktori yang berisi skrip Python Anda, Python mungkin tidak dapat menemukan modul.
2. **Kesalahan Penamaan File:**
Pastikan nama file `DataMusik.py` benar dan tidak ada kesalahan penulisan atau karakter yang tersembunyi.
3. **Lingkungan Virtual:**
Jika Anda menggunakan lingkungan virtual, pastikan bahwa modul `DataMusik` ada di dalam lingkungan virtual yang aktif.
Berikut beberapa langkah yang dapat diambil untuk memastikan modul ditemukan:
1. **Cek Jalur Kerja:**
Tambahkan kode berikut di awal skrip Anda untuk memastikan jalur kerja adalah direktori yang benar:
ular piton
impor os
print("Direktori kerja saat ini:", os.getcwd())
Bahasa Indonesia:
2. **Tambahkan Direktori ke `sys.path`:**
Jika modul `DataMusik` masih belum ditemukan, tambahkan direktori yang berisi file tersebut ke `sys.path`:
ular piton
impor sistem
impor os
sys.path.tambahkan(os.path.namadir(os.path.abspath(__file__)))
Bahasa Indonesia:
3. **Cek Nama File dan Lokasi:**
Pastikan file `DataMusik.py` ada di direktori yang sama dengan file skrip Anda dan nama file sudah benar.
Berikut adalah contoh skrip lengkap dengan tambahan untuk memastikan direktori kerja yang benar dan menambahkan direktori ke `sys.path`:
ular piton
impor sistem
impor os
# Tambahkan direktori saat ini ke sys.path
sys.path.tambahkan(os.path.namadir(os.path.abspath(__file__)))
# Cek jalur kerja saat ini
print("Direktori kerja saat ini:", os.getcwd())
import DataMusik # Mengimpor modul untuk mengakses fungsi CRUD
dari tkinter impor *
dari tkinter impor kotak pesan
kelas CRUD_Gn_Biru:
def __init__(diri sendiri, root):
self.akar = akar
self.root.title("CRUD Gn Biru")
diri.akar.geometri("800x400")
sendiri.create_widget()
sendiri.membuat_tabel()
def buat_widget(diri sendiri):
# Labels dan EntryBox untuk memasukkan data
entri sendiri = {}
label = ["Level", "Bass_1", "Trebel_1", "Bass_2", "Trebel_2", "Bass_3"]
untuk i, label di enumerate(label):
Label(self.root, teks=label).grid(baris=i, kolom=0)
self.entri[label] = Entri(self.root)
self.entries[label].grid(baris=i, kolom=1)
# Tombol untuk operasi CRUD
Tombol(self.root, teks="Tambah", perintah=self.add_record).grid(baris=7, kolom=0)
Tombol(self.root, teks="memperbarui", perintah=self.update_record).grid(baris=7, kolom=1)
Tombol(self.root, teks="Hapus", perintah=self.delete_record).grid(baris=7, kolom=2)
Tombol(self.root, teks="Baca", perintah=self.read_records).grid(baris=7, kolom=3)
# Tabel untuk menampilkan data
self.tabel = Listbox(self.akar, lebar=80, tinggi=10)
self.table.grid(baris=8, kolom=0, jarak kolom=4)
def buat_tabel(sendiri):
DataMusik.create_database() # Pastikan tabel dibuat saat inisialisasi
def tambahkan_rekaman(diri):
data = (entri sendiri["Level"].dapatkan(), entri sendiri["Bass_1"].dapatkan(), entri sendiri["Trebel_1"].dapatkan(),
entri mandiri["Bass_2"].dapatkan(), entri mandiri["Trebel_2"].dapatkan(), entri mandiri["Bass_3"].dapatkan())
DataMusik.create_gn_biru_record(data)
messagebox.showinfo("Berhasil", "Data berhasil ditambahkan")
self.read_records() # Memperbarui tampilan tabel
def baca_catatan(diri):
catatan = DataMusik.read_gn_biru_records()
self.tabel.hapus(0, SELESAI)
untuk dicatat dalam arsip:
self.table.insert(AKHIR,catatan)
def perbarui_rekaman(diri):
dipilih = self.table.curselection()
jika tidak dipilih:
messagebox.showwarning("Peringatan", "Pilih rekaman untuk diperbarui")
kembali
record_id = self.table.dapatkan(yang dipilih[0])[0]
data = (entri sendiri["Level"].dapatkan(), entri sendiri["Bass_1"].dapatkan(), entri sendiri["Trebel_1"].dapatkan(),
entri mandiri["Bass_2"].dapatkan(), entri mandiri["Trebel_2"].dapatkan(), entri mandiri["Bass_3"].dapatkan())
DataMusik.update_gn_biru_record(record_id, data)
messagebox.showinfo("Berhasil", "Rekaman berhasil diperbarui")
self.read_records() # Memperbarui tampilan tabel
def hapus_rekaman(diri):
dipilih = self.table.curselection()
jika tidak dipilih:
messagebox.showwarning("Peringatan", "Pilih rekaman yang akan dihapus")
kembali
record_id = self.table.dapatkan(yang dipilih[0])[0]
DataMusik.delete_gn_biru_record(record_id)
messagebox.showinfo("Berhasil", "Rekaman berhasil dihapus")
self.read_records() # Memperbarui tampilan tabel
jika __nama__ == "__utama__":
akar = Tk()
aplikasi = CRUD_Gn_Biru(root)
akar.loop utama()
Bahasa Indonesia:
Pastikan untuk menjalankan skrip ini dari direktori yang sama dengan tempat file `DataMusik.py` berada. Jika masih ada masalah, coba periksa apakah Anda memiliki lingkungan virtual yang diaktifkan dengan benar atau ada konflik nama file di direktori yang sama.
Muncul pesan error':
Database DATAMUSIK.db telah berhasil dibuat dan diisi dengan data.
Traceback (panggilan terakhir terakhir):
File "/storage/emulated/0/NadaPL/KGNS-NPL/CRUD_Gn_Biru.py", baris 80, di <modul>
aplikasi = CRUD_Gn_Biru(root)
^^^^^^^^^^^^^^^^^^
File "/storage/emulated/0/NadaPL/KGNS-NPL/CRUD_Gn_Biru.py", baris 16, di __init__
sendiri.membuat_tabel()
File "/storage/emulated/0/NadaPL/KGNS-NPL/CRUD_Gn_Biru.py", baris 39, di create_table
DataMusik.create_database() # Pastikan tabel dibuat saat inisialisasi
^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: modul 'DataMusik' tidak memiliki atribut 'buat
_data dasar'
Pesan error yang muncul menunjukkan bahwa modul `DataMusik` tidak memiliki atribut atau fungsi `create_database`. Untuk memastikan bahwa fungsi yang diperlukan tersedia, mari kita perbaiki dan perbaiki implementasi dari modul `DataMusik.py`.
Berikut ini adalah struktur yang benar dari `DataMusik.py` yang seharusnya mencakup semua fungsi yang diperlukan:
1. **DataMusik.py**:
ular piton
mengimpor sqlite3
def buat_database():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
# Membuat tabel Gn_Biru jika belum ada
c.eksekusi('''
BUAT TABEL JIKA TIDAK ADA Gn_Biru (
id KUNCI UTAMA INTEGER AUTOINCREMENT,
Tingkat TEKS,
Bass_1 TEKS,
Trebel_1 TEKS,
Bass_2 TEKS,
Trebel_2 TEKS,
Bass_3 TEKS
)
'')
kon.komit()
sambung.tutup()
print("Database DATAMUSIK.db telah berhasil dibuat dan diisi dengan data.")
def buat_gn_biru_catatan(data):
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
c.eksekusi('''
MASUKKAN KE Gn_Biru (Level, Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3)
NILAI (?, ?, ?, ?, ?, ?)
'', datanya)
kon.komit()
sambung.tutup()
def baca_gn_biru_records():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
c.execute('PILIH * DARI Gn_Biru')
catatan = c.fetchall()
sambung.tutup()
mengembalikan catatan
def update_gn_biru_record(id_rekaman, data):
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
c.eksekusi('''
PERBARUAN Gn_Biru
SET Tingkat = ?, Bass_1 = ?, Trebel_1 = ?, Bass_2 = ?, Trebel_2 = ?, Bass_3 = ?
DIMANA id = ?
''', (*data, id_rekaman))
kon.komit()
sambung.tutup()
def delete_gn_biru_record(record_id):
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
c.execute('HAPUS DARI Gn_Biru DI MANA id = ?', (record_id,))
kon.komit()
sambung.tutup()
Bahasa Indonesia:
2. **CRUD_Gn_Biru.py**:
```ular piton
impor sistem
impor os
# Tambahkan direktori saat ini ke sys.path
sys.path.tambahkan(os.path.namadir(os.path.abspath(__file__)))
# Cek jalur kerja saat ini
print("Direktori kerja saat ini:", os.getcwd())
import DataMusik # Mengimpor modul untuk mengakses fungsi CRUD
dari tkinter impor *
dari tkinter impor kotak pesan
kelas CRUD_Gn_Biru:
def __init__(diri sendiri, root):
self.root = akar
self.root.title("CRUD Gn Biru")
diri.akar.geometri("800x400")
sendiri.create_widget()
sendiri.membuat_tabel()
def buat_widget(diri sendiri):
# Labels dan EntryBox untuk memasukkan data
entri sendiri = {}
label = ["Level", "Bass_1", "Trebel_1", "Bass_2", "Trebel_2", "Bass_3"]
untuk i, label di enumerate(label):
Label(self.root, teks=label).grid(baris=i, kolom=0)
self.entries[label] = Entri(self.root)
self.entries[label].grid(baris=i, kolom=1)
# Tombol untuk operasi CRUD
Tombol(self.root, teks="Tambah", perintah=self.add_record).grid(baris=7, kolom=0)
Tombol(self.root, teks="Perbarui", perintah=self.update_record).grid(baris=7, kolom=1)
Tombol(self.root, teks="Hapus", perintah=self.delete_record).grid(baris=7, kolom=2)
Tombol(self.root, teks="Baca", perintah=self.read_records).grid(baris=7, kolom=3)
# Tabel untuk menampilkan data
self.tabel = Listbox(self.akar, lebar=80, tinggi=10)
self.table.grid(baris=8, kolom=0, rentang kolom=4)
def buat_tabel(sendiri):
DataMusik.create_database() # Pastikan tabel dibuat saat inisialisasi
def tambahkan_rekaman(diri):
data = (entri sendiri["Level"].dapatkan(), entri sendiri["Bass_1"].dapatkan(), entri sendiri["Trebel_1"].dapatkan(),
entri mandiri["Bass_2"].dapatkan(), entri mandiri["Trebel_2"].dapatkan(), entri mandiri["Bass_3"].dapatkan())
DataMusik.create_gn_biru_record(data)
messagebox.showinfo("Berhasil", "Data berhasil ditambahkan")
self.read_records() # Memperbarui tampilan tabel
def baca_catatan(diri):
catatan = DataMusik.read_gn_biru_records()
self.tabel.hapus(0, AKHIR)
untuk dicatat dalam arsip:
self.table.insert(AKHIR, catatan)
def perbarui_rekaman(diri):
dipilih = self.table.curselection()
jika tidak dipilih:
messagebox.showwarning("Peringatan", "Pilih rekaman untuk diperbarui")
kembali
record_id = self.table.dapatkan(yang dipilih[0])[0]
data = (entri sendiri["Level"].dapatkan(), entri sendiri["Bass_1"].dapatkan(), entri sendiri["Trebel_1"].dapatkan(),
entri mandiri["Bass_2"].dapatkan(), entri mandiri["Trebel_2"].dapatkan(), entri mandiri["Bass_3"].dapatkan())
DataMusik.update_gn_biru_record(record_id, data)
messagebox.showinfo("Berhasil", "Rekaman berhasil diperbarui")
self.read_records() # Memperbarui tampilan tabel
def hapus_rekaman(diri):
dipilih = self.table.curselection()
jika tidak dipilih:
messagebox.showwarning("Peringatan", "Pilih rekaman yang akan dihapus")
kembali
record_id = self.table.dapatkan(yang dipilih[0])[0]
DataMusik.delete_gn_biru_record(record_id)
messagebox.showinfo("Berhasil", "Rekaman berhasil dihapus")
self.read_records() # Memperbarui tampilan tabel
jika __nama__ == "__utama__":
akar = Tk()
aplikasi = CRUD_Gn_Biru(root)
akar.loop utama()
Bahasa Indonesia:
Pastikan kode `DataMusik.py` sesuai dengan fungsi yang diperlukan dan memiliki fungsi `create_database`. Jalankan kembali skrip `CRUD_Gn_Biru.py` setelah memastikan semuanya sudah benar.
Maksud saya, Tolong sesuaikan kode isi file DataMusik.py tersebut dari setiap elemen dan fungsi yang terkait dengan kode isi file: CRUD_Gn_Biru.py berikut ini, sehingga applikasi dapat berjalan dengan baik dan tanpa error. Berikut ini kode isi file CRUD_Gn_Biru.py:
impor tkinter sebagai tk
dari tkinter impor ttk
impor sqlite3
# Inisialisasi jendela utama
akar = tk.Tk()
akar.geometri("690x1390")
root.title("Arah Arus Musik Gn_Biru")
rangka_utama = tk.Rangka(akar)
main_frame.pack(isi=tk.BOTH, perluas=1)
kanvas = tk.Kanvas(bingkai_utama)
kanvas.paket(sisi=tk.KIRI, isi=tk.KEDUANYA, perluas=1)
scrollbar_y = ttk.Scrollbar(bingkai_utama, orientasi=tk.VERTIKAL, perintah=kanvas.yview)
scrollbar_y.pack(sisi=tk.KANAN, isi=tk.Y)
scrollbar_x = ttk.Scrollbar(akar, orientasi=tk.HORIZONTAL, perintah=kanvas.xview)
scrollbar_x.pack(sisi=tk.BOTTOM, isi=tk.X)
kanvas.konfigurasi(yscrollcommand=scrollbar_y.set, xscrollcommand=scrollbar_x.set)
canvas.bind('<Configure>', lambda dan: canvas.configure(scrollregion=canvas.bbox("all")))
bingkai_konten = tk.Bingkai(kanvas)
kanvas.buat_jendela((0, 0), jendela=bingkai_konten, jangkar="barat_laut")
data_frame = tk.Frame(bingkai_konten)
data_frame.grid(baris=0, kolom=0, padx=10, pady=10)
def buat_database():
koneksi = sqlite3.connect("DATAMUSIK.db")
c = kon.kursor()
c.execute('''BUAT TABEL JIKA TIDAK ADA Gn_Biru
(ID INTEGER KUNCI PRIMER,
Tingkat TEKS,
Bass_1 NYATA,
Trebel_1 NYATA,
Bass_2 NYATA,
Trebel_2 NYATA,
Bass_3 NYATA)''')
kon.komit()
sambung.tutup()
# Fungsi CRUD untuk Gn_Biru
def buat_gn_biru_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("MASUKKAN KE Gn_Biru (ID, Tingkat, Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3) NILAI (?, ?, ?, ?, ?, ?, ?)",
(ID_entri.dapatkan(), Level_entri.dapatkan(), Bass_1_entri.dapatkan(), Trebel_1_entri.dapatkan(), Bass_2_entri.dapatkan(), Trebel_2_entri.dapatkan(), Bass_3_entri.dapatkan()))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan memasukkan rekaman: {e}")
sambung.tutup()
hapus_entri_gn_biru()
baca_gn_biru_records()
def baca_gn_biru_records():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("PILIH * DARI Gn_Biru")
catatan = c.fetchall()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat membaca catatan: {e}")
catatan = []
sambung.tutup()
untuk widget di data_frame_gn_biru.winfo_children():
widget.hancurkan()
# Menampilkan data
untuk indeks, rekam dalam enumerate(records):
untuk col, nilai dalam enumerate(record):
tk.Label(data_frame_gn_biru, teks=nilai, bg="#e0e0e0").grid(baris=indeks+1, kolom=kolom, padx=5, pady=5)
# Menampilkan kolom header
kolom = ["ID", "Level", "Bass_1", "Trebel_1", "Bass_2", "Trebel_2", "Bass_3"]
untuk col_index, col_name di enumerate(kolom):
tk.Label(data_frame_gn_biru, teks=nama_kolom, font=('tebal')).grid(baris=0, kolom=indeks_kolom, padx=5, pady=5)
perbarui_gn_biru_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("PERBARUI Gn_Biru SET Level = ?, Bass_1 = ?, Trebel_1 = ?, Bass_2 = ?, Trebel_2 = ?, Bass_3 = ? DI MANA ID = ?",
(Level_entri.dapatkan(), Bass_1_entri.dapatkan(), Trebel_1_entri.dapatkan(), Bass_2_entri.dapatkan(), Trebel_2_entri.dapatkan(), Bass_3_entri.dapatkan()))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat memperbarui rekaman: {e}")
sambung.tutup()
hapus_entri_gn_biru()
baca_gn_biru_records()
def hapus_gn_biru_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("HAPUS DARI Gn_Biru DI MANA ID = ?", (ID_entry.get(),))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat menghapus rekaman: {e}")
sambung.tutup()
hapus_entri_gn_biru()
baca_gn_biru_records()
def clear_entries_gn_biru():
ID_entri.hapus(0, tk.AKHIR)
Level_entri.hapus(0, tk.AKHIR)
Bass_1_entri.hapus(0, tk.AKHIR)
Trebel_1_entri.hapus(0, tk.AKHIR)
Bass_2_entri.hapus(0, tk.AKHIR)
Trebel_2_entri.hapus(0, tk.AKHIR)
Bass_3_entri.hapus(0, tk.AKHIR)
# Fungsi setup_default_mode
def setup_default_mode(mode):
jika modus == 1:
baca_gn_biru_records()
# Entri untuk Gn_Biru
tk.Label(data_frame, teks="ID \n Gn_Biru").grid(baris=0, kolom=0, padx=5, pady=5)
ID_1_entri = tk.Entri(bingkai_data, lebar=4)
ID_1_entry.grid(baris=1, kolom=0, padx=5, pady=5)
ID_2_entri = tk.Entri(bingkai_data, lebar=4)
ID_2_entry.grid(baris=2, kolom=0, padx=5, pady=5)
ID_3_entri = tk.Entri(bingkai_data, lebar=4)
ID_3_entry.grid(baris=3, kolom=0, padx=5, pady=5)
tk.Label(data_frame, teks="Level").grid(baris=0, kolom=1, padx=5, pady=5)
Level_1_entri = tk.Entri(bingkai_data, lebar=6)
Level_1_entry.grid(baris=1, kolom=1, padx=5, pady=5)
Level_1_entry.insert(0, "Satu") # Teks default untuk baris 1
Level_2_entri = tk.Entri(bingkai_data, lebar=6)
Level_2_entry.grid(baris=2, kolom=1, padx=5, pady=5)
Level_2_entry.insert(0, "Dua") # Teks default untuk baris 2
Level_3_entri = tk.Entri(bingkai_data, lebar=6)
Level_3_entry.grid(baris=3, kolom=1, padx=5, pady=5)
Level_3_entry.insert(0, "Tiga") # Teks default untuk baris 3
tk.Label(data_frame, teks="Bass_1").grid(baris=0, kolom=2, padx=5, pady=5)
Bass_1_1_entri = tk.Entri(bingkai_data)
Bass_1_1_entry.grid(baris=1, kolom=2, padx=5, pady=5)
Bass_1_2_entri = tk.Entri(bingkai_data)
Bass_1_2_entry.grid(baris=2, kolom=2, padx=5, pady=5)
Bass_1_3_entri = tk.Entri(bingkai_data)
Bass_1_3_entry.grid(baris=3, kolom=2, padx=5, pady=5)
tk.Label(data_frame, teks="Trebel_1").grid(baris=0, kolom=3, padx=5, pady=5)
Trebel_1_1_entri = tk.Entri(bingkai_data)
Trebel_1_1_entry.grid(baris=1, kolom=3, padx=5, pady=5)
Trebel_1_2_entri = tk.Entri(bingkai_data)
Trebel_1_2_entry.grid(baris=2, kolom=3, padx=5, pady=5)
Trebel_1_3_entri = tk.Entri(bingkai_data)
Trebel_1_3_entry.grid(baris=3, kolom=3, padx=5, pady=5)
tk.Label(data_frame, teks="Bass_2").grid(baris=0, kolom=4, padx=5, pady=5)
Bass_2_1_entri = tk.Entri(bingkai_data)
Bass_2_1_entry.grid(baris=1, kolom=4, padx=5, pady=5)
Bass_2_2_entri = tk.Entri(bingkai_data)
Bass_2_2_entry.grid(baris=2, kolom=4, padx=5, pady=5)
Bass_2_3_entri = tk.Entri(bingkai_data)
Bass_2_3_entry.grid(baris=3, kolom=4, padx=5, pady=5)
tk.Label(data_frame, teks="Trebel_2").grid(baris=0, kolom=5, padx=5, pady=5)
Trebel_2_1_entri = tk.Entri(bingkai_data)
Trebel_2_1_entry.grid(baris=1, kolom=5, padx=5, pady=5)
Trebel_2_2_entri = tk.Entri(bingkai_data)
Trebel_2_2_entry.grid(baris=2, kolom=5, padx=5, pady=5)
Trebel_2_3_entri = tk.Entri(bingkai_data)
Trebel_2_3_entry.grid(baris=3, kolom=5, padx=5, pady=5)
tk.Label(data_frame, teks="Bass_3").grid(baris=0, kolom=6, padx=5, pady=5)
Bass_3_1_entri = tk.Entri(bingkai_data)
Bass_3_1_entry.grid(baris=1, kolom=6, padx=5, pady=5)
Bass_3_2_entri = tk.Entri(bingkai_data)
Bass_3_2_entry.grid(baris=2, kolom=6, padx=5, pady=5)
Bass_3_3_entri = tk.Entri(bingkai_data)
Bass_3_3_entry.grid(baris=3, kolom=6, padx=5, pady=5)
# Frame untuk Gn_Biru CRUD
crud_frame_gn_biru = tk.Frame(konten_frame)
crud_frame_gn_biru.grid(baris=1, kolom=0, padx=10, pady=10)
# Tombol-tombol untuk CRUD
buat_tombol = tk.Button(crud_frame_gn_biru, teks="Buat", perintah=buat_rekaman_gn_biru)
buat_tombol.grid(baris=7, kolom=0, padx=5, pady=5)
baca_tombol = tk.Button(crud_frame_gn_biru, text="Baca", perintah=baca_catatan_gn_biru)
baca_tombol.grid(baris=7, kolom=1, padx=5, pady=5)
update_button = tk.Button(crud_frame_gn_biru, text="Perbarui", command=perbarui_gn_biru_record)
update_button.grid(baris=8, kolom=0, padx=5, pady=5)
hapus_tombol = tk.Button(crud_frame_gn_biru, text="Hapus", perintah=hapus_catatan_gn_biru)
hapus_tombol.grid(baris=8, kolom=1, padx=5, pady=5)
# Bingkai untuk menampilkan data Gn_Biru
data_id
ame_gn_biru = tk.Frame(bingkai_konten)
data_frame_gn_biru.grid(baris=2, kolom=0, padx=10, pady=10)
# Inisialisasi database dan membaca data awal
membuat_database()
pengaturan_mode_default(1)
akar.loop utama()
Mari kita sesuaikan isi file DataMusik.py agar sesuai dengan kode CRUD_Gn_Biru.py yang Anda berikan.File DataMusik.py:import sqlite3
def buat_database():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
c.execute('''BUAT TABEL JIKA TIDAK ADA Gn_Biru
(ID INTEGER KUNCI PRIMER,
Tingkat TEKS,
Bass_1 NYATA,
Trebel_1 NYATA,
Bass_2 NYATA,
Trebel_2 NYATA,
Bass_3 NYATA)''')
kon.komit()
sambung.tutup()
print("Database DATAMUSIK.db telah berhasil dibuat dan diisi dengan data.")
def buat_gn_biru_catatan(data):
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("MASUKKAN KE Gn_Biru (ID, Tingkat, Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3) NILAI (?, ?, ?, ?, ?, ?, ?)", data)
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan memasukkan rekaman: {e}")
sambung.tutup()
def baca_gn_biru_records():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("PILIH * DARI Gn_Biru")
catatan = c.fetchall()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat membaca catatan: {e}")
catatan = []
sambung.tutup()
mengembalikan catatan
def update_gn_biru_catatan(data):
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("PERBARUI Gn_Biru SET Level = ?, Bass_1 = ?, Trebel_1 = ?, Bass_2 = ?, Trebel_2 = ?, Bass_3 = ? DI MANA ID = ?", data)
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat memperbarui rekaman: {e}")
sambung.tutup()
def delete_gn_biru_record(record_id):
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("HAPUS DARI Gn_Biru DI MANA ID = ?", (id_rekaman,))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat menghapus rekaman: {e}")
conn.close()File CRUD_Gn_Biru.py yang dimodifikasi untuk menggunakan DataMusik.py:
Untuk menyusun ulang kode `DataMusik.py` agar dapat berjalan dengan baik dan sesuai dengan struktur yang terdapat pada `CRUD_Gn_Biru.py`, berikut adalah kode yang telah disesuaikan:
```ular piton
impor tkinter sebagai tk
dari tkinter impor ttk
impor sqlite3
# Inisialisasi jendela utama
akar = tk.Tk()
akar.geometri("690x1390")
root.title("Arah Arus Musik Data")
rangka_utama = tk.Rangka(akar)
main_frame.pack(isi=tk.BOTH, perluas=1)
kanvas = tk.Kanvas(bingkai_utama)
kanvas.paket(sisi=tk.KIRI, isi=tk.KEDUANYA, perluas=1)
scrollbar_y = ttk.Scrollbar(bingkai_utama, orientasi=tk.VERTIKAL, perintah=kanvas.yview)
scrollbar_y.pack(sisi=tk.KANAN, isi=tk.Y)
scrollbar_x = ttk.Scrollbar(akar, orientasi=tk.HORIZONTAL, perintah=kanvas.xview)
scrollbar_x.pack(sisi=tk.BOTTOM, isi=tk.X)
kanvas.konfigurasi(yscrollcommand=scrollbar_y.set, xscrollcommand=scrollbar_x.set)
canvas.bind('<Configure>', lambda dan: canvas.configure(scrollregion=canvas.bbox("all")))
bingkai_konten = tk.Bingkai(kanvas)
kanvas.buat_jendela((0, 0), jendela=bingkai_konten, jangkar="barat_laut")
data_frame = tk.Frame(bingkai_konten)
data_frame.grid(baris=0, kolom=0, padx=10, pady=10)
def buat_database():
koneksi = sqlite3.connect("DATAMUSIK.db")
c = kon.kursor()
c.execute('''BUAT TABEL JIKA TIDAK ADA Gn_A_Trebel
(ID INTEGER KUNCI PRIMER,
Tingkat TEKS,
Bass_1 NYATA,
Trebel_1 NYATA,
Bass_2 NYATA,
Trebel_2 NYATA,
Bass_3 NYATA)''')
kon.komit()
sambung.tutup()
# Fungsi CRUD untuk Gn_A_Trebel
buat_gn_a_trebel_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("MASUKKAN KE Gn_A_Trebel (ID, Tingkat, Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3) NILAI (?, ?, ?, ?, ?, ?, ?)",
(ID_entri.dapatkan(), Level_entri.dapatkan(), Bass_1_entri.dapatkan(), Trebel_1_entri.dapatkan(), Bass_2_entri.dapatkan(), Trebel_2_entri.dapatkan(), Bass_3_entri.dapatkan()))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan memasukkan rekaman: {e}")
sambung.tutup()
hapus_entri_gn_a_trebel()
baca_gn_a_trebel_records()
def baca_gn_a_trebel_records():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("PILIH * DARI Gn_A_Trebel")
catatan = c.fetchall()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat membaca catatan: {e}")
catatan = []
sambung.tutup()
untuk widget di data_frame_gn_a_trebel.winfo_children():
widget.hancurkan()
# Menampilkan data
untuk indeks, rekam dalam enumerate(records):
untuk col, nilai dalam enumerate(record):
tk.Label(data_frame_gn_a_trebel, teks=nilai, bg="#e0e0e0").grid(baris=indeks+1, kolom=kolom, padx=5, pady=5)
# Menampilkan kolom header
kolom = ["ID", "Level", "Bass_1", "Trebel_1", "Bass_2", "Trebel_2", "Bass_3"]
untuk col_index, col_name di enumerate(kolom):
tk.Label(data_frame_gn_a_trebel, teks=nama_kolom, font=('tebal')).grid(baris=0, kolom=indeks_kolom, padx=5, pady=5)
perbarui_gn_a_trebel_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("PERBARUI Gn_A_Trebel SET Level = ?, Bass_1 = ?, Trebel_1 = ?, Bass_2 = ?, Trebel_2 = ?, Bass_3 = ? DI MANA ID = ?",
(Level_entri.dapatkan(), Bass_1_entri.dapatkan(), Trebel_1_entri.dapatkan(), Bass_2_entri.dapatkan(), Trebel_2_entri.dapatkan(), Bass_3_entri.dapatkan()))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat memperbarui rekaman: {e}")
sambung.tutup()
hapus_entri_gn_a_trebel()
baca_gn_a_trebel_records()
hapus_gn_a_trebel_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("HAPUS DARI Gn_A_Trebel DI MANA ID = ?", (entri_ID.get(),))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat menghapus rekaman: {e}")
sambung.tutup()
hapus_entri_gn_a_trebel()
baca_gn_a_trebel_records()
jelaskan entri_gn_a_trebel():
ID_entri.hapus(0, tk.AKHIR)
Level_entri.hapus(0, tk.AKHIR)
Bass_1_entri.hapus(0, tk.AKHIR)
Trebel_1_entri.hapus(0, tk.AKHIR)
Bass_2_entri.hapus(0, tk.AKHIR)
Trebel_2_entri.hapus(0, tk.AKHIR)
Bass_3_entri.hapus(0, tk.AKHIR)
# Fungsi setup_default_mode
def setup_default_mode(mode):
jika modus == 1:
baca_gn_a_trebel_records()
# Entri untuk Gn_A_Trebel
tk.Label(data_frame, teks="ID \n Gn_A_Trebel").grid(baris=0, kolom=0, padx=5, pady=5)
ID_entri = tk.Entri(bingkai_data, lebar=4)
ID_entry.grid(baris=1, kolom=0, padx=5, pady=5)
tk.Label(data_frame, teks="Level").grid(baris=0, kolom=1, padx=5, pady=5)
Level_entri = tk.Entri(bingkai_data, lebar=6)
Level_entry.grid(baris=1, kolom=1, padx=5, pady=5)
tk.Label(data_frame, teks="Bass_1").grid(baris=0, kolom=2, padx=5, pady=5)
Bass_1_entri = tk.Entri(bingkai_data)
Bass_1_entry.grid(baris=1, kolom=2, padx=5, pady=5)
tk.Label(data_frame, teks="Trebel_1").grid(baris=0, kolom=3, padx=5, pady=5)
Trebel_1_entri = tk.Entri(bingkai_data)
Trebel_1_entry.grid(baris=1, kolom=3, padx=5, pady=5)
tk.Label(data_frame, teks="Bass_2").grid(baris=0, kolom=4, padx=5, pady=5)
Bass_2_entri = tk.Entri(bingkai_data)
Bass_2_entry.grid(baris=1, kolom=4, padx=5, pady=5)
tk.Label(data_frame, teks="Trebel_2").grid(baris=0, kolom=5, padx=5, pady=5)
Trebel_2_entri = tk.Entri(bingkai_data)
Trebel_2_entry.grid(baris=1, kolom=5, padx=5, pady=5)
tk.Label(data_frame, teks="Bass_3").grid(baris=0, kolom=6, padx=5, pady=5)
Bass_3_entri = tk.Entri(bingkai_data)
Bass_3_entry.grid(baris=1, kolom=6, padx=5, pady=5)
# Bingkai untuk Gn_A_Trebel CRUD
crud_frame_gn_a_trebel = tk.Frame(bingkai_konten)
crud_frame_gn_a_trebel.grid(baris=1, kolom=0, padx=10, pady=10)
# Tombol-tombol untuk CRUD
buat_tombol = tk.Tombol(crud_frame_gn_a_trebel, teks="Buat", perintah=buat_gn_a_trebel_rekaman)
buat_tombol.grid(baris=7, kolom=0, padx=5, pady=5)
baca_tombol = tk.Tombol(crud_frame_gn_a_trebel, teks="Baca", perintah=baca_catatan_gn_a_trebel)
baca_tombol.grid(baris=7, kolom=1, padx=5, pady=5)
update_button = tk.Button(crud_frame_gn_a_trebel, text="Perbarui", command=perbarui_gn_a_trebel_record)
update_button.grid(baris=8, kolom=0, padx=5, pady=5)
hapus_tombol = tk.Button(crud_frame_gn_a_trebel, teks="Hapus", perintah=hapus_gn_a_trebel_rekaman)
hapus_tombol.grid(baris=8, kolom=1, padx=5, pady=5)
# Bingkai untuk menampilkan data Gn_A_Trebel
data_frame_gn_a_trebel = tk.Frame(bingkai_konten)
data_frame_gn_a_trebel.grid(baris=2, kolom=0, padx=10, pady=10)
# Inisialisasi database dan membaca data awal
membuat_database()
pengaturan_mode_default(1)
akar.loop utama()
Bahasa Indonesia:
Penyesuaian dilakukan agar nama tabel, field, dan fungsi yang ada pada `CRUD_Gn_Biru.py` sesuai dengan tabel dan field yang digunakan pada `Gn_A_Trebel`. Fungsi-fungsi CRUD disesuaikan agar bekerja dengan tabel `Gn_A_Trebel`. Silakan coba kode ini, dan jika ada error atau masalah lainnya, silakan beri tahu saya.
Maunya saya EntryBox untuk inputan data seharusnya ada 3 baris 7 kolom termasuk kolom ID, sebab 3 baris demikian nantinya ke depannya ada maksudnya untuk saat penentuan progres nada musik mode Naik atau Turun untuk memilih kumpulan nada terpilih dari data masing-masing baris yang ada di yang kolom sama
Baiklah, saya akan menambahkan tiga baris input data dengan tujuh kolom yang mencakup kolom ID, Level, Bass_1, Trebel_1, Bass_2, Trebel_2, dan Bass_3. Berikut adalah kode CRUD_Gn_Biru.py yang telah disesuaikan:
Berikut adalah modifikasi dan penyelesaian kode `CRUD_Gn_Biru.py` dengan penyesuaian sesuai dengan `DataMusik.py` dan menambahkan fitur untuk mengelola CRUD pada tabel `Gn_Biru` dengan tiga baris input data dan tujuh kolom:
```ular piton
impor tkinter sebagai tk
dari tkinter impor ttk
impor sqlite3
# Inisialisasi jendela utama
akar = tk.Tk()
akar.geometri("690x1390")
root.title("Arah Arus Musik Data - Gn_Biru")
rangka_utama = tk.Rangka(akar)
main_frame.pack(isi=tk.BOTH, perluas=1)
kanvas = tk.Kanvas(bingkai_utama)
kanvas.paket(sisi=tk.KIRI, isi=tk.KEDUANYA, perluas=1)
scrollbar_y = ttk.Scrollbar(bingkai_utama, orientasi=tk.VERTIKAL, perintah=kanvas.yview)
scrollbar_y.pack(sisi=tk.KANAN, isi=tk.Y)
scrollbar_x = ttk.Scrollbar(akar, orientasi=tk.HORIZONTAL, perintah=kanvas.xview)
scrollbar_x.pack(sisi=tk.BOTTOM, isi=tk.X)
kanvas.konfigurasi(yscrollcommand=scrollbar_y.set, xscrollcommand=scrollbar_x.set)
canvas.bind('<Configure>', lambda dan: canvas.configure(scrollregion=canvas.bbox("all")))
bingkai_konten = tk.Bingkai(kanvas)
kanvas.buat_jendela((0, 0), jendela=bingkai_konten, jangkar="barat_laut")
data_frame = tk.Frame(bingkai_konten)
data_frame.grid(baris=0, kolom=0, padx=10, pady=10)
def buat_database():
koneksi = sqlite3.connect("DATAMUSIK.db")
c = kon.kursor()
c.execute('''BUAT TABEL JIKA TIDAK ADA Gn_Biru
(ID INTEGER KUNCI PRIMER,
Tingkat TEKS,
Bass_1 NYATA,
Trebel_1 NYATA,
Bass_2 NYATA,
Trebel_2 NYATA,
Bass_3 NYATA)''')
kon.komit()
sambung.tutup()
# Fungsi CRUD untuk Gn_Biru
def buat_gn_biru_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("MASUKKAN KE Gn_Biru (ID, Tingkat, Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3) NILAI (?, ?, ?, ?, ?, ?, ?)",
(ID_entri.dapatkan(), Level_entri.dapatkan(), Bass_1_entri.dapatkan(), Trebel_1_entri.dapatkan(), Bass_2_entri.dapatkan(), Trebel_2_entri.dapatkan(), Bass_3_entri.dapatkan()))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan memasukkan rekaman: {e}")
sambung.tutup()
hapus_entri_gn_biru()
baca_gn_biru_records()
def baca_gn_biru_records():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("PILIH * DARI Gn_Biru")
catatan = c.fetchall()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat membaca catatan: {e}")
catatan = []
sambung.tutup()
untuk widget di data_frame_gn_biru.winfo_children():
widget.hancurkan()
# Menampilkan data
untuk indeks, rekam dalam enumerate(records):
untuk col, nilai dalam enumerate(record):
tk.Label(data_frame_gn_biru, teks=nilai, bg="#e0e0e0").grid(baris=indeks+1, kolom=kolom, padx=5, pady=5)
# Menampilkan kolom header
kolom = ["ID", "Level", "Bass_1", "Trebel_1", "Bass_2", "Trebel_2", "Bass_3"]
untuk col_index, col_name di enumerate(kolom):
tk.Label(data_frame_gn_biru, teks=nama_kolom, font=('tebal')).grid(baris=0, kolom=indeks_kolom, padx=5, pady=5)
perbarui_gn_biru_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("PERBARUI Gn_Biru SET Level = ?, Bass_1 = ?, Trebel_1 = ?, Bass_2 = ?, Trebel_2 = ?, Bass_3 = ? DI MANA ID = ?",
(Level_entri.dapatkan(), Bass_1_entri.dapatkan(), Trebel_1_entri.dapatkan(), Bass_2_entri.dapatkan(), Trebel_2_entri.dapatkan(), Bass_3_entri.dapatkan()))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat memperbarui rekaman: {e}")
sambung.tutup()
hapus_entri_gn_biru()
baca_gn_biru_records()
def hapus_gn_biru_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("HAPUS DARI Gn_Biru DI MANA ID = ?", (ID_entry.get(),))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat menghapus rekaman: {e}")
sambung.tutup()
hapus_entri_gn_biru()
baca_gn_biru_records()
def clear_entries_gn_biru():
ID_entri.hapus(0, tk.AKHIR)
Level_entri.hapus(0, tk.AKHIR)
Bass_1_entri.hapus(0, tk.AKHIR)
Trebel_1_entri.hapus(0, tk.AKHIR)
Bass_2_entri.hapus(0, tk.AKHIR)
Trebel_2_entri.hapus(0, tk.AKHIR)
Bass_3_entri.hapus(0, tk.AKHIR)
# Fungsi setup_default_mode
def setup_default_mode(mode):
jika modus == 1:
baca_gn_biru_records()
# Entri untuk Gn_Biru
tk.Label(data_frame, teks="ID \n Gn_Biru").grid(baris=0, kolom=0, padx=5, pady=5)
ID_1_entri = tk.Entri(bingkai_data, lebar=4)
ID_1_entry.grid(baris=1, kolom=0, padx=5, pady=5)
ID_2_entri = tk.Entri(bingkai_data, lebar=4)
ID_2_entry.grid(baris=2, kolom=0, padx=5, pady=5)
ID_3_entri = tk.Entri(bingkai_data, lebar=4)
ID_3_entry.grid(baris=3, kolom=0, padx=5, pady=5)
tk.Label(data_frame, teks="Level").grid(baris=0, kolom=1, padx=5, pady=5)
Level_1_entri = tk.Entri(bingkai_data, lebar=6)
Level_1_entry.grid(baris=1, kolom=1, padx=5, pady=5)
Level_1_entry.insert(0, "Satu") # Teks default untuk baris 1
Level_2_entri = tk.Entri(bingkai_data, lebar=6)
Level_2_entry.grid(baris=2, kolom=1, padx=5, pady=5)
Level_2_entry.insert(0, "Dua") # Teks default untuk baris 2
Level_3_entri = tk.Entri(bingkai_data, lebar=6)
Level_3_entry.grid(baris=3, kolom=1, padx=5, pady=5)
Level_3_entry.insert(0, "Tiga") # Teks default untuk baris 3
tk.Label(data_frame, teks="Bass_1").grid(baris=0, kolom=2, padx=5, pady=5)
Bass_1_1_entri = tk.Entri(bingkai_data)
Bass_1_1_entry.grid(baris=1, kolom=2, padx=5, pady=5)
Bass_1_2_entri = tk.Entri(bingkai_data)
Bass_1_2_entry.grid(baris=2, kolom=2, padx=5, pady=5)
Bass_1_3_entri = tk.Entri(bingkai_data)
Bass_1_3_entry.grid(baris=3, kolom=2, padx=5, pady=5)
tk.Label(data_frame, teks="Trebel_1").grid(baris=0, kolom=3, padx=5, pady=5)
Trebel_1_1_entri = tk.Entri(bingkai_data)
Trebel_1_1_entry.grid(baris=1, kolom=3, padx=5, pady=5)
Trebel_1_2_entri = tk.Entri(bingkai_data)
Trebel_1_2_entry.grid(baris=2, kolom=3, padx=5, pady=5)
Trebel_1_3_entri = tk.Entri(bingkai_data)
Trebel_1_3_entry.grid(baris=3, kolom=3, padx=5, pady=5)
tk.Label(data_frame, teks="Bass_2").grid(baris=0, kolom=4, padx=5, pady=5)
Bass_2_1_entri = tk.Entri(bingkai_data)
Bass_2_1_entry.grid(baris=1, kolom=4, padx=5, pady=5)
Bass_2_2_entri = tk.Entri(bingkai_data)
Bass_2_2_entry.grid(baris=2, kolom=4, padx=5, pady=5)
Bass_2_3_entri = tk.Entri(bingkai_data)
Bass_2_3_entry.grid(baris=3, kolom=4, padx=5, pady=5)
tk.Label(data_frame, teks="Trebel_2").grid(baris=0, kolom=5, padx=5, pady=5)
Trebel_2_1_entri = tk.Entri(bingkai_data)
Trebel_2_1_entry.grid(baris=1, kolom=5, padx=5, pady=5)
Trebel_2_2_entri = tk.Entri(bingkai_data)
Trebel_2_2_entry.grid(baris=2, kolom=5, padx=5, pady=5)
Trebel_2_3_entri = tk.Entri(bingkai_data)
Trebel_2_3_entri.grid(baris=3,
Lanjutkan kodenya hingga selesai dengan lengkap dan tanpa error
Berikut adalah kelanjutan kode `CRUD_Gn_Biru.py` hingga selesai:
```ular piton
tk.Label(data_frame, teks="Trebel_2").grid(baris=0, kolom=5, padx=5, pady=5)
Trebel_2_1_entri = tk.Entri(bingkai_data)
Trebel_2_1_entry.grid(baris=1, kolom=5, padx=5, pady=5)
Trebel_2_2_entri = tk.Entri(bingkai_data)
Trebel_2_2_entry.grid(baris=2, kolom=5, padx=5, pady=5)
Trebel_2_3_entri = tk.Entri(bingkai_data)
Trebel_2_3_entry.grid(baris=3, kolom=5, padx=5, pady=5)
tk.Label(data_frame, teks="Bass_3").grid(baris=0, kolom=6, padx=5, pady=5)
Bass_3_1_entri = tk.Entri(bingkai_data)
Bass_3_1_entry.grid(baris=1, kolom=6, padx=5, pady=5)
Bass_3_2_entri = tk.Entri(bingkai_data)
Bass_3_2_entry.grid(baris=2, kolom=6, padx=5, pady=5)
Bass_3_3_entri = tk.Entri(bingkai_data)
Bass_3_3_entry.grid(baris=3, kolom=6, padx=5, pady=5)
# Frame untuk menampilkan data dari database
data_frame_gn_biru = tk.Frame(frame_konten)
data_frame_gn_biru.grid(baris=1, kolom=0, padx=10, pady=10)
# Tombol untuk operasi CRUD
tombol_bingkai = tk.Bingkai(bingkai_konten)
tombol_bingkai.kotak(baris=2, kolom=0, padx=10, pady=10)
buat_tombol = tk.Tombol(bingkai_tombol, teks="Buat", perintah=buat_rekaman_gn_biru)
buat_tombol.grid(baris=0, kolom=0, padx=5, pady=5)
read_button = tk.Button(bingkai_tombol, teks="Baca", perintah=baca_catatan_gn_biru)
baca_tombol.grid(baris=0, kolom=1, padx=5, pady=5)
update_button = tk.Button(button_frame, text="Perbarui", command=perbarui_gn_biru_record)
update_button.grid(baris=0, kolom=2, padx=5, pady=5)
hapus_tombol = tk.Button(bingkai_tombol, teks="Hapus", perintah=hapus_rekaman_gn_biru)
hapus_tombol.grid(baris=0, kolom=3, padx=5, pady=5)
clear_button = tk.Button(button_frame, text="Bersihkan", command=hapus_entri_gn_biru)
clear_button.grid(baris=0, kolom=4, padx=5, pady=5)
# Fungsi untuk menampilkan data pada aplikasi saat pertama kali dijalankan
pengaturan_mode_default(1)
# Fungsi untuk membuat tabel jika belum ada
membuat_database()
akar.loop utama()
Bahasa Indonesia:
Penjelasan:
1. **Entry Fields**: Menyediakan tiga baris input data dan tujuh kolom termasuk ID, Level, Bass_1, Trebel_1, Bass_2, Trebel_2, dan Bass_3.
2. **Fungsi CRUD**: Fungsi untuk membuat (`create_gn_biru_record`), membaca (`read_gn_biru_records`), memperbarui (`update_gn_biru_record`), dan menghapus (`delete_gn_biru_record`) data dari tabel `Gn_Biru`.
3. **Clear Entries**: Fungsi untuk menghapus data dari entri (`clear_entries_gn_biru`).
4. **Inisialisasi Basis Data**: Membuat basis data dan tabel jika belum ada (`create_database`).
5. **UI Elements**: Menambahkan elemen UI seperti tombol untuk melakukan operasi CRUD.
Dengan kode ini, Anda dapat mengelola tabel `Gn_Biru` dengan operasi CRUD, sama seperti `Gn_A_Trebel`.
Ketika kode dijalankan, fungsi CRUD setiap tombol belum berfungsi dengan baik, muncul pesan error':
Terjadi kesalahan saat memperbarui rekaman: nama 'Level_entry' tidak ditentukan
Pengecualian dalam panggilan balik Tkinter
Traceback (panggilan terakhir terakhir):
Berkas "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/tkinter/__init__.py", baris 1948, di __call__
kembalikan self.func(*args)
^^^^^^^^^^^^^^^^
File "/storage/emulated/0/NadaPL/KGNS-NPL/CRUD_Gn_Biru.py", baris 92, di update_gn_biru_record
hapus_entri_gn_biru()
File "/storage/emulated/0/NadaPL/KGNS-NPL/CRUD_Gn_Biru.py", baris 108, di clear_entries_gn_biru
ID_entri.hapus(0, tk.AKHIR)
^^^^^^^^
NameError: nama 'ID_entry' tidak ditentukan
Terjadi kesalahan saat memperbarui rekaman: nama 'Level_entry' tidak ditentukan
Pengecualian dalam panggilan balik Tkinter
Traceback (panggilan terakhir terakhir):
Berkas "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/tkinter/__init__.py", baris 1948, di __call__
kembalikan self.func(*args)
^^^^^^^^^^^^^^^^
File "/storage/emulated/0/NadaPL/KGNS-NPL/CRUD_Gn_Biru.py", baris 92, di update_gn_biru_record
hapus_entri_gn_biru()
File "/storage/emulated/0/NadaPL/KGNS-NPL/CRUD_Gn_Biru.py", baris 108, di clear_entries_gn_biru
ID_entri.hapus(0, tk.AKHIR)
^^^^^^^^
NameError: nama 'ID_entry' tidak ditentukan
Terjadi kesalahan saat memperbarui rekaman: nama 'Level_entry' tidak ditentukan
Pengecualian dalam panggilan balik Tkinter
Traceback (panggilan terakhir terakhir):
Berkas "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/tkinter/__init__.py", baris 1948, di __call__
kembalikan self.func(*args)
^^^^^^^^^^^^^^^^
File "/storage/emulated/0/NadaPL/KGNS-NPL/CRUD_Gn_Biru.py", baris 92, di update_gn_biru_record
hapus_entri_gn_biru()
File "/storage/emulated/0/NadaPL/KGNS-NPL/CRUD_Gn_Biru.py", baris 108, di clear_entries_gn_biru
ID_entri.hapus(0, tk.AKHIR)
^^^^^^^^
NamaEr
ror: nama 'ID_entry' tidak ditentukan
Untuk menyelesaikan masalah tersebut, kita perlu memastikan bahwa semua entri yang digunakan dalam fungsi CRUD telah didefinisikan dengan benar. Mari kita modifikasi kode `CRUD_Gn_Biru.py` agar setiap entri diakses dengan benar di dalam fungsi CRUD.
```ular piton
impor tkinter sebagai tk
dari tkinter impor ttk
impor sqlite3
# Inisialisasi jendela utama
akar = tk.Tk()
akar.geometri("690x1390")
root.title("Arah Arus Musik Gn_Biru")
rangka_utama = tk.Rangka(akar)
main_frame.pack(isi=tk.BOTH, perluas=1)
kanvas = tk.Kanvas(bingkai_utama)
kanvas.paket(sisi=tk.KIRI, isi=tk.KEDUANYA, perluas=1)
scrollbar_y = ttk.Scrollbar(bingkai_utama, orientasi=tk.VERTIKAL, perintah=kanvas.yview)
scrollbar_y.pack(sisi=tk.KANAN, isi=tk.Y)
scrollbar_x = ttk.Scrollbar(akar, orientasi=tk.HORIZONTAL, perintah=kanvas.xview)
scrollbar_x.pack(sisi=tk.BOTTOM, isi=tk.X)
kanvas.konfigurasi(yscrollcommand=scrollbar_y.set, xscrollcommand=scrollbar_x.set)
canvas.bind('<Configure>', lambda dan: canvas.configure(scrollregion=canvas.bbox("all")))
bingkai_konten = tk.Bingkai(kanvas)
kanvas.buat_jendela((0, 0), jendela=bingkai_konten, jangkar="barat_laut")
data_frame = tk.Frame(bingkai_konten)
data_frame.grid(baris=0, kolom=0, padx=10, pady=10)
def buat_database():
koneksi = sqlite3.connect("DATAMUSIK.db")
c = kon.kursor()
c.execute('''BUAT TABEL JIKA TIDAK ADA Gn_Biru
(ID INTEGER KUNCI PRIMER,
Tingkat TEKS,
Bass_1 NYATA,
Trebel_1 NYATA,
Bass_2 NYATA,
Trebel_2 NYATA,
Bass_3 NYATA)''')
kon.komit()
sambung.tutup()
# Fungsi CRUD untuk Gn_Biru
def buat_gn_biru_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("MASUKKAN KE Gn_Biru (ID, Tingkat, Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3) NILAI (?, ?, ?, ?, ?, ?, ?)",
(ID_entri.dapatkan(), Level_entri.dapatkan(), Bass_1_entri.dapatkan(), Trebel_1_entri.dapatkan(), Bass_2_entri.dapatkan(), Trebel_2_entri.dapatkan(), Bass_3_entri.dapatkan()))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan memasukkan rekaman: {e}")
sambung.tutup()
hapus_entri_gn_biru()
baca_gn_biru_records()
def baca_gn_biru_records():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("PILIH * DARI Gn_Biru")
catatan = c.fetchall()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat membaca catatan: {e}")
catatan = []
sambung.tutup()
untuk widget di data_frame_gn_biru.winfo_children():
widget.hancurkan()
# Menampilkan data
untuk indeks, rekam dalam enumerate(records):
untuk col, nilai dalam enumerate(record):
tk.Label(data_frame_gn_biru, teks=nilai, bg="#e0e0e0").grid(baris=indeks+1, kolom=kolom, padx=5, pady=5)
# Menampilkan kolom header
kolom = ["ID", "Level", "Bass_1", "Trebel_1", "Bass_2", "Trebel_2", "Bass_3"]
untuk col_index, col_name di enumerate(kolom):
tk.Label(data_frame_gn_biru, teks=nama_kolom, font=('tebal')).grid(baris=0, kolom=indeks_kolom, padx=5, pady=5)
perbarui_gn_biru_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("PERBARUI Gn_Biru SET Level = ?, Bass_1 = ?, Trebel_1 = ?, Bass_2 = ?, Trebel_2 = ?, Bass_3 = ? DI MANA ID = ?",
(Level_entri.dapatkan(), Bass_1_entri.dapatkan(), Trebel_1_entri.dapatkan(), Bass_2_entri.dapatkan(), Trebel_2_entri.dapatkan(), Bass_3_entri.dapatkan()))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat memperbarui rekaman: {e}")
sambung.tutup()
hapus_entri_gn_biru()
baca_gn_biru_records()
def hapus_gn_biru_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("HAPUS DARI Gn_Biru DI MANA ID = ?", (ID_entry.get(),))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat menghapus rekaman: {e}")
sambung.tutup()
hapus_entri_gn_biru()
baca_gn_biru_records()
def clear_entries_gn_biru():
ID_entri.hapus(0, tk.AKHIR)
Level_entri.hapus(0, tk.AKHIR)
Bass_1_entri.hapus(0, tk.AKHIR)
Trebel_1_entri.hapus(0, tk.AKHIR)
Bass_2_entri.hapus(0, tk.AKHIR)
Trebel_2_entri.hapus(0, tk.AKHIR)
Bass_3_entri.hapus(0, tk.AKHIR)
# Fungsi setup_default_mode
def setup_default_mode(mode):
jika modus == 1:
baca_gn_biru_records()
# Entri untuk Gn_Biru
tk.Label(data_frame, teks="ID \n Gn_Biru").grid(baris=0, kolom=0, padx=5, pady=5)
ID_entri = tk.Entri(bingkai_data, lebar=4)
ID_entry.grid(baris=1, kolom=0, padx=5, pady=5)
tk.Label(data_frame, teks="Level").grid(baris=0, kolom=1, padx=5, pady=5)
Level_entri = tk.Entri(bingkai_data, lebar=6)
Level_entry.grid(baris=1, kolom=1, padx=5, pady=5)
tk.Label(data_frame, teks="Bass_1").grid(baris=0, kolom=2, padx=5, pady=5)
Bass_1_entri = tk.Entri(bingkai_data)
Bass_1_entry.grid(baris=1, kolom=2, padx=5, pady=5)
tk.Label(data_frame, teks="Trebel_1").grid(baris=0, kolom=3, padx=5, pady=5)
Trebel_1_entri = tk.Entri(bingkai_data)
Trebel_1_entry.grid(baris=1, kolom=3, padx=5, pady=5)
tk.Label(data_frame, teks="Bass_2").grid(baris=0, kolom=4, padx=5, pady=5)
Bass_2_entri = tk.Entri(bingkai_data)
Bass_2_entry.grid(baris=1, kolom=4, padx=5, pady=5)
tk.Label(data_frame, teks="Trebel_2").grid(baris=0, kolom=5, padx=5, pady=5)
Trebel_2_entri = tk.Entri(bingkai_data)
Trebel_2_entry.grid(baris=1, kolom=5, padx=5, pady=5)
tk.Label(data_frame, teks="Bass_3").grid(baris=0, kolom=6, padx=5, pady=5)
Bass_3_entri = tk.Entri(bingkai_data)
Bass_3_entry.grid(baris=1, kolom=6, padx=5, pady=5)
# Bingkai untuk menampilkan data Gn_Biru
data_frame_gn_biru = tk.Frame(frame_konten)
data_frame_gn_biru.grid(baris=1, kolom=0, padx=10, pady=10)
# Tombol-tombol untuk CRUD
buat_tombol = tk.Tombol(data_frame, teks="Buat", perintah=buat_rekaman_gn_biru)
buat_tombol.grid(baris=7, kolom=0, padx=5, pady=5)
read_button = tk.Button(data_frame, text="Baca", command=baca_catatan_gn_biru)
baca_tombol.grid(baris=7, kolom=1, padx=5, pady=5)
update_button = tk.Button(data_frame, text="Perbarui", command=perbarui_gn_biru_record)
update_button.grid(baris=8, kolom=0, padx=5, pady=5)
hapus_tombol = tk.Button(data_frame, text="Hapus", perintah=hapus_catatan_gn_biru)
hapus_tombol.grid(baris=8, kolom=1, padx=5, pady=5)
# Inisialisasi database dan membaca data awal
membuat_database()
pengaturan_mode_default(1)
akar.loop utama()
Bahasa Indonesia:
Penyesuaian penting:
- Pastikan semua entri (seperti `ID_entry`, `Level_entry`, `Bass_1_entry`, `Trebel_1_entry`, `Bass_2_entry`, `Trebel_2_entry`, dan `Bass_3_entry`) telah didefinisikan dan dapat diakses di dalam fungsi CRUD.
- Update semua referensi ke entri tersebut di fungsi CRUD dan `clear_entries_gn_biru`.
Jika Anda masih mengalami kesalahan atau masalah, harap berikan lebih banyak detail tentang kesalahan atau halangan yang Anda hadapi sehingga saya bisa memberikan solusi yang lebih spesifik.
Kenapa inputan data EntryBox hanya ada 1 baris saja, seharusnya ada dalam 3 baris
Untuk menambahkan tiga baris input data dengan tujuh kolom termasuk kolom ID, kita perlu mengatur ulang Entry Box di dalam frame data. Mari kita memperbarui kode untuk membuat tiga baris input data.
Berikut adalah kode yang diperbarui:
```ular piton
impor tkinter sebagai tk
dari tkinter impor ttk
impor sqlite3
# Inisialisasi jendela utama
akar = tk.Tk()
akar.geometri("690x1390")
root.title("Arah Arus Musik Gn_Biru")
rangka_utama = tk.Rangka(akar)
main_frame.pack(isi=tk.BOTH, perluas=1)
kanvas = tk.Kanvas(bingkai_utama)
kanvas.paket(sisi=tk.KIRI, isi=tk.KEDUANYA, perluas=1)
scrollbar_y = ttk.Scrollbar(bingkai_utama, orientasi=tk.VERTIKAL, perintah=kanvas.yview)
scrollbar_y.pack(sisi=tk.KANAN, isi=tk.Y)
scrollbar_x = ttk.Scrollbar(akar, orientasi=tk.HORIZONTAL, perintah=kanvas.xview)
scrollbar_x.pack(sisi=tk.BOTTOM, isi=tk.X)
kanvas.konfigurasi(yscrollcommand=scrollbar_y.set, xscrollcommand=scrollbar_x.set)
canvas.bind('<Configure>', lambda dan: canvas.configure(scrollregion=canvas.bbox("all")))
bingkai_konten = tk.Bingkai(kanvas)
kanvas.buat_jendela((0, 0), jendela=bingkai_konten, jangkar="barat_laut")
data_frame = tk.Frame(bingkai_konten)
data_frame.grid(baris=0, kolom=0, padx=10, pady=10)
def buat_database():
koneksi = sqlite3.connect("DATAMUSIK.db")
c = kon.kursor()
c.execute('''BUAT TABEL JIKA TIDAK ADA Gn_Biru
(ID INTEGER KUNCI PRIMER,
Tingkat TEKS,
Bass_1 NYATA,
Trebel_1 NYATA,
Bass_2 NYATA,
Trebel_2 NYATA,
Bass_3 NYATA)''')
kon.komit()
sambung.tutup()
# Fungsi CRUD untuk Gn_Biru
def buat_gn_biru_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("MASUKKAN KE Gn_Biru (ID, Tingkat, Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3) NILAI (?, ?, ?, ?, ?, ?, ?)",
(ID_entri.dapatkan(), Level_entri.dapatkan(), Bass_1_entri.dapatkan(), Trebel_1_entri.dapatkan(), Bass_2_entri.dapatkan(), Trebel_2_entri.dapatkan(), Bass_3_entri.dapatkan()))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan memasukkan rekaman: {e}")
sambung.tutup()
hapus_entri_gn_biru()
baca_gn_biru_records()
def baca_gn_biru_records():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("PILIH * DARI Gn_Biru")
catatan = c.fetchall()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat membaca catatan: {e}")
catatan = []
sambung.tutup()
untuk widget di data_frame_gn_biru.winfo_children():
widget.hancurkan()
# Menampilkan data
untuk indeks, rekam dalam enumerate(records):
untuk col, nilai dalam enumerate(record):
tk.Label(data_frame_gn_biru, teks=nilai, bg="#e0e0e0").grid(baris=indeks+1, kolom=kolom, padx=5, pady=5)
# Menampilkan kolom header
kolom = ["ID", "Level", "Bass_1", "Trebel_1", "Bass_2", "Trebel_2", "Bass_3"]
untuk col_index, col_name di enumerate(kolom):
tk.Label(data_frame_gn_biru, teks=nama_kolom, font=('tebal')).grid(baris=0, kolom=indeks_kolom, padx=5, pady=5)
perbarui_gn_biru_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("PERBARUI Gn_Biru SET Level = ?, Bass_1 = ?, Trebel_1 = ?, Bass_2 = ?, Trebel_2 = ?, Bass_3 = ? DI MANA ID = ?",
(Level_entri.dapatkan(), Bass_1_entri.dapatkan(), Trebel_1_entri.dapatkan(), Bass_2_entri.dapatkan(), Trebel_2_entri.dapatkan(), Bass_3_entri.dapatkan()))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat memperbarui rekaman: {e}")
sambung.tutup()
hapus_entri_gn_biru()
baca_gn_biru_records()
def hapus_gn_biru_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("HAPUS DARI Gn_Biru DI MANA ID = ?", (ID_entry.get(),))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat menghapus rekaman: {e}")
sambung.tutup()
hapus_entri_gn_biru()
baca_gn_biru_records()
def clear_entries_gn_biru():
untuk baris di entry_rows:
untuk entri pada baris:
entri.hapus(0, tk.AKHIR)
# Fungsi setup_default_mode
def setup_default_mode(mode):
jika modus == 1:
baca_gn_biru_records()
# Entri untuk Gn_Biru
label = ["ID", "Level", "Bass_1", "Trebel_1", "Bass_2", "Trebel_2", "Bass_3"]
untuk col_index, label di enumerate(label):
tk.Label(data_frame, teks=label).grid(baris=0, kolom=indeks_kolom, padx=5, pady=5)
baris_entri = []
untuk i dalam rentang(3): # Buat tiga baris entri
baris = []
untuk j dalam rentang(len(label)):
entri = tk.Entri(bingkai_data, lebar=10)
entri.grid(baris=i+1, kolom=j, padx=5, pady=5)
baris.tambahkan(entri)
entri_baris.tambahkan(baris)
ID_entri = baris_entri[0][0]
Level_entri = baris_entri[0][1]
Bass_1_entry = baris_entri[0][2]
Trebel_1_entry = baris_entri[0][3]
Bass_2_entry = baris_entri[0][4]
Trebel_2_entry = baris_entri[0][5]
Bass_3_entry = baris_entri[0][6]
# Bingkai untuk menampilkan data Gn_Biru
data_frame_gn_biru = tk.Frame(frame_konten)
data_frame_gn_biru.grid(baris=1, kolom=0, padx=10, pady=10)
# Tombol-tombol untuk CRUD
buat_tombol = tk.Tombol(data_frame, teks="Buat", perintah=buat_rekaman_gn_biru)
buat_tombol.grid(baris=4, kolom=0, padx=5, pady=5)
read_button = tk.Button(data_frame, text="Baca", command=baca_catatan_gn_biru)
baca_tombol.grid(baris=4, kolom=1, padx=5, pady=5)
update_button = tk.Button(data_frame, text="Perbarui", command=perbarui_gn_biru_record)
update_button.grid(baris=5, kolom=0, padx=5, pady=5)
hapus_tombol = tk.Button(data_frame, text="Hapus", perintah=hapus_catatan_gn_biru)
hapus_tombol.grid(baris=5, kolom=1, padx=5, pady=5)
# Inisialisasi database dan membaca data awal
membuat_database()
pengaturan_mode_default(1)
akar.loop utama()
Bahasa Indonesia:
Perubahan yang dilakukan:
1. Ditambahkan tiga baris input data dengan Entry Box dalam `data_frame`.
2. Disimpan Entry Box dalam list `entry_rows` untuk memudahkan akses pada fungsi `clear_entries_gn_biru`.
3. Tetapkan `ID_entry`, `Level_entry`, `Bass_1_entry`, `Trebel_1_entry`, `Bass_2_entry`, `Trebel_2_entry`, dan `Bass_3_entry` dari baris pertama `entry_rows`.
Jika ada kesalahan lebih lanjut atau membutuhkan penyesuaian lain, beri tahu saya!
EntryBox yang berfungsi hanya dibaris 1 saja, sedangkan EntryBox yang di baris 2 dan 3 belum berfungsi dengan baik untuk melskukan CRUD di setiap kolomnya
Masalah tersebut terjadi karena hanya Entry Box pada baris pertama yang didefinisikan sebagai variabel global, sementara Entry Box pada baris 2 dan 3 tidak terhubung dengan fungsi CRUD. Untuk menyelesaikan masalah ini, kita perlu memperbarui kode agar Entry Box dari semua baris dapat digunakan dalam operasi CRUD.
Berikut adalah solusi yang memungkinkan semua baris Entry Box berfungsi dengan baik dalam pengoperasian CRUD:
1. **Tambahkan fungsi untuk membaca data dari Entry Box yang dipilih.**
2. **Tambahkan fungsi untuk menulis data ke Entry Box yang dipilih.**
Berikut adalah kode yang telah diperbarui:
```ular piton
impor tkinter sebagai tk
dari tkinter impor ttk
impor sqlite3
# Inisialisasi jendela utama
akar = tk.Tk()
akar.geometri("690x1390")
root.title("Arah Arus Musik Gn_Biru")
rangka_utama = tk.Rangka(akar)
main_frame.pack(isi=tk.BOTH, perluas=1)
kanvas = tk.Kanvas(bingkai_utama)
kanvas.paket(sisi=tk.KIRI, isi=tk.KEDUANYA, perluas=1)
scrollbar_y = ttk.Scrollbar(bingkai_utama, orientasi=tk.VERTIKAL, perintah=kanvas.yview)
scrollbar_y.pack(sisi=tk.KANAN, isi=tk.Y)
scrollbar_x = ttk.Scrollbar(akar, orientasi=tk.HORIZONTAL, perintah=kanvas.xview)
scrollbar_x.pack(sisi=tk.BOTTOM, isi=tk.X)
kanvas.konfigurasi(yscrollcommand=scrollbar_y.set, xscrollcommand=scrollbar_x.set)
canvas.bind('<Configure>', lambda dan: canvas.configure(scrollregion=canvas.bbox("all")))
bingkai_konten = tk.Bingkai(kanvas)
kanvas.buat_jendela((0, 0), jendela=bingkai_konten, jangkar="barat_laut")
data_frame = tk.Frame(bingkai_konten)
data_frame.grid(baris=0, kolom=0, padx=10, pady=10)
def buat_database():
koneksi = sqlite3.connect("DATAMUSIK.db")
c = kon.kursor()
c.execute('''BUAT TABEL JIKA TIDAK ADA Gn_Biru
(ID INTEGER KUNCI PRIMER,
Tingkat TEKS,
Bass_1 NYATA,
Trebel_1 NYATA,
Bass_2 NYATA,
Trebel_2 NYATA,
Bass_3 NYATA)''')
kon.komit()
sambung.tutup()
# Fungsi CRUD untuk Gn_Biru
def buat_gn_biru_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
untuk baris di entry_rows:
mencoba:
c.execute("MASUKKAN KE Gn_Biru (ID, Tingkat, Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3) NILAI (?, ?, ?, ?, ?, ?, ?)",
(baris[0].dapatkan(), baris[1].dapatkan(), baris[2].dapatkan(), baris[3].dapatkan(), baris[4].dapatkan(), baris[5].dapatkan(), baris[6].dapatkan()))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan memasukkan rekaman: {e}")
sambung.tutup()
hapus_entri_gn_biru()
baca_gn_biru_records()
def baca_gn_biru_records():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
mencoba:
c.execute("PILIH * DARI Gn_Biru")
catatan = c.fetchall()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat membaca catatan: {e}")
catatan = []
sambung.tutup()
untuk widget di data_frame_gn_biru.winfo_children():
widget.hancurkan()
# Menampilkan data
untuk indeks, rekam dalam enumerate(records):
untuk col, nilai dalam enumerate(record):
tk.Label(data_frame_gn_biru, teks=nilai, bg="#e0e0e0").grid(baris=indeks+1, kolom=kolom, padx=5, pady=5)
# Menampilkan kolom header
kolom = ["ID", "Level", "Bass_1", "Trebel_1", "Bass_2", "Trebel_2", "Bass_3"]
untuk col_index, col_name di enumerate(kolom):
tk.Label(data_frame_gn_biru, teks=nama_kolom, font=('tebal')).grid(baris=0, kolom=indeks_kolom, padx=5, pady=5)
perbarui_gn_biru_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
untuk baris di entry_rows:
mencoba:
c.execute("PERBARUI Gn_Biru SET Level = ?, Bass_1 = ?, Trebel_1 = ?, Bass_2 = ?, Trebel_2 = ?, Bass_3 = ? DI MANA ID = ?",
(baris[1].dapatkan(), baris[2].dapatkan(), baris[3].dapatkan(), baris[4].dapatkan(), baris[5].dapatkan(), baris[6].dapatkan(), baris[0].dapatkan()))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat memperbarui rekaman: {e}")
sambung.tutup()
hapus_entri_gn_biru()
baca_gn_biru_records()
def hapus_gn_biru_record():
koneksi = sqlite3.sambungkan('DATAMUSIK.db')
c = kon.kursor()
untuk baris di entry_rows:
mencoba:
c.execute("HAPUS DARI Gn_Biru DI MANA ID = ?", (baris[0].get(),))
kon.komit()
kecuali Pengecualian sebagai e:
print(f"Kesalahan saat menghapus rekaman: {e}")
sambung.tutup()
hapus_entri_gn_biru()
baca_gn_biru_records()
def clear_entries_gn_biru():
untuk baris di entry_rows:
untuk entri pada baris:
entri.hapus(0, tk.AKHIR)
# Fungsi setup_default_mode
def setup_default_mode(mode):
jika modus == 1:
baca_gn_biru_records()
# Entri untuk Gn_Biru
label = ["ID", "Level", "Bass_1", "Trebel_1", "Bass_2", "Trebel_2", "Bass_3"]
untuk col_index, label di enumerate(label):
tk.Label(data_frame, teks=label).grid(baris=0, kolom=indeks_kolom, padx=5, pady=5)
baris_entri = []
untuk i dalam rentang(3): # Buat tiga baris entri
baris = []
untuk j dalam rentang(len(label)):
entri = tk.Entri(bingkai_data, lebar=10)
entri.grid(baris=i+1, kolom=j, padx=5, pady=5)
baris.tambahkan(entri)
entri_baris.tambahkan(baris)
# Tombol-tombol untuk CRUD
buat_tombol = tk.Tombol(data_frame, teks="Buat", perintah=buat_rekaman_gn_biru)
buat_tombol.grid(baris=4, kolom=0, padx=5, pady=5)
read_button = tk.Button(data_frame, text="Baca", command=baca_catatan_gn_biru)
baca_tombol.grid(baris=4, kolom=1, padx=5, pady=5)
update_button = tk.Button(data_frame, text="Perbarui", command=perbarui_gn_biru_record)
update_button.grid(baris=5, kolom=0, padx=5, pady=5)
hapus_tombol = tk.Button(data_frame, text="Hapus", perintah=hapus_catatan_gn_biru)
hapus_tombol.grid(baris=5, kolom=1, padx=5, pady=5)
# Bingkai untuk menampilkan data Gn_Biru
data_frame_gn_biru = tk.Frame(frame_konten)
data_frame_gn_biru.grid(baris=1, kolom=0, padx=10, pady=10)
# Inisialisasi database dan membaca data awal
membuat_database()
pengaturan_mode_default(1)
akar.loop utama()
Bahasa Indonesia:
**Perubahan yang dilakukan:**
1. **Fungsi CRUD diperbarui:** Fungsi `create_gn_biru_record`, `update_gn_biru_record`, dan `delete_gn_biru_record` sekarang memproses semua baris dalam `entry_rows`.
2. **`clear_entries_gn_biru` diperbarui:** Fungsi ini sekarang menghapus data dari semua Entry Box dalam `entry_rows`.
3. **Pembuatan Entry Box:** Entry Box untuk setiap baris bersembunyi dalam `entry_rows`, dan setiap baris dapat diakses untuk operasi CRUD.
Dengan perbaikan ini, aplikasi harus dapat mengelola data dari semua baris Entry Box dengan benar. Jika ada masalah lebih lanjut atau kebutuhan tambahan, beri tahu saya!
Pada kode tersebut, tolong khususkan EntryBox inputan data baris1 hanya untuk ID 1 saja, demikian juga EntryBox inputan data baris 2 hanya untuk ID 2 saja, dan EntryBox inputan data baris3 hanya untuk ID 3 saja. Dengan kata lain menginput data di baris 1 tidak bisa dari ID 2 dan ID 3, demikian juga menginput data di baris 2 tidak bisa dari ID 1 dan ID 3, juga menginput data di baris 3 tidak bisa dari ID 1 dan ID 2
Berikut ini adalah kode yang telah diperbaiki agar hanya menggunakan satu set tombol CRUD untuk mengelola data pada tabel Gn_Biru, dengan memastikan bahwa operasi CRUD pada setiap baris dilakukan secara terpisah sesuai dengan data pada baris tersebut:
import tkinter as tk
from tkinter import ttk
import sqlite3
# Initialize the main window
root = tk.Tk()
root.geometry("800x400")
root.title("Arah Arus Musik Gn_Biru")
main_frame = tk.Frame(root)
main_frame.pack(fill=tk.BOTH, expand=1)
canvas = tk.Canvas(main_frame)
canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)
scrollbar_y = ttk.Scrollbar(main_frame, orient=tk.VERTICAL, command=canvas.yview)
scrollbar_y.pack(side=tk.RIGHT, fill=tk.Y)
canvas.configure(yscrollcommand=scrollbar_y.set)
canvas.bind('<Configure>', lambda e: canvas.configure(scrollregion=canvas.bbox("all")))
content_frame = tk.Frame(canvas)
canvas.create_window((0, 0), window=content_frame, anchor="nw")
data_frame = tk.Frame(content_frame)
data_frame.grid(row=0, column=0, padx=10, pady=10)
def create_database():
conn = sqlite3.connect("DATAMUSIK.db")
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS Gn_Biru
(ID INTEGER PRIMARY KEY,
Level TEXT,
Bass_1 REAL,
Trebel_1 REAL,
Bass_2 REAL,
Trebel_2 REAL,
Bass_3 REAL)''')
conn.commit()
conn.close()
# Fungsi CRUD untuk Gn_Biru
def create_gn_biru_record(row):
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
try:
c.execute("INSERT INTO Gn_Biru (ID, Level, Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3) VALUES (?, ?, ?, ?, ?, ?, ?)",
(row[0].get(), row[1].get(), row[2].get(), row[3].get(), row[4].get(), row[5].get(), row[6].get()))
conn.commit()
except Exception as e:
print(f"Error inserting record: {e}")
finally:
conn.close()
clear_entries_gn_biru(row)
display_records()
def read_gn_biru_record(row):
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
try:
c.execute("SELECT * FROM Gn_Biru WHERE ID = ?", (row[0].get(),))
record = c.fetchone()
if record:
for col, value in enumerate(record):
row[col].delete(0, tk.END)
row[col].insert(0, int(value) if isinstance(value, float) else value)
else:
print(f"No record found for ID {row[0].get()}")
display_records()
except Exception as e:
print(f"Error reading record: {e}")
finally:
conn.close()
def update_gn_biru_record(row):
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
try:
c.execute("UPDATE Gn_Biru SET Level = ?, Bass_1 = ?, Trebel_1 = ?, Bass_2 = ?, Trebel_2 = ?, Bass_3 = ? WHERE ID = ?",
(row[1].get(), row[2].get(), row[3].get(), row[4].get(), row[5].get(), row[6].get(), row[0].get()))
conn.commit()
except Exception as e:
print(f"Error updating record: {e}")
finally:
conn.close()
clear_entries_gn_biru(row)
display_records()
def delete_gn_biru_record(row):
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
try:
c.execute("DELETE FROM Gn_Biru WHERE ID = ?", (row[0].get(),))
conn.commit()
except Exception as e:
print(f"Error deleting record: {e}")
finally:
conn.close()
clear_entries_gn_biru(row)
display_records()
def clear_entries_gn_biru(row=None):
if row:
for entry in row:
entry.delete(0, tk.END)
else:
for row in entry_rows:
for entry in row:
entry.delete(0, tk.END)
setup_default_mode()
def setup_default_mode():
levels = ["Satu", "Dua", "Tiga"]
for row_index, row in enumerate(entry_rows):
row[1].delete(0, tk.END)
row[1].insert(0, levels[row_index])
row[1].config(state='readonly', bg='white')
def display_records():
for widget in record_frame.winfo_children():
widget.destroy()
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("SELECT * FROM Gn_Biru")
records = c.fetchall()
conn.close()
for i, record in enumerate(records):
for j, value in enumerate(record):
tk.Label(record_frame, text=int(value) if isinstance(value, float) else value).grid(row=i, column=j, padx=5, pady=5)
# Entry untuk Gn_Biru
labels = ["ID", "Level", "Bass_1", "Trebel_1", "Bass_2", "Trebel_2", "Bass_3"]
for col_index, label in enumerate(labels):
tk.Label(data_frame, text=label).grid(row=0, column=col_index, padx=5, pady=5)
entry_rows = []
for i in range(3): # Create three rows of entries
row = []
for j in range(len(labels)):
if j == 0: # ID column
entry = tk.Entry(data_frame, width=4)
elif j == 1: # Level column
entry = tk.Entry(data_frame, width=6, bg='white')
levels = ["Satu", "Dua", "Tiga"]
entry.insert(0, levels[i])
entry.config(state='readonly')
else:
entry = tk.Entry(data_frame, width=10)
entry.grid(row=i+1, column=j, padx=5, pady=5)
row.append(entry)
entry_rows.append(row)
# Tombol-tombol untuk CRUD
tk.Button(data_frame, text="Create", command=lambda: create_gn_biru_record(get_current_row())).grid(row=6, column=0, padx=5, pady=5)
tk.Button(data_frame, text="Read", command=lambda: read_gn_biru_record(get_current_row())).grid(row=6, column=1, padx=5, pady=5)
tk.Button(data_frame, text="Update", command=lambda: update_gn_biru_record(get_current_row())).grid(row=6, column=2, padx=5, pady=5)
tk.Button(data_frame, text="Delete", command=lambda: delete_gn_biru_record(get_current_row())).grid(row=6, column=3, padx=5, pady=5)
tk.Button(data_frame, text="Clear", command=lambda: clear_entries_gn_biru()).grid(row=6, column=4, padx=5, pady=5)
def get_current_row():
selected_id = id_entry.get()
for row in entry_rows:
if row[0].get() == selected_id:
return row
return entry_rows[0] # default to the first row if no match found
id_label = tk.Label(data_frame, text="ID for Operation")
id_label.grid(row=5, column=0, padx=5, pady=5)
id_entry = tk.Entry(data_frame, width=10)
id_entry.grid(row=5, column=1, padx=5, pady=5)
# Frame untuk menampilkan records
record_frame = tk.Frame(content_frame)
record_frame.grid(row=1, column=0, padx=10, pady=10)
# Inisialisasi database dan baca data awal
create_database()
setup_default_mode()
display_records()
root.mainloop()
Penyesuaian yang dilakukan:Fungsi CRUD yang Universal: Fungsi create_gn_biru_record, read_gn_biru_record, update_gn_biru_record, delete_gn_biru_record, dan clear_entries_gn_biru diubah untuk menerima parameter row yang menunjuk ke baris tertentu.Menambahkan Fungsi get_current_row: Fungsi ini digunakan untuk mengambil baris yang sesuai dengan ID yang dimasukkan pengguna pada id_entry.Menghilangkan Tombol CRUD yang Ganda: Hanya satu set tombol CRUD yang digunakan untuk mengelola data pada ketiga baris input.Menambahkan id_entry untuk Menentukan Baris: Pengguna memasukkan ID pada id_entry untuk menentukan baris mana yang sedang dioperasikan oleh tombol CRUD.Membersihkan Entri Otomatis: Setelah operasi CRUD dilakukan, entri akan dibersihkan secara otomatis.Kode ini memastikan bahwa setiap baris data dapat dioperasikan secara terpisah berdasarkan ID yang dimasukkan pada id_entry.
kode yang telah diperbaiki hanya menggunakan satu set tombol CRUD untuk mengelola data pada tabel Gn_Biru, dengan memastikan bahwa operasi CRUD pada setiap baris dilakukan secara terpisah sesuai dengan data pada baris tersebut.
Penyesuaian yang dilakukan:Fungsi CRUD yang Universal: Fungsi create_gn_biru_record, read_gn_biru_record, update_gn_biru_record, delete_gn_biru_record, dan clear_entries_gn_biru diubah untuk menerima parameter row yang menunjuk ke baris tertentu.Menambahkan Fungsi get_current_row: Fungsi ini digunakan untuk mengambil baris yang sesuai dengan ID yang dimasukkan pengguna pada id_entry.Menghilangkan Tombol CRUD yang Ganda: Hanya satu set tombol CRUD yang digunakan untuk mengelola data pada ketiga baris input.Menambahkan id_entry untuk Menentukan Baris: Pengguna memasukkan ID pada id_entry untuk menentukan baris mana yang sedang dioperasikan oleh tombol CRUD.Membersihkan Entri Otomatis: Setelah operasi CRUD dilakukan, entri akan dibersihkan secara otomatis.Kode ini memastikan bahwa setiap baris data dapat dioperasikan secara terpisah berdasarkan ID yang dimasukkan pada id_entry.
Kode yang telah diperbaiki hanya menggunakan satu set tombol CRUD untuk mengelola data pada tabel Gn_Biru, dengan memastikan bahwa operasi CRUD pada setiap baris dilakukan secara terpisah sesuai dengan data pada baris tersebut.
Penyesuaian yang dilakukan:Fungsi CRUD yang Universal: Fungsi create_gn_biru_record, read_gn_biru_record, update_gn_biru_record, delete_gn_biru_record, dan clear_entries_gn_biru diubah untuk menerima parameter row yang menunjuk ke baris tertentu.Menambahkan Fungsi get_current_row: Fungsi ini digunakan untuk mengambil baris yang sesuai dengan ID yang dimasukkan pengguna pada id_entry.Menghilangkan Tombol CRUD yang Ganda: Hanya satu set tombol CRUD yang digunakan untuk mengelola data pada ketiga baris input.Menambahkan id_entry untuk Menentukan Baris: Pengguna memasukkan ID pada id_entry untuk menentukan baris mana yang sedang dioperasikan oleh tombol CRUD.Membersihkan Entri Otomatis: Setelah operasi CRUD dilakukan, entri akan dibersihkan secara otomatis.Kode ini memastikan bahwa setiap baris data dapat dioperasikan secara terpisah berdasarkan ID yang dimasukkan pada id_entry.
Kode yang telah diperbaiki untuk memastikan bahwa fungsi clear_entries_gn_biru dapat membersihkan teks entry pada semua baris dan semua kolom EntryBox:
Penjelasan perbaikan:Fungsi clear_entries_gn_biru: Fungsi ini membersihkan semua entri di setiap baris dan kolom jika tidak ada baris tertentu yang disediakan. Setelah pembersihan, fungsi setup_default_mode dipanggil untuk mengatur kembali nilai default pada kolom Level.Fungsi setup_default_mode: Fungsi ini memastikan bahwa setiap baris memiliki nilai default untuk kolom Level sesuai dengan urutannya (Satu, Dua, Tiga).Fungsi display_records: Fungsi ini menampilkan semua record dari tabel Gn_Biru di dalam record_frame.Pendefinisian entri dan label: Membuat tiga baris entri dengan kolom sesuai label dan mengukur kolom Level agar hanya dapat dibaca.Tombol CRUD: Menambahkan tombol-tombol untuk operasi CRUD dan tombol Clear yang memanggil fungsi clear_entries_gn_biru untuk membersihkan entri.Fungsi get_current_row: Fungsi ini mengembalikan baris entri yang sesuai dengan ID yang dimasukkan di id_entry.Inisialisasi database: Memanggil fungsi create_database untuk membuat tabel jika belum ada, kemudian memanggil setup_default_mode dan display_records untuk mengatur mode default dan menampilkan data awal.
Modifikasi kode agar lebar kolom ID menjadi 4 karakter dan kolom Level menjadi 6 karakter:
Penyesuaian yang dilakukan:Kolom ID: Lebar diatur menjadi 4 karakter.Kolom Level: Lebar diatur menjadi 6 karakter.Perubahan ini diterapkan pada saat membuat entri di bagian loop untuk membuat baris entri.
Mengubah background kolom Level menjadi berwarna putih, Anda dapat menambahkan konfigurasi background pada entri untuk kolom Level. Berikut adalah kode yang sudah diperbaiki dengan perubahan tersebut:
Dalam perubahan ini pastikan Background kolom Level diatur menjadi putih (bg='white') pada saat inisialisasi entry untuk kolom Level.Juga mengatur background menjadi putih dalam fungsi setup_default_mode().Ini akan bahwa kolom Level di semua baris entry memiliki background berwarna putih .
Untuk mengatur teks di kolom "Level" agar posisinya di tengah, kita dapat menggunakan tk.StringVar untuk masuk dan mengkonfigurasi teks tersebut untuk berada di tengah menggunakan justify='center'. Berikut kodenya dengan modifikasi tersebut:
Pada perubahan ini:justify='center' ditambahkan pada konfigurasi entri untuk kolom Level di setup_default_mode() dan saat entri diinisialisasi.Background kolom Level diatur menjadi putih menggunakan bg='white'.
Tolong bersihkan entri teks pada id_entry ID untuk operasi setelah menginput nomor id, dibersihkan otomatis setelah menginput
Tentu saja, untuk membersihkan teks di widget `Entry` setelah input, kita bisa menggunakan metode `delete` pada widget tersebut. Berikut adalah contoh kode yang menambahkan fungsi ini ke program yang menggunakan `tkinter`:
`import tkinter as tk
from tkinter import messagebox
def submit():
# Dapatkan teks dari entry
input_id = id_entry.get()
# Lakukan sesuatu dengan input_id, misalnya simpan ke database
# ...
# Bersihkan entry setelah input
id_entry.delete(0, tk.END)
# Menampilkan pesan konfirmasi
messagebox.showinfo("Info", "ID berhasil diinput dan dibersihkan")
# Membuat window utama
root = tk.Tk()
root.title("Input ID")
# Membuat label dan entry untuk input ID
id_label = tk.Label(root, text="Masukkan ID:")
id_label.pack(pady=5)
id_entry = tk.Entry(root)
id_entry.pack(pady=5)
# Membuat tombol submit
submit_button = tk.Button(root, text="Submit", command=submit)
submit_button.pack(pady=20)
# Menjalankan aplikasi
root.mainloop()
Dalam contoh ini, setelah tombol `submit` ditekan, nilai dari `Entry` diambil dan diproses, kemudian `Entry` tersebut dibersihkan menggunakan `id_entry.delete(0, tk.END)`.
Silakan sesuaikan kode ini dengan kebutuhan spesifik program Anda.
Komentar
Posting Komentar
This Message