Langsung ke konten utama

MENEMUKAN MODUL ANTAR FILE, SELF CREATE TABLE IN DATABASE

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

Postingan populer dari blog ini

Cara Download Aplikasi (.apk) Playstore Berbayar Jadi Gratis

  Langsung ke isi Menu Alutekno  »  Android  »  Cara Download Aplikasi (.apk) Playstore Berbayar Jadi Gratis Cara Download Aplikasi (.apk) Playstore Berbayar Jadi Gratis Download Aplikasi (Apk) Berbayar jadi Gratis di Playstore  – Pengguna smartphone Android semakin tahun semakin berkembang pesat begitu juga jumlah aplikasi yang telah di publish di playstore semakin meningkat pula. ADVERTISEMENT Daftar Isi Cara Download Aplikasi Playstore Berbayar Jadi Gratis 1. Download Aplikasi Blackmart Alpha 2. Menggunakan Lucky Patcher 3. Mencari File .apk Berbayar dari Situs File Sharing ADVERTISEMENT Aplikasi yang ada di playstore terbagi menjadi dua kategory yaitu yang gratis dan berbayar, aplikasi gratis biasanya terdapat iklan di dalamnya sehingga developer bisa mendapatkan uang untuk mengembangkan aplikasi yang telah di buatnya. Sedangkan Aplikasi berbayar atau premium biasanya tidak terdapat iklan dan mempunyai fitur yang lebih lengkap dibandingkan dengan aplika...

Cara Membuat Form Login Menggunakan HTML&CSS

  Upgrade Responses (2) Sukma Riadi Pakpahan What are your thoughts?  Cancel Respond Agustinus Giri Hartono 3 months ago Aku dah coba, tapi bagian bawah kotak login masih putih. Bagaimana supaya background sama dengan gradasi hijau? di >> body { background: -webkit-linear-gradient(bottom, #2dbd6e, #a6f77b); background-repeat: no-repeat; } 1 1 Arif Firmansyah 3 months ago terima kasih banyak boss cara menjelaskan sangat detail banget….saya berhasil membuat halaman login yang di jelaskan tadi, saya ingin penjelasannya lagi bagaimana cara masuk ke login dan membuat halaman baru karena saya masih pemula Welcome back. You are signed in as  srpakpahansst@gmail.com .  Not you? Tutorial Mendesain Form Login Menggunakan HTML&CSS Kimiyuki Yukawa Follow Mar 25, 2019  · 9 min read Tentu kita tidak asing lagi dengan istilah  login  dalam dunia  website . Halaman  login  sendiri dibuat untuk memberikan akses kepada  user...

PANDUAN CARA INSTALL WORDPRESS DI PC LOCALHOST [OFFLINE]

READY..! START BLOGGING WITH WORDPRESS..? Trending: 15+ Tema WordPress untuk... 15 Sumber Backlink Grati... Jual Tema WordPress Prem... Panduan Lengkap Cara Men... 5 Tema WordPress Terbaik... ALL ABOUT All About WORDPRESS Tutorial DESIGN All About THEMES Download LINUX Tutorial FOREX Forex DEALS Must See HOW TO START A BLOG? Panduan Membuat Blog Hanya 30 Menit Home  »  CMS  »  Panduan Cara Install WordPress di PC Localhost [Offline] PANDUAN CARA INSTALL WORDPRESS DI PC LOCALHOST [OFFLINE] Centerklik  |  CMS ,  WordPress Panduan Cara Install WordPress di PC Localhost [Offline]  – Jika Anda ingin memiliki blog gratis bisa membuat blog pada layanan gratis seperti blogger atau  membuat blog di WordPress.com . Keduanya memang gratis baik dari penggunaan domain maupun hosting, tapi tentunya sesuatu yang gratis tidak akan pernah di beri akses penuh dan masih banyak batasan, Dengan...