Langsung ke konten utama

FUNGSI UNTUK MENGAMBIL DATA TABEL Gn_Biru DARI DATABASE DATAMUSIK.db, DAN MENGATUR BASS/TREBEL SESUAI Level_gn, Progres, dan Mode. (Part-1)

FUNGSI UNTUK MENGAMBIL DATA TABEL Gn_Biru DARI DATABASE DATAMUSIK.db, DAN MENGATUR BASS/TREBEL SESUAI Level_gn, Progres, dan Mode. (Part-1)


Tolong applikasikan kode berikut:

import sqlite3


def level_gn(id, progres, mode):

    # Koneksi ke database

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    # Template untuk query SQL pengambilan data dari tabel Gn_Biru

    query = """

        SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3

        FROM Gn_Biru

        WHERE ID = ?

    """


    # Data Bass tetap untuk semua mode dan progres

    cursor.execute(query, (id,))

    data = cursor.fetchone()


    bass_1 = data[0]

    bass_2 = data[2]

    bass_3 = data[4]


    # Pengaturan Trebel berdasarkan progres dan mode

    if progres == 1:

        if mode == "Naik" or mode == "Turun":

            trebel_1 = data[1]

            trebel_2 = data[3]


    elif progres == 2:

        if mode == "Naik":

            trebel_1 = adjust_id_trebel_progres2_naik_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres2_naik_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)

        elif mode == "Turun":

            trebel_1 = adjust_id_trebel_progres2_turun_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres2_turun_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)


    elif progres == 3:

        if mode == "Naik":

            trebel_1 = adjust_id_trebel_progres3_naik_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres3_naik_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)

        elif mode == "Turun":

            trebel_1 = adjust_id_trebel_progres3_turun_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres3_turun_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)


    # Menutup koneksi database

    conn.close()


    # Cetak atau return hasil pengambilan data

    result = {

        "Bass_1": bass_1,

        "Trebel_1": trebel_1,

        "Bass_2": bass_2,

        "Trebel_2": trebel_2,

        "Bass_3": bass_3

    }


    return result


# Fungsi adjust untuk berbagai progres dan mode

def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(

            str(int(char) - 2) for char in new_id_value[1:]

        )

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(

            str(int(char) - 2) for char in new_id_value[1:]

        )

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(

            str(int(char) - 3) for char in new_id_value[1:]

        )

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(

            str(int(char) - 3) for char in new_id_value[1:]

        )

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def ambil_data_trebel(id, target_id, kolom):

    # Fungsi untuk mengambil data Trebel dari ID yang berbeda

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    query = f"""

        SELECT {kolom}

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (target_id,))

    data = cursor.fetchone()

    conn.close()

    return data[0]


# Contoh penggunaan fungsi

# result = level_gn(id=1, progres=2, mode="Naik")

# print(result)


Terhadap kode fungsi pilih nada yang berisikan level_gn_selected, id_selected, progres_selected, dan mode_selected, berikut ini:

def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())                

 

       id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()


Berikut adalah integrasi dari fungsi `level_gn` dengan `pilih_nada` untuk menggunakan parameter `level_gn_selected`, `id_selected`, `progres_selected`, dan `mode_selected` yang diambil dari input pengguna:


```python

import sqlite3


def level_gn(id, progres, mode):

    # Koneksi ke database

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    # Template untuk query SQL pengambilan data dari tabel Gn_Biru

    query = """

        SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3

        FROM Gn_Biru

        WHERE ID = ?

    """


    # Data Bass tetap untuk semua mode dan progres

    cursor.execute(query, (id,))

    data = cursor.fetchone()


    bass_1 = data[0]

    bass_2 = data[2]

    bass_3 = data[4]


    # Pengaturan Trebel berdasarkan progres dan mode

    if progres == 1:

        if mode == "naik" or mode == "turun":

            trebel_1 = data[1]

            trebel_2 = data[3]


    elif progres == 2:

        if mode == "naik":

            trebel_1 = adjust_id_trebel_progres2_naik_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres2_naik_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)

        elif mode == "turun":

            trebel_1 = adjust_id_trebel_progres2_turun_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres2_turun_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)


    elif progres == 3:

        if mode == "naik":

            trebel_1 = adjust_id_trebel_progres3_naik_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres3_naik_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)

        elif mode == "turun":

            trebel_1 = adjust_id_trebel_progres3_turun_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres3_turun_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)


    # Menutup koneksi database

    conn.close()


    # Cetak atau return hasil pengambilan data

    result = {

        "Bass_1": bass_1,

        "Trebel_1": trebel_1,

        "Bass_2": bass_2,

        "Trebel_2": trebel_2,

        "Bass_3": bass_3

    }


    return result


# Fungsi adjust untuk berbagai progres dan mode

def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(

            str(int(char) - 2) for char in new_id_value[1:]

        )

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(

            str(int(char) - 2) for char in new_id_value[1:]

        )

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(

            str(int(char) - 3) for char in new_id_value[1:]

        )

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(

            str(int(char) - 3) for char in new_id_value[1:]

        )

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def ambil_data_trebel(id, target_id, kolom):

    # Fungsi untuk mengambil data Trebel dari ID yang berbeda

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    query = f"""

        SELECT {kolom}

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (target_id,))

    data = cursor.fetchone()

    conn.close()

    return data[0]


# Integrasi ke dalam fungsi pilih_nada

def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())                

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()


        # Memanggil fungsi level_gn dengan parameter dari input pengguna

        hasil_nada = level_gn(id_selected, progres_selected, mode_selected)

        

        # Mengisi entry box atau widget tkinter dengan hasil

        entry_bass_1.delete(0, 'end')

        entry_bass_1.insert(0, hasil_nada['Bass_1'])


        entry_trebel_1.delete(0, 'end')

        entry_trebel_1.insert(0, hasil_nada['Trebel_1'])


        entry_bass_2.delete(0, 'end')

        entry_bass_2.insert(0, hasil_nada['Bass_2'])


        entry_trebel_2.delete(0, 'end')

        entry_trebel_2.insert(0, hasil_nada['Trebel_2'])


        entry_bass_3.delete(0, 'end')

        entry_bass_3.insert(0, hasil_nada['Bass_3'])


    except Exception as e:

        print(f"Terjadi kesalahan: {e}")

```


### Penjelasan:

1. **Fungsi `level_gn`**: Mengambil data dari database sesuai `ID`, `progres`, dan `mode`, lalu menghitung nilai bass dan trebel.

2. **Fungsi `pilih_nada`**: Mengambil input dari pengguna (`level_gn_selected`, `id_selected`, `progres_selected`, dan `mode_selected`) lalu memanggil `level_gn`. Hasilnya diisikan ke dalam `entry` yang sesuai di antarmuka tkinter.

Pastikan variabel seperti `entry_bass_1`, `entry_trebel_1`, dan sebagainya sudah terdefinisi dengan benar pada aplikasi tkinter Anda.


Itu dia yang saya maksud, tambahkan kode berikut ini pada kode tersebut agar data yang terpilih ditampilkan pada entry yang sesuai:


# Frame untuk ID dan progres

frame_top = tk.Frame(root)

frame_top.pack(pady=10)


label_level_gn = tk.Label(frame_top, text="Level_Gn:")

label_level_gn.grid(row=0, column=0, padx=5, pady=5)

entry_level_gn = tk.Entry(frame_top)

entry_level_gn.grid(row=0, column=1, padx=5, pady=5)


label_id = tk.Label(frame_top, text="ID:")

label_id.grid(row=1, column=0, padx=5, pady=5)

entry_id = tk.Entry(frame_top)

entry_id.grid(row=1, column=1, padx=5, pady=5)


label_progres = tk.Label(frame_top, text="Progres:")

label_progres.grid(row=2, column=0, padx=5, pady=5)

progres_var = tk.StringVar()

progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)

progres_combobox['values'] = (1, 2, 3)

progres_combobox.grid(row=2, column=1, padx=5, pady=5)


label_mode = tk.Label(frame_top, text="Mode:")

label_mode.grid(row=3, column=0, padx=5, pady=5)

mode_var = tk.StringVar()

mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var)

mode_combobox['values'] = ("Naik", "Turun")

mode_combobox.grid(row=3, column=1, padx=5, pady=5)


# Frame untuk hasil adaptasi

frame_bottom = tk.Frame(root)

frame_bottom.pack(pady=10)


# Tombol untuk memproses pemilihan nada

button_pilih_nada = tk.Button(frame_bottom, text="Pilih Nada", bg="#158aff", fg="white", command=pilih_nada)

button_pilih_nada.grid(row=5, column=1, padx=5, pady=5)


separator = ttk.Separator(frame_bottom, orient='horizontal')

separator.grid(row=6, column=0, sticky="ew", pady=15)




gugusan_nada_bass_1_label = tk.Label(frame_bottom, text="Bass_1")

gugusan_nada_bass_1_label.grid(row=7, column=1, padx=5, pady=5)

gugusan_nada_trebel_1_label = tk.Label(frame_bottom, text="Trebel_1")

gugusan_nada_trebel_1_label.grid(row=7, column=2, padx=5, pady=5)

gugusan_nada_bass_2_label = tk.Label(frame_bottom, text="Bass_2")

gugusan_nada_bass_2_label.grid(row=7, column=3, padx=5, pady=5)

gugusan_nada_trebel_2_label = tk.Label(frame_bottom, text="Trebel_2")

gugusan_nada_trebel_2_label.grid(row=7, column=4, padx=5, pady=5)

gugusan_nada_bass_3_label = tk.Label(frame_bottom, text="Bass_3")

gugusan_nada_bass_3_label.grid(row=7, column=5, padx=5, pady=5)


entry_bass_1 = tk.Entry(frame_bottom, bg="white")

entry_bass_1.grid(row=8, column=1, padx=5, pady=5)

entry_trebel_1 = tk.Entry(frame_bottom, bg="white")

entry_trebel_1.grid(row=8, column=2, padx=5, pady=5)

entry_bass_2 = tk.Entry(frame_bottom, bg="white")

entry_bass_2.grid(row=8, column=3, padx=5, pady=5)

entry_trebel_2 = tk.Entry(frame_bottom, bg="white")

entry_trebel_2.grid(row=8, column=4, padx=5, pady=5)

entry_bass_3 = tk.Entry(frame_bottom, bg="white")

entry_bass_3.grid(row=8, column=5, padx=5, pady=5)


Berikut adalah modifikasi kode lengkap yang mengintegrasikan kode pemilihan nada dan menampilkan hasil pemilihan ke dalam entry sesuai yang diminta. Kode yang telah kamu berikan sebelumnya telah dimodifikasi untuk menampilkan hasil data pada `entry_bass_1`, `entry_trebel_1`, `entry_bass_2`, `entry_trebel_2`, dan `entry_bass_3` setelah tombol "Pilih Nada" ditekan.


```python

import tkinter as tk

from tkinter import ttk

import sqlite3


root = tk.Tk()

root.title("Pilihan Nada")

root.geometry("600x400")


# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada

def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()


        # Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected

        result = level_gn(id_selected, progres_selected, mode_selected)


        # Tampilkan data ke dalam entry

        entry_bass_1.delete(0, tk.END)

        entry_bass_1.insert(0, result["Bass_1"])


        entry_trebel_1.delete(0, tk.END)

        entry_trebel_1.insert(0, result["Trebel_1"])


        entry_bass_2.delete(0, tk.END)

        entry_bass_2.insert(0, result["Bass_2"])


        entry_trebel_2.delete(0, tk.END)

        entry_trebel_2.insert(0, result["Trebel_2"])


        entry_bass_3.delete(0, tk.END)

        entry_bass_3.insert(0, result["Bass_3"])


    except Exception as e:

        print("Error:", e)


# Fungsi untuk mengambil data dari database dan mengatur trebel/bass sesuai progres dan mode

def level_gn(id, progres, mode):

    # Koneksi ke database

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    # Query untuk pengambilan data dari tabel Gn_Biru

    query = """

        SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (id,))

    data = cursor.fetchone()


    bass_1 = data[0]

    bass_2 = data[2]

    bass_3 = data[4]


    # Pengaturan Trebel berdasarkan progres dan mode

    if progres == 1:

        if mode == "naik" or mode == "turun":

            trebel_1 = data[1]

            trebel_2 = data[3]

    elif progres == 2:

        if mode == "naik":

            trebel_1 = adjust_id_trebel_progres2_naik_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres2_naik_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)

        elif mode == "turun":

            trebel_1 = adjust_id_trebel_progres2_turun_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres2_turun_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)

    elif progres == 3:

        if mode == "naik":

            trebel_1 = adjust_id_trebel_progres3_naik_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres3_naik_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)

        elif mode == "turun":

            trebel_1 = adjust_id_trebel_progres3_turun_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres3_turun_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)


    conn.close()


    # Return hasil

    result = {

        "Bass_1": bass_1,

        "Trebel_1": trebel_1,

        "Bass_2": bass_2,

        "Trebel_2": trebel_2,

        "Bass_3": bass_3

    }

    return result


# Fungsi adjust untuk berbagai progres dan mode

def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def ambil_data_trebel(id, target_id, kolom):

    # Fungsi untuk mengambil data Trebel dari ID yang berbeda

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    query = f"""

        SELECT {kolom}

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (target_id,))

    data = cursor.fetchone()

    conn.close()

    return data[0]


# Frame untuk ID dan progres

frame_top = tk.Frame(root)

frame_top.pack(pady=10)


label_level_gn = tk.Label(frame_top, text="Level_Gn:")

label_level_gn.grid(row=0, column=0, padx=5, pady=5)

entry_level_gn = tk.Entry(frame_top)

entry_level_gn.grid(row=0, column=1, padx=5, pady=5)


label_id = tk.Label(frame_top, text="ID:")

label_id.grid(row=1, column=0, padx=5, pady=5)

entry_id = tk.Entry(frame_top)

entry_id.grid(row=1, column=1, padx=5, pady=5)


label_progres = tk.Label(frame_top, text="Progres:")

label_progres.grid(row=2, column=0, padx=5, pady=5)

progres_var = tk.StringVar()

progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)

progres_combobox['values'] = (1, 2, 3)

progres_combobox.grid(row=2, column=1, padx=5, pady=5)


label_mode = tk.Label(frame_top, text="Mode:")

label_mode.grid(row=3, column=0, padx=5, pady=5)

mode_var = tk.StringVar()

mode_combobox


Setelah label_mode.grid() , lanjutkan kodenya hingga selesai 


Berikut adalah kode yang dilanjutkan setelah `label_mode.grid()` dengan tambahan frame dan elemen yang sudah disebutkan:


```python

# Frame untuk ID dan progres

frame_top = tk.Frame(root)

frame_top.pack(pady=10)


label_level_gn = tk.Label(frame_top, text="Level_Gn:")

label_level_gn.grid(row=0, column=0, padx=5, pady=5)

entry_level_gn = tk.Entry(frame_top)

entry_level_gn.grid(row=0, column=1, padx=5, pady=5)


label_id = tk.Label(frame_top, text="ID:")

label_id.grid(row=1, column=0, padx=5, pady=5)

entry_id = tk.Entry(frame_top)

entry_id.grid(row=1, column=1, padx=5, pady=5)


label_progres = tk.Label(frame_top, text="Progres:")

label_progres.grid(row=2, column=0, padx=5, pady=5)

progres_var = tk.StringVar()

progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)

progres_combobox['values'] = (1, 2, 3)

progres_combobox.grid(row=2, column=1, padx=5, pady=5)


label_mode = tk.Label(frame_top, text="Mode:")

label_mode.grid(row=3, column=0, padx=5, pady=5)

mode_var = tk.StringVar()

mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var)

mode_combobox['values'] = ("Naik", "Turun")

mode_combobox.grid(row=3, column=1, padx=5, pady=5)


# Frame untuk hasil adaptasi

frame_bottom = tk.Frame(root)

frame_bottom.pack(pady=10)


# Tombol untuk memproses pemilihan nada

button_pilih_nada = tk.Button(frame_bottom, text="Pilih Nada", bg="#158aff", fg="white", command=pilih_nada)

button_pilih_nada.grid(row=5, column=1, padx=5, pady=5)


separator = ttk.Separator(frame_bottom, orient='horizontal')

separator.grid(row=6, column=0, sticky="ew", pady=15)


# Labels dan Entry untuk Bass dan Trebel

gugusan_nada_bass_1_label = tk.Label(frame_bottom, text="Bass_1")

gugusan_nada_bass_1_label.grid(row=7, column=1, padx=5, pady=5)

gugusan_nada_trebel_1_label = tk.Label(frame_bottom, text="Trebel_1")

gugusan_nada_trebel_1_label.grid(row=7, column=2, padx=5, pady=5)

gugusan_nada_bass_2_label = tk.Label(frame_bottom, text="Bass_2")

gugusan_nada_bass_2_label.grid(row=7, column=3, padx=5, pady=5)

gugusan_nada_trebel_2_label = tk.Label(frame_bottom, text="Trebel_2")

gugusan_nada_trebel_2_label.grid(row=7, column=4, padx=5, pady=5)

gugusan_nada_bass_3_label = tk.Label(frame_bottom, text="Bass_3")

gugusan_nada_bass_3_label.grid(row=7, column=5, padx=5, pady=5)


# Entry box untuk Bass dan Trebel

entry_bass_1 = tk.Entry(frame_bottom, bg="white")

entry_bass_1.grid(row=8, column=1, padx=5, pady=5)

entry_trebel_1 = tk.Entry(frame_bottom, bg="white")

entry_trebel_1.grid(row=8, column=2, padx=5, pady=5)

entry_bass_2 = tk.Entry(frame_bottom, bg="white")

entry_bass_2.grid(row=8, column=3, padx=5, pady=5)

entry_trebel_2 = tk.Entry(frame_bottom, bg="white")

entry_trebel_2.grid(row=8, column=4, padx=5, pady=5)

entry_bass_3 = tk.Entry(frame_bottom, bg="white")

entry_bass_3.grid(row=8, column=5, padx=5, pady=5)


# Fungsi pilih_nada untuk mengambil dan menampilkan data

def pilih_nada():

    # Ambil nilai dari combobox dan entry

    id_value = entry_id.get()

    level_gn_value = entry_level_gn.get()

    progres_value = progres_var.get()

    mode_value = mode_var.get()


    # Lakukan pemrosesan data atau pemilihan nada sesuai progres, mode, dll.

    # Misalkan ambil data dari database atau lakukan kalkulasi untuk nada


    # Set hasil ke entry yang sesuai

    entry_bass_1.insert(0, "Nada_Bass_1") # Contoh hasil Bass 1

    entry_trebel_1.insert(0, "Nada_Trebel_1") # Contoh hasil Trebel 1

    entry_bass_2.insert(0, "Nada_Bass_2") # Contoh hasil Bass 2

    entry_trebel_2.insert(0, "Nada_Trebel_2") # Contoh hasil Trebel 2

    entry_bass_3.insert(0, "Nada_Bass_3") # Contoh hasil Bass 3

```


Kode ini menambahkan elemen-elemen yang diinginkan, yaitu combobox untuk pemilihan progres dan mode, tombol untuk memproses pemilihan nada, serta entry untuk menampilkan hasil nada pada bass dan trebel yang diambil dari hasil kalkulasi atau pengambilan data. Fungsi `pilih_nada` akan dijalankan saat tombol "Pilih Nada" ditekan, dan hasilnya akan dimasukkan ke dalam entry sesuai dengan kolom yang diinginkan.


Kira kira kodenya seperti berikut ini:


import tkinter as tk

from tkinter import ttk

import sqlite3


root = tk.Tk()

root.title("Pilihan Nada")

root.geometry("600x400")


# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada

def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()


        # Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected

        result = level_gn(id_selected, progres_selected, mode_selected)


        # Tampilkan data ke dalam entry

        entry_bass_1.delete(0, tk.END)

        entry_bass_1.insert(0, result["Bass_1"])


        entry_trebel_1.delete(0, tk.END)

        entry_trebel_1.insert(0, result["Trebel_1"])


        entry_bass_2.delete(0, tk.END)

        entry_bass_2.insert(0, result["Bass_2"])


        entry_trebel_2.delete(0, tk.END)

        entry_trebel_2.insert(0, result["Trebel_2"])


        entry_bass_3.delete(0, tk.END)

        entry_bass_3.insert(0, result["Bass_3"])


    except Exception as e:

        print("Error:", e)


# Fungsi untuk mengambil data dari database dan mengatur trebel/bass sesuai progres dan mode

def level_gn(id, progres, mode):

    # Koneksi ke database

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    # Query untuk pengambilan data dari tabel Gn_Biru

    query = """

        SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (id,))

    data = cursor.fetchone()


    bass_1 = data[0]

    bass_2 = data[2]

    bass_3 = data[4]


    # Pengaturan Trebel berdasarkan progres dan mode

    if progres == 1:

        if mode == "naik" or mode == "turun":

            trebel_1 = data[1]

            trebel_2 = data[3]

    elif progres == 2:

        if mode == "naik":

            trebel_1 = adjust_id_trebel_progres2_naik_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres2_naik_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)

        elif mode == "turun":

            trebel_1 = adjust_id_trebel_progres2_turun_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres2_turun_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)

    elif progres == 3:

        if mode == "naik":

            trebel_1 = adjust_id_trebel_progres3_naik_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 2)

            trebel_2 = adjust_id_trebel_progres3_naik_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 2)

        elif mode == "turun":

            trebel_1 = adjust_id_trebel_progres3_turun_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 2)

            trebel_2 = adjust_id_trebel_progres3_turun_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 2)


    conn.close()


    # Return hasil

    result = {

        "Bass_1": bass_1,

        "Trebel_1": trebel_1,

        "Bass_2": bass_2,

        "Trebel_2": trebel_2,

        "Bass_3": bass_3

    }

    return result


# Fungsi adjust untuk berbagai progres dan mode

def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def ambil_data_trebel(id, target_id, kolom):

    # Fungsi untuk mengambil data Trebel dari ID yang berbeda

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    query = f"""

        SELECT {kolom}

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (target_id,))

    data = cursor.fetchone()

    conn.close()

    return data[0]


# Frame untuk ID dan progres

frame_top = tk.Frame(root)

frame_top.pack(pady=10)


# Letakkan entry dan combobox di bawah 

label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")

label_level_gn_selected.grid(row=1, column=0, padx=0, pady=7)

entry_level_gn = tk.Entry(frame_top)

entry_level_gn.grid(row=1, column=1, padx=0, pady=7)


label_id_selected = tk.Label(frame_top, text="ID:")

label_id_selected.grid(row=2, column=0, padx=0, pady=7)

entry_id = tk.Entry(frame_top)

entry_id.grid(row=2, column=1, padx=0, pady=7)


label_progres = tk.Label(frame_top, text="Progres:")

label_progres.grid(row=3, column=0, padx=0, pady=7)

progres_var = tk.StringVar()

progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)

progres_combobox['values'] = (1, 2, 3)

progres_combobox.grid(row=3, column=1, padx=0, pady=7)


label_mode = tk.Label(frame_top, text="Mode:")

label_mode.grid(row=4, column=0, padx=0, pady=7)

mode_var = tk.StringVar()

mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])

mode_combobox.grid(row=4, column=1, padx=0, pady=7)


# Frame untuk hasil adaptasi

frame_bottom = tk.Frame(root)

frame_bottom.pack(pady=10)


# Tombol untuk memproses pemilihan nada

button_pilih_nada = tk.Button(frame_bottom, text="Pilih Nada", bg="#158aff", fg="white", command=pilih_nada)

button_pilih_nada.grid(row=5, column=1, padx=5, pady=5)


separator = ttk.Separator(frame_bottom, orient='horizontal')

separator.grid(row=6, column=0, sticky="ew", pady=15)


# Labels dan Entry untuk Bass dan Trebel

gugusan_nada_bass_1_label = tk.Label(frame_bottom, text="Bass_1")

gugusan_nada_bass_1_label.grid(row=7, column=1, padx=5, pady=5)

gugusan_nada_trebel_1_label = tk.Label(frame_bottom, text="Trebel_1")

gugusan_nada_trebel_1_label.grid(row=7, column=2, padx=5, pady=5)

gugusan_nada_bass_2_label = tk.Label(frame_bottom, text="Bass_2")

gugusan_nada_bass_2_label.grid(row=7, column=3, padx=5, pady=5)

gugusan_nada_trebel_2_label = tk.Label(frame_bottom, text="Trebel_2")

gugusan_nada_trebel_2_label.grid(row=7, column=4, padx=5, pady=5)

gugusan_nada_bass_3_label = tk.Label(frame_bottom, text="Bass_3")

gugusan_nada_bass_3_label.grid(row=7, column=5, padx=5, pady=5)


# Entry box untuk Bass dan Trebel

entry_bass_1 = tk.Entry(frame_bottom, bg="white")

entry_bass_1.grid(row=8, column=1, padx=5, pady=5)

entry_trebel_1 = tk.Entry(frame_bottom, bg="white")

entry_trebel_1.grid(row=8, column=2, padx=5, pady=5)

entry_bass_2 = tk.Entry(frame_bottom, bg="white")

entry_bass_2.grid(row=8, column=3, padx=5, pady=5)

entry_trebel_2 = tk.Entry(frame_bottom, bg="white")

entry_trebel_2.grid(row=8, column=4, padx=5, pady=5)

entry_bass_3 = tk.Entry(frame_bottom, bg="white")

entry_bass_3.grid(row=8, column=5, padx=5, pady=5)



root.mainloop()      


Namun untuk level_gn yang berbeda perlu ditentukan nilai data terpilih pada setiap level_gn yang berbeda tersebut dimulai dari level_gn 1 hingga level_gn 12 (level_gn ada sebanyak 12) .


Maksud saya, pada tabel gn_biru memiliki level_gn sebanyak 12 yang dimulai dari level_gn 1 hingga level_gn 12. Data yang ada pada tabel gn_biru tersebut bila user memilih salah satu data dari sebuah sel katakanlah user menginput level_gn = 1 maka level_gn 1 itu adalah sebagai level_gn_current, lalu di level_gn berikutnya yaitu level_gn_current +1 maka semua data di setiap digit akan berkurang 1 baik data Bass maupun Trebel, dan seterusnya bila level_gn berikutnya adalah level_gn_current +11 maka semua data di setiap digit akan berkurang 11 baik data Bass maupun Trebel.


Baik, jika yang dimaksud adalah modifikasi data pada tabel `gn_biru` di mana ketika user memilih suatu **level_gn_current**, kemudian pada **level_gn berikutnya** (yaitu level_gn_current + 1, + 2, dst.) setiap digit dari data Bass maupun Trebel akan berkurang sesuai dengan selisih level_gn tersebut, maka kita bisa mendesain fungsi yang melakukan hal tersebut.


Logika yang diterapkan adalah:

1. **Data Level_Gn Current**: Saat user memilih **level_gn_current**, data pada level tersebut tetap.

2. **Level_Gn Berikutnya**: Mulai dari **level_gn_current + 1** hingga **level_gn_current + 11**, setiap digit data di kolom Bass dan Trebel akan dikurangi dengan angka selisih level_gn saat ini dengan level_gn_current.

Berikut adalah contoh kode fungsi yang bisa digunakan untuk melakukan pembaruan data pada level-level yang dimaksud:

### Fungsi untuk Memperbarui Data pada Level_Gn Berikutnya


```python

import sqlite3


def update_gn_biru(level_gn_current):

    # Membuka koneksi ke database

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()

    

    # Ambil data dari level_gn_current untuk dijadikan referensi

    cursor.execute("SELECT Bass, Trebel FROM gn_biru WHERE Level_Gn = ?", (level_gn_current,))

    result = cursor.fetchone()

    

    if result is None:

        print(f"Level_Gn {level_gn_current} tidak ditemukan.")

        return

    

    bass_current, trebel_current = result

    

    # Loop melalui level berikutnya dari level_gn_current + 1 hingga level_gn_current + 11

    for level_offset in range(1, 12):

        level_gn_next = level_gn_current + level_offset

        

        # Ambil data Bass dan Trebel dari level_gn berikutnya

        cursor.execute("SELECT Bass, Trebel FROM gn_biru WHERE Level_Gn = ?", (level_gn_next,))

        result_next = cursor.fetchone()

        

        if result_next is None:

            print(f"Level_Gn {level_gn_next} tidak ditemukan.")

            continue

        

        bass_next, trebel_next = result_next

        

        # Mengurangi setiap digit di Bass dan Trebel dengan level_offset

        bass_next_updated = ''.join(str(int(char) - level_offset) for char in bass_next if char.isdigit())

        trebel_next_updated = ''.join(str(int(char) - level_offset) for char in trebel_next if char.isdigit())

        

        # Update data yang sudah diubah pada level_gn berikutnya

        cursor.execute("""

            UPDATE gn_biru

            SET Bass = ?, Trebel = ?

            WHERE Level_Gn = ?

        """, (bass_next_updated, trebel_next_updated, level_gn_next))

    

    # Commit perubahan dan tutup koneksi

    conn.commit()

    conn.close()


# Contoh penggunaan fungsi

level_gn_current = 1 # Contoh level_gn_current

update_gn_biru(level_gn_current)

```


### Penjelasan Kode:

1. **Koneksi Database**: Program menghubungkan ke database `DATAMUSIK.db` untuk mengakses tabel `gn_biru`.

2. **Mengambil Data Awal**: Data **Bass** dan **Trebel** dari **level_gn_current** diambil terlebih dahulu sebagai referensi awal.

3. **Looping untuk Level Berikutnya**: Kemudian, dilakukan looping dari level **level_gn_current + 1** hingga **level_gn_current + 11**. Pada setiap iterasi:

   - Data dari level tersebut diambil.

   - Setiap digit dalam kolom **Bass** dan **Trebel** akan dikurangi dengan angka selisih (yaitu level_gn berikutnya - level_gn_current).

   - Setelah data diperbarui, nilai tersebut disimpan kembali ke tabel dengan `UPDATE`.

4. **Commit dan Close**: Setelah seluruh data diperbarui, perubahan disimpan dengan `commit()` dan koneksi ditutup.

### Penyesuaian:

Jika format atau struktur data pada kolom **Bass** dan **Trebel** lebih kompleks (misalnya terdapat karakter non-angka), maka fungsi ini dapat dimodifikasi untuk menangani situasi tersebut.

Apakah logika ini sudah sesuai dengan yang diharapkan, atau perlu ada penyesuaian lebih lanjut?


Tolong applikasikan kode berikut:

import sqlite3


def update_gn_biru(level_gn_current):

    # Membuka koneksi ke database

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()

    

    # Ambil data dari level_gn_current untuk dijadikan referensi

    cursor.execute("SELECT Bass, Trebel FROM gn_biru WHERE Level_Gn = ?", (level_gn_current,))

    result = cursor.fetchone()

    

    if result is None:

        print(f"Level_Gn {level_gn_current} tidak ditemukan.")

        return

    

    bass_current, trebel_current = result

    

    # Loop melalui level berikutnya dari level_gn_current + 1 hingga level_gn_current + 11

    for level_offset in range(1, 12):

        level_gn_next = level_gn_current + level_offset

        

        # Ambil data Bass dan Trebel dari level_gn berikutnya

        cursor.execute("SELECT Bass, Trebel FROM gn_biru WHERE Level_Gn = ?", (level_gn_next,))

        result_next = cursor.fetchone()

        

        if result_next is None:

            print(f"Level_Gn {level_gn_next} tidak ditemukan.")

            continue

        

        bass_next, trebel_next = result_next

        

        # Mengurangi setiap digit di Bass dan Trebel dengan level_offset

        bass_next_updated = ''.join(str(int(char) - level_offset) for char in bass_next if char.isdigit())

        trebel_next_updated = ''.join(str(int(char) - level_offset) for char in trebel_next if char.isdigit())

        

        # Update data yang sudah diubah pada level_gn berikutnya

        cursor.execute("""

            UPDATE gn_biru

            SET Bass = ?, Trebel = ?

            WHERE Level_Gn = ?

        """, (bass_next_updated, trebel_next_updated, level_gn_next))

    

    # Commit perubahan dan tutup koneksi

    conn.commit()

    conn.close()


# Contoh penggunaan fungsi

level_gn_current = 1 # Contoh level_gn_current

update_gn_biru(level_gn_current)


Terhadap kode yang ini:

import tkinter as tk

from tkinter import ttk

import sqlite3


root = tk.Tk()

root.title("Pilihan Nada")

root.geometry("600x400")


# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada

def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()


        # Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected

        result = level_gn(id_selected, progres_selected, mode_selected)


        # Tampilkan data ke dalam entry

        entry_bass_1.delete(0, tk.END)

        entry_bass_1.insert(0, result["Bass_1"])


        entry_trebel_1.delete(0, tk.END)

        entry_trebel_1.insert(0, result["Trebel_1"])


        entry_bass_2.delete(0, tk.END)

        entry_bass_2.insert(0, result["Bass_2"])


        entry_trebel_2.delete(0, tk.END)

        entry_trebel_2.insert(0, result["Trebel_2"])


        entry_bass_3.delete(0, tk.END)

        entry_bass_3.insert(0, result["Bass_3"])


    except Exception as e:

        print("Error:", e)


# Fungsi untuk mengambil data dari database dan mengatur trebel/bass sesuai progres dan mode

def level_gn(id, progres, mode):

    # Koneksi ke database

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    # Query untuk pengambilan data dari tabel Gn_Biru

    query = """

        SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (id,))

    data = cursor.fetchone()


    bass_1 = data[0]

    bass_2 = data[2]

    bass_3 = data[4]


    # Pengaturan Trebel berdasarkan progres dan mode

    if progres == 1:

        if mode == "naik" or mode == "turun":

            trebel_1 = data[1]

            trebel_2 = data[3]

    elif progres == 2:

        if mode == "naik":

            trebel_1 = adjust_id_trebel_progres2_naik_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres2_naik_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)

        elif mode == "turun":

            trebel_1 = adjust_id_trebel_progres2_turun_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres2_turun_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)

    elif progres == 3:

        if mode == "naik":

            trebel_1 = adjust_id_trebel_progres3_naik_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 2)

            trebel_2 = adjust_id_trebel_progres3_naik_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 2)

        elif mode == "turun":

            trebel_1 = adjust_id_trebel_progres3_turun_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 2)

            trebel_2 = adjust_id_trebel_progres3_turun_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 2)


    conn.close()


    # Return hasil

    result = {

        "Bass_1": bass_1,

        "Trebel_1": trebel_1,

        "Bass_2": bass_2,

        "Trebel_2": trebel_2,

        "Bass_3": bass_3

    }

    return result


# Fungsi adjust untuk berbagai progres dan mode

def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def ambil_data_trebel(id, target_id, kolom):

    # Fungsi untuk mengambil data Trebel dari ID yang berbeda

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    query = f"""

        SELECT {kolom}

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (target_id,))

    data = cursor.fetchone()

    conn.close()

    return data[0]


# Frame untuk ID dan progres

frame_top = tk.Frame(root)

frame_top.pack(pady=10)


# Letakkan entry dan combobox di bawah 

label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")

label_level_gn_selected.grid(row=1, column=0, padx=0, pady=7)

entry_level_gn = tk.Entry(frame_top)

entry_level_gn.grid(row=1, column=1, padx=0, pady=7)


label_id_selected = tk.Label(frame_top, text="ID:")

label_id_selected.grid(row=2, column=0, padx=0, pady=7)

entry_id = tk.Entry(frame_top)

entry_id.grid(row=2, column=1, padx=0, pady=7)


label_progres = tk.Label(frame_top, text="Progres:")

label_progres.grid(row=3, column=0, padx=0, pady=7)

progres_var = tk.StringVar()

progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)

progres_combobox['values'] = (1, 2, 3)

progres_combobox.grid(row=3, column=1, padx=0, pady=7)


label_mode = tk.Label(frame_top, text="Mode:")

label_mode.grid(row=4, column=0, padx=0, pady=7)

mode_var = tk.StringVar()

mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])

mode_combobox.grid(row=4, column=1, padx=0, pady=7)


# Frame untuk hasil adaptasi

frame_bottom = tk.Frame(root)

frame_bottom.pack(pady=10)


# Tombol untuk memproses pemilihan nada

button_pilih_nada = tk.Button(frame_bottom, text="Pilih Nada", bg="#158aff", fg="white", command=pilih_nada)

button_pilih_nada.grid(row=5, column=1, padx=5, pady=5)


separator = ttk.Separator(frame_bottom, orient='horizontal')

separator.grid(row=6, column=0, sticky="ew", pady=15)


# Labels dan Entry untuk Bass dan Trebel

gugusan_nada_bass_1_label = tk.Label(frame_bottom, text="Bass_1")

gugusan_nada_bass_1_label.grid(row=7, column=1, padx=5, pady=5)

gugusan_nada_trebel_1_label = tk.Label(frame_bottom, text="Trebel_1")

gugusan_nada_trebel_1_label.grid(row=7, column=2, padx=5, pady=5)

gugusan_nada_bass_2_label = tk.Label(frame_bottom, text="Bass_2")

gugusan_nada_bass_2_label.grid(row=7, column=3, padx=5, pady=5)

gugusan_nada_trebel_2_label = tk.Label(frame_bottom, text="Trebel_2")

gugusan_nada_trebel_2_label.grid(row=7, column=4, padx=5, pady=5)

gugusan_nada_bass_3_label = tk.Label(frame_bottom, text="Bass_3")

gugusan_nada_bass_3_label.grid(row=7, column=5, padx=5, pady=5)


# Entry box untuk Bass dan Trebel

entry_bass_1 = tk.Entry(frame_bottom, bg="white")

entry_bass_1.grid(row=8, column=1, padx=5, pady=5)

entry_trebel_1 = tk.Entry(frame_bottom, bg="white")

entry_trebel_1.grid(row=8, column=2, padx=5, pady=5)

entry_bass_2 = tk.Entry(frame_bottom, bg="white")

entry_bass_2.grid(row=8, column=3, padx=5, pady=5)

entry_trebel_2 = tk.Entry(frame_bottom, bg="white")

entry_trebel_2.grid(row=8, column=4, padx=5, pady=5)

entry_bass_3 = tk.Entry(frame_bottom, bg="white")

entry_bass_3.grid(row=8, column=5, padx=5, pady=5)


root.mainloop()      


Agar supaya data yang terpilih baik data Bass maupun data Trebel di setiap level_gn yang berbeda dapat ditampilkan berdasarkan level_gn, id, progres, dan mode, ditampilkan pada entry yang sesuai.


Berikut adalah penggabungan dari kedua bagian kode yang Anda berikan. Saya akan menjelaskan bagaimana kode pembaruan data di database dan tampilan GUI bekerja bersama untuk memungkinkan pengguna memilih `Level_Gn`, `ID`, `Progres`, dan `Mode`, kemudian menampilkan dan memperbarui data `Bass` dan `Trebel` yang relevan.


```python

import tkinter as tk

from tkinter import ttk

import sqlite3


root = tk.Tk()

root.title("Pilihan Nada")

root.geometry("600x400")


# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada

def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()


        # Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected

        result = level_gn(id_selected, progres_selected, mode_selected)


        # Tampilkan data ke dalam entry

        entry_bass_1.delete(0, tk.END)

        entry_bass_1.insert(0, result["Bass_1"])


        entry_trebel_1.delete(0, tk.END)

        entry_trebel_1.insert(0, result["Trebel_1"])


        entry_bass_2.delete(0, tk.END)

        entry_bass_2.insert(0, result["Bass_2"])


        entry_trebel_2.delete(0, tk.END)

        entry_trebel_2.insert(0, result["Trebel_2"])


        entry_bass_3.delete(0, tk.END)

        entry_bass_3.insert(0, result["Bass_3"])


    except Exception as e:

        print("Error:", e)


# Fungsi untuk mengambil data dari database dan mengatur trebel/bass sesuai progres dan mode

def level_gn(id, progres, mode):

    # Koneksi ke database

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    # Query untuk pengambilan data dari tabel Gn_Biru

    query = """

        SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (id,))

    data = cursor.fetchone()


    bass_1 = data[0]

    bass_2 = data[2]

    bass_3 = data[4]


    # Pengaturan Trebel berdasarkan progres dan mode

    if progres == 1:

        trebel_1 = data[1]

        trebel_2 = data[3]

    elif progres == 2:

        if mode == "naik":

            trebel_1 = adjust_id_trebel_progres2_naik_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres2_naik_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)

        elif mode == "turun":

            trebel_1 = adjust_id_trebel_progres2_turun_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres2_turun_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)

    elif progres == 3:

        if mode == "naik":

            trebel_1 = adjust_id_trebel_progres3_naik_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 2)

            trebel_2 = adjust_id_trebel_progres3_naik_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 2)

        elif mode == "turun":

            trebel_1 = adjust_id_trebel_progres3_turun_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 2)

            trebel_2 = adjust_id_trebel_progres3_turun_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 2)


    conn.close()


    # Return hasil

    result = {

        "Bass_1": bass_1,

        "Trebel_1": trebel_1,

        "Bass_2": bass_2,

        "Trebel_2": trebel_2,

        "Bass_3": bass_3

    }

    return result


# Fungsi adjust untuk berbagai progres dan mode

def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def ambil_data_trebel(id, target_id, kolom):

    # Fungsi untuk mengambil data Trebel dari ID yang berbeda

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    query = f"""

        SELECT {kolom}

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (target_id,))

    data = cursor.fetchone()

    conn.close()

    return data[0]


# Frame untuk ID dan progres

frame_top = tk.Frame(root)

frame_top.pack(pady=10)


# Letakkan entry dan combobox di bawah 

label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")

label_level_gn_selected.grid(row=1, column=0, padx=0, pady=7)

entry_level_gn = tk.Entry(frame_top)

entry_level_gn.grid(row=1, column=1, padx=0, pady=7)


label_id_selected = tk.Label(frame_top, text="ID:")

label_id_selected.grid(row=2, column=0, padx=0, pady=7)

entry_id = tk.Entry(frame_top)

entry_id.grid(row=2, column=1, padx=0, pady=7)


label_progres = tk.Label(frame_top, text="Progres:")

label_progres.grid(row=3, column=0, padx=0, pady=7)

progres_var = tk.StringVar()

progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)

progres_combobox['values'] = (1, 2, 3)

progres_combobox.grid(row=3, column=1, padx=0, pady=7)


label_mode = tk.Label(frame_top, text="Mode:")

label_mode.grid(row=4, column=0, padx=0, pady=7)

mode_var = tk.StringVar()

mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])

mode_combobox.grid(row=4, column=1, padx=0, pady=7)


# Frame untuk menampilkan hasil Bass dan Trebel

frame_bottom = tk.Frame(root)

frame_bottom.pack(pady=20)


# Bass 1

label_bass_1 = tk.Label(frame_bottom, text="Bass 1:")

label_bass_1.grid(row=0, column=0, padx=10, pady=5)

entry_bass_1 = tk.Entry(frame_bottom)

entry_bass_1.grid(row=0, column=1, padx=10, pady=5)


# Trebel 1

label_trebel_1 = tk.Label(frame_bottom, text="Trebel 1:")

label_trebel_1.grid(row=1, column=0, padx=10, pady=5)

entry_trebel_1 = tk.Entry(frame_bottom)

entry_trebel_1.grid(row=1, column=1, padx=10, pady=5)


# Bass 2

label_bass_2 = tk.Label(frame_bottom, text="Bass 2:")

label_bass_2.grid(row=2, column=0, padx=10, pady=5)

entry_bass_2 = tk.Entry(frame_bottom)

entry_bass_2.grid(row=2, column=1, padx=10, pady=5)


# Trebel 2

label_trebel_2 = tk.Label(frame_bottom, text="Trebel 2:")

label_trebel_2.grid(row=3, column=0, padx=10, pady=5)

entry_trebel_2 = tk.Entry(frame_bottom)

entry_trebel_2.grid(row=3, column=1, padx=10, pady=5)


# Bass 3

label_bass_3 = tk.Label(frame_bottom, text="Bass 3:")

label_bass_3.grid(row=4, column=0, padx=10, pady=5)

entry_bass_3 = tk.Entry(frame_bottom)

entry_bass_3.grid(row=4, column=1, padx=10, pady=5)


# Tombol untuk memanggil fungsi pilih_nada

tombol_pilih_nada = tk.Button(root, text="Pilih Nada", bg="blue", fg="white", command=pilih_nada)

tombol_pilih_nada.pack(pady=20)


root.mainloop()


Penjelasan tambahan:

1. Frame Top berisi input Entry untuk ID dan level, serta Combobox untuk progres dan mode.

2. Frame Bottom berisi beberapa Entry untuk menampilkan hasil dari Bass dan Trebel yang diambil dari database setelah pengguna memilih nada.

3. Tombol "Pilih Nada" akan menjalankan fungsi pilih_nada() yang mengambil data dari database dan menampilkan hasilnya pada Entry sesuai dengan logika mode dan progres yang telah dibuat.Dengan pengaturan ini, aplikasi dapat menampilkan dan memanipulasi data Bass dan Trebel sesuai dengan mode, progres, dan level yang dipilih.


Jadi setiap data yang terpilih yaitu bila data Bass yang terpilih di level_gn berikutnya maka data Bass tersebut akan berubah (berkurang) menurut level_gn berikutnya saja, lalu bila data Bass yang terpilih di level_gn current maka data Bass tersebut akan tetap pada setiap progres, dan mode.

Sedangkan setiap data yang terpilih yaitu bila data Trebel yang terpilih di level_gn berikutnya maka data Trebel tersebut akan berubah (berkurang) menurut level_gn berikutnya, progres, dan mode, lalu bila data Trebel yang terpilih di level_gn current maka data Trebel tersebut akan berubah (berkurang) berdasarkan progres, dan mode

.

Berikut adalah penjelasan dari logika yang kamu jelaskan mengenai pengambilan dan perubahan data **Bass** dan **Trebel** pada level_gn, progres, dan mode:

### **Logika untuk Data Bass:**

1. **Level_Gn Current (Saat Ini):**

   - Ketika data **Bass** terpilih pada **Level_Gn current**, data **Bass** tersebut **tetap sama** di semua progres dan mode.

   - Artinya, tidak ada perubahan pada data Bass untuk level yang sedang aktif di progres manapun, meskipun mode berubah.

2. **Level_Gn Berikutnya:**

   - Ketika data **Bass** terpilih pada **Level_Gn berikutnya** (Level setelah current), data **Bass** tersebut akan **berkurang**.

   - Pengurangannya hanya berdasarkan **Level_Gn** berikutnya saja, tanpa terpengaruh progres atau mode.

   - Jadi, setiap perubahan data Bass hanya terjadi pada perpindahan ke Level_Gn yang baru, dan tidak dipengaruhi oleh progres atau mode.


### **Logika untuk Data Trebel:**

1. **Level_Gn Current (Saat Ini):**

   - Ketika data **Trebel** terpilih pada **Level_Gn current**, data **Trebel** tersebut akan **berubah** sesuai dengan **progres dan mode** yang dipilih.

   - Artinya, meskipun Level_Gn tidak berubah, data Trebel akan tetap berubah sesuai dengan progres atau mode yang aktif pada saat itu.

2. **Level_Gn Berikutnya:**

   - Ketika data **Trebel** terpilih pada **Level_Gn berikutnya**, data **Trebel** akan **berkurang**.

   - Pengurangannya didasarkan pada **Level_Gn berikutnya**, serta dipengaruhi oleh **progres** dan **mode**.

   - Jadi, selain dipengaruhi oleh Level_Gn yang baru, data Trebel juga akan mengalami perubahan tambahan berdasarkan progres dan mode yang sedang aktif.


### **Ringkasan:**

- **Bass:** 

  - Tidak berubah pada level_gn current di setiap progres dan mode.

  - Berkurang pada level_gn berikutnya tanpa memperhatikan progres dan mode.

- **Trebel:**

  - Berubah sesuai progres dan mode pada level_gn current.

  - Berkurang pada level_gn berikutnya, dan perubahan ini dipengaruhi juga oleh progres dan mode.

Untuk implementasinya, kita perlu memastikan bahwa logika ini diterapkan saat pengguna berpindah antara level_gn, progres, dan mode yang berbeda. Apakah sudah ada aturan yang lebih spesifik terkait bagaimana data ini berubah, seperti karakter angka yang dikurangi, atau detail lain yang harus diperhatikan?


Pada kode berikut ini:

import tkinter as tk

from tkinter import ttk

import sqlite3


root = tk.Tk()

root.title("Pilihan Nada")

root.geometry("600x400")


def update_gn_biru(level_gn_current):

    # Membuka koneksi ke database

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()

    

    # Ambil data dari level_gn_current untuk dijadikan referensi

    cursor.execute("SELECT Bass, Trebel FROM gn_biru WHERE Level_Gn = ?", (level_gn_current,))

    result = cursor.fetchone()

    

    if result is None:

        print(f"Level_Gn {level_gn_current} tidak ditemukan.")

        return

    

    bass_current, trebel_current = result

    

    # Loop melalui level berikutnya dari level_gn_current + 1 hingga level_gn_current + 11

    for level_offset in range(1, 12):

        level_gn_next = level_gn_current + level_offset

        

        # Ambil data Bass dan Trebel dari level_gn berikutnya

        cursor.execute("SELECT Bass, Trebel FROM gn_biru WHERE Level_Gn = ?", (level_gn_next,))

        result_next = cursor.fetchone()

        

        if result_next is None:

            print(f"Level_Gn {level_gn_next} tidak ditemukan.")

            continue

        

        bass_next, trebel_next = result_next

        

        # Mengurangi setiap digit di Bass dan Trebel dengan level_offset

        bass_next_updated = ''.join(str(int(char) - level_offset) for char in bass_next if char.isdigit())

        trebel_next_updated = ''.join(str(int(char) - level_offset) for char in trebel_next if char.isdigit())

        

        # Update data yang sudah diubah pada level_gn berikutnya

        cursor.execute("""

            UPDATE gn_biru

            SET Bass = ?, Trebel = ?

            WHERE Level_Gn = ?

        """, (bass_next_updated, trebel_next_updated, level_gn_next))

    

    # Commit perubahan dan tutup koneksi

    conn.commit()

    conn.close()


# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada

def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()

        level_offset = int(entry_level_gn_next.get()) - level_gn_selected

        

        # Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected

        result = level_gn(id_selected, progres_selected, mode_selected, level_offset)


        # Tampilkan data ke dalam entry

        entry_bass_1.delete(0, tk.END)

        entry_bass_1.insert(0, result["Bass_1"])


        entry_trebel_1.delete(0, tk.END)

        entry_trebel_1.insert(0, result["Trebel_1"])


        entry_bass_2.delete(0, tk.END)

        entry_bass_2.insert(0, result["Bass_2"])


        entry_trebel_2.delete(0, tk.END)

        entry_trebel_2.insert(0, result["Trebel_2"])


        entry_bass_3.delete(0, tk.END)

        entry_bass_3.insert(0, result["Bass_3"])


    except Exception as e:

        print("Error:", e)


# Fungsi untuk mengambil data dari database dan mengatur trebel/bass sesuai progres dan mode

def level_gn(id, progres, mode, level_offset):

    # Koneksi ke database

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    # Query untuk pengambilan data dari tabel Gn_Biru

    query = """

        SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (id,))

    data = cursor.fetchone()


    if data is None:

        print(f"Data untuk ID {id} tidak ditemukan.")

        return {"Bass_1": "", "Trebel_1": "", "Bass_2": "", "Trebel_2": "", "Bass_3": ""}

    

    bass_1 = data[0]

    bass_2 = data[2]

    bass_3 = data[4]


    # Pengaturan Trebel berdasarkan progres dan mode

    if progres == 1:

        if mode == "naik" or mode == "turun":

            trebel_1 = data[1]

            trebel_2 = data[3]

    elif progres == 2:

        if mode == "naik":

            trebel_1 = adjust_id_trebel_progres2_naik_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), level_offset)

            trebel_2 = adjust_id_trebel_progres2_naik_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), level_offset)

        elif mode == "turun":

            trebel_1 = adjust_id_trebel_progres2_turun_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), level_offset)

            trebel_2 = adjust_id_trebel_progres2_turun_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), level_offset)

    elif progres == 3:

        if mode == "naik":

            trebel_1 = adjust_id_trebel_progres3_naik_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), level_offset)

            trebel_2 = adjust_id_trebel_progres3_naik_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), level_offset)

        elif mode == "turun":

            trebel_1 = adjust_id_trebel_progres3_turun_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), level_offset)

            trebel_2 = adjust_id_trebel_progres3_turun_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), level_offset)


    conn.close()


    # Return hasil

    result = {

        "Bass_1": bass_1,

        "Trebel_1": trebel_1,

        "Bass_2": bass_2,

        "Trebel_2": trebel_2,

        "Bass_3": bass_3

    }

    return result


# Frame untuk ID dan progres

frame_top = tk.Frame(root)

frame_top.pack(pady=10)


# Letakkan entry dan combobox di bawah 

label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")

label_level_gn_selected.grid(row=1, column=0, padx=0, pady=7)

entry_level_gn = tk.Entry(frame_top)

entry_level_gn.grid(row=1, column=1, padx=0, pady=7)


label_level_gn_next = tk.Label(frame_top, text="Level Gn Next:")

label_level_gn_next.grid(row=2, column=0, padx=0, pady=7)

entry_level_gn_next = tk.Entry(frame_top)

entry_level_gn_next.grid(row=2, column=1, padx=0, pady=7)


label_id_selected = tk.Label(frame_top, text="ID:")

label_id_selected.grid(row=3, column=0, padx=0, pady=7)

entry_id = tk.Entry(frame_top)

entry_id.grid(row=3, column=1, padx=0, pady=7)


label_progres = tk.Label(frame_top, text="Progres:")

label_progres.grid(row=4, column=0, padx=0, pady=7)

progres_var = tk.StringVar()

progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)

progres_combobox['values'] = (1, 2, 3)

progres_combobox.grid(row=4, column=1, padx=0, pady=7)


label_mode = tk.Label(frame_top, text="Mode:")

label_mode.grid(row=5, column=0, padx=0, pady=7)

mode_var = tk.StringVar()

mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])

mode_combobox.grid(row=5, column=1, padx=0, pady=7)


# Frame untuk menampilkan hasil Bass dan Trebel

frame_bottom = tk.Frame(root)

frame_bottom.pack(pady=20)


# Bass 1

label_bass_1 = tk.Label(frame_bottom, text="Bass 1:")

label_bass_1.grid(row=0, column=0, padx=10, pady=5)

entry_bass_1 = tk.Entry(frame_bottom)

entry_bass_1.grid(row=0, column=1, padx=10, pady=5)


# Trebel 1

label_trebel_1 = tk.Label(frame_bottom, text="Trebel 1:")

label_trebel_1.grid(row=1, column=0, padx=10, pady=5)

entry_trebel_1 = tk.Entry(frame_bottom)

entry_trebel_1.grid(row=1, column=1, padx=10, pady=5)


# Bass 2

label_bass_2 = tk.Label(frame_bottom, text="Bass 2:")

label_bass_2.grid(row=2, column=0, padx=10, pady=5)

entry_bass_2 = tk.Entry(frame_bottom)

entry_bass_2.grid(row=2, column=1, padx=10, pady=5)


# Trebel 2

label_trebel_2 = tk.Label(frame_bottom, text="Trebel 2:")

label_trebel_2.grid(row=3, column=0, padx=10, pady=5)

entry_trebel_2 = tk.Entry(frame_bottom)

entry_trebel_2.grid(row=3, column=1, padx=10, pady=5)


# Bass 3

label_bass_3 = tk.Label(frame_bottom, text="Bass 3:")

label_bass_3.grid(row=4, column=0, padx=10, pady=5)

entry_bass_3 = tk.Entry(frame_bottom)

entry_bass_3.grid(row=4, column=1, padx=10, pady=5)


# Tombol Pilih Nada

btn_pilih_nada = tk.Button(root, text="Pilih Nada", command=pilih_nada)

btn_pilih_nada.pack(pady=10)


# Menjalankan aplikasi

root.mainloop()


Ketika user telah selesai menginput di salah satu level_gn dan ia akan lanjut menginput di level_gn berikutnya, maka apakah cukup hanya satu buah entry saja yaitu entry_level_gn untuk lanjut ke level_gn berikutnya, atau harus ada 2 buah entry level_gn seperti level_gn_current dan level_gn_next, di mana data yang terpilih baik data Bass maupun data Trebel di setiap level_gn yang berbeda dapat ditampilkan berdasarkan level_gn, id, progres, dan mode, ditampilkan pada entry yang sesuai. Pada tabel gn_biru memiliki level_gn sebanyak 12 yang dimulai dari level_gn 1 hingga level_gn 12. Data yang ada pada tabel gn_biru tersebut bila user memilih salah satu data dari sebuah sel katakanlah user menginput level_gn = 1 maka level_gn 1 itu adalah sebagai level_gn_current, lalu di level_gn berikutnya yaitu level_gn_current +1 maka semua data di setiap digit akan berkurang 1 baik data Bass maupun Trebel, dan seterusnya hingga bila level_gn berikutnya adalah level_gn_current +11 maka semua data di setiap digit akan berkurang 11 baik data Bass maupun Trebel.

Modifikasi data pada tabel `gn_biru` di mana ketika user memilih suatu **level_gn_current**, kemudian pada **level_gn berikutnya** (yaitu level_gn_current + 1, + 2, dst.) setiap digit dari data Bass maupun Trebel akan berkurang sesuai dengan selisih level_gn tersebut, 


Pada kasus ini, penggunaan satu atau dua `Entry` untuk mengelola level_gn sangat bergantung pada alur logika aplikasi yang ingin diimplementasikan. Saya akan memberikan dua skenario umum:


### 1. Menggunakan **Satu Entry (entry_level_gn)**

Jika tujuannya adalah hanya untuk memproses satu level_gn pada satu waktu, maka menggunakan satu `Entry` untuk level_gn sudah cukup. Misalnya, saat pengguna mengisi `entry_level_gn` dengan sebuah nilai dan kemudian menekan tombol "Pilih Nada", aplikasi akan memproses dan menampilkan data untuk level_gn tersebut (baik Bass maupun Trebel). 


Pada skenario ini, jika pengguna ingin memproses level_gn berikutnya, mereka hanya perlu mengganti inputan di `entry_level_gn` secara manual, dan aplikasi akan mengambil data untuk level_gn yang baru diinputkan. Proses ini dilakukan satu per satu, level demi level.


**Keuntungan**:

- Simpler untuk pengguna yang hanya fokus pada satu level_gn saat satu waktu.

- Antarmuka lebih bersih dan sederhana.


**Implementasi:**

```python

level_gn_selected = int(entry_level_gn.get())

# Proses pengambilan data untuk level_gn ini

```


### 2. Menggunakan **Dua Entry (entry_level_gn_current dan entry_level_gn_next)**

Jika tujuan aplikasi adalah untuk membandingkan dua level_gn secara bersamaan atau melakukan tindakan yang melibatkan dua level_gn (misalnya, menghitung perbedaan atau menampilkan data Bass/Trebel dari dua level_gn yang berbeda secara berurutan), maka penggunaan dua `Entry` (current dan next) bisa lebih efektif. 


Pada skenario ini, pengguna bisa memasukkan level_gn_current (yang sedang aktif) dan level_gn_next (level yang akan datang). Hal ini memungkinkan aplikasi untuk mengambil data dari kedua level_gn dan menampilkannya sekaligus, sehingga pengguna bisa melihat progresnya atau perubahan antara level-level tersebut.


**Keuntungan**:

- Berguna jika pengguna ingin melakukan perbandingan antara dua level_gn.

- Lebih fleksibel untuk proses yang memerlukan multi-level input (seperti pengurangan level atau perbandingan data).


**Implementasi:**

```python

level_gn_current = int(entry_level_gn_current.get())

level_gn_next = int(entry_level_gn_next.get())

# Proses pengambilan data untuk level_gn_current dan level_gn_next

```


Pada implementasi ini, misalnya Anda akan mengambil data Bass dan Trebel untuk `level_gn_current`, kemudian memperbarui `level_gn_next` berdasarkan offset atau perbedaan tertentu. Kedua level tersebut akan ditampilkan bersamaan di layar.


---


### Pilihan yang Tepat:

Jika pengguna hanya fokus menginput dan melihat data satu level pada satu waktu, maka **cukup menggunakan satu Entry** saja (seperti `entry_level_gn`). Namun, jika pengguna ingin melakukan tindakan yang melibatkan dua level (misalnya, membandingkan data antara level saat ini dan level berikutnya), maka **dua Entry** (`entry_level_gn_current` dan `entry_level_gn_next`) lebih direkomendasikan.

Jadi, pilihan Anda harus menyesuaikan dengan kebutuhan fungsionalitas aplikasi dan bagaimana penggunaannya.


Kalau begitu, kita pakai yang menggunakan satu entry saja yaitu entry_level_gn dari semua level_gn yang ada.

Namun untuk level_gn yang berbeda perlu ditentukan nilai data terpilih pada setiap level_gn yang berbeda tersebut dimulai dari level_gn 1 hingga level_gn 12 (level_gn ada sebanyak 12) .

Maksud saya, pada tabel gn_biru memiliki level_gn sebanyak 12 yang dimulai dari level_gn 1 hingga level_gn 12. Aturan level_gn adalah berikut ini:

1. Level_gn 1 adalah id 1

2. Level gn 2 adalah id 2 

3. Level_gn 3 adalah id 3

4. Level_gn 4 adalah id 1 - 1 setiap digit data Bass maupun trebel

5. Level gn 5 adalah id 2 - 1 setiap digit data Bass maupun trebel

6. Level_gn 6 adalah id 3 -1 setiap digit data Bass maupun trebel

7. Level_gn 7 adalah id 1 - 2 setiap digit data Bass maupun trebel

8. Level gn 8 adalah id 2 - 2 setiap digit data Bass maupun trebel

9. Level_gn 9 adalah id 3 - 2 setiap digit data Bass maupun trebel.

10. Level_gn 10 adalah id 1 - 3 setiap digit data Bass maupun trebel

11. Level gn 11 adalah id 2 - 3 setiap digit data Bass maupun trebel

12. Level_gn 12 adalah id 3 - 3 setiap digit data Bass maupun trebel.


Data yang ada pada tabel gn_biru tersebut bila user memilih salah satu data dari sebuah sel katakanlah user menginput level_gn = 1 untuk id 1 maka level_gn 1 itu adalah sebagai level_gn_current, lalu bila di level_gn 4 yaitu level_gn_current + 3 maka semua data id 1 di setiap digit akan berkurang 1 baik data Bass maupun Trebel, lalu bila di level_gn 7 yaitu level_gn_current + 6 maka semua data id 1 di setiap digit akan berkurang 2 baik data Bass maupun Trebel, dan seterusnya bila level_gn berikutnya adalah di level_gn 10 yaitu level_gn_current + 9 maka semua data id 1 di setiap digit akan berkurang 3 baik data Bass maupun Trebel.

Hal yang sama di atas berlaku untuk data di baris id 2 dan id 3.


Baik, kita dapat menerapkan logika untuk setiap perubahan nilai pada tabel `gn_biru` berdasarkan aturan level_gn yang Anda berikan. Secara umum, logika ini mencakup manipulasi data Bass dan Trebel berdasarkan **ID** dan **level_gn_current**, kemudian memodifikasi data tersebut sesuai dengan level_gn yang terkait (mengurangi setiap digit berdasarkan aturan level_gn).

Untuk implementasi ini, kita bisa menggunakan satu entry saja, yaitu `entry_level_gn`, yang memungkinkan user untuk memilih level_gn tertentu. Kemudian, berdasarkan level_gn yang dipilih, kita akan memperbarui data yang ada sesuai aturan.

Berikut langkah-langkah yang bisa diimplementasikan:

### 1. Entry untuk level_gn

Buatlah satu entry di mana user bisa memilih level_gn dari 1 hingga 12.


```python

entry_level_gn = ttk.Combobox(frame, values=list(range(1, 13)), state="readonly")

entry_level_gn.grid(row=1, column=0)

```

### 2. Pengambilan data berdasarkan ID dan level_gn_current

Setelah user memilih level_gn, kita akan mengambil **ID**, dan **data Bass dan Trebel** yang relevan. Misalkan level_gn_current adalah 1, kita ambil data dari ID 1.

```python

def get_data_by_level(level_gn):

    # Misalkan data ini adalah contoh dari database atau array

    data_bass_trebel = {

        1: {'Bass': '1234', 'Trebel': '5678'},

        2: {'Bass': '2345', 'Trebel': '6789'},

        3: {'Bass': '3456', 'Trebel': '7890'}

    }

    

    if level_gn in data_bass_trebel:

        return data_bass_trebel[level_gn]

    return None

```

### 3. Mengurangi setiap digit pada level_gn tertentu

Berikutnya, kita terapkan pengurangan digit pada Bass dan Trebel sesuai dengan level_gn yang dipilih. Ini dapat dilakukan dengan iterasi pada setiap karakter string Bass dan Trebel.

```python

def reduce_digits(data, reduction):

    bass = data['Bass']

    trebel = data['Trebel']

    

    reduced_bass = ''.join([str(max(int(digit) - reduction, 0)) for digit in bass])

    reduced_trebel = ''.join([str(max(int(digit) - reduction, 0)) for digit in trebel])

    

    return {'Bass': reduced_bass, 'Trebel': reduced_trebel}

```

### 4. Aturan untuk level_gn

Aturan ini akan menentukan berapa banyak pengurangan untuk setiap level_gn. Pengurangan ini diterapkan pada data Bass dan Trebel berdasarkan ID yang dipilih.

```python

def apply_level_gn_logic(level_gn_current):

    reduction_map = {

        4: 1, 5: 1, 6: 1, # Level_gn 4, 5, 6 -> Kurangi 1

        7: 2, 8: 2, 9: 2, # Level_gn 7, 8, 9 -> Kurangi 2

        10: 3, 11: 3, 12: 3 # Level_gn 10, 11, 12 -> Kurangi 3

    }

    

    # Ambil data berdasarkan level_gn_current

    data = get_data_by_level(level_gn_current)

    

    if not data:

        return None

    

    modified_data = {}


    # Iterasi melalui level_gn untuk menerapkan logika

    for level_gn in range(level_gn_current, 13):

        if level_gn in reduction_map:

            modified_data[level_gn] = reduce_digits(data, reduction_map[level_gn])


    return modified_data

```

### 5. Implementasi pada event `Combobox` dan output data

Pada saat user memilih level_gn di `Combobox`, kita terapkan fungsi `apply_level_gn_logic()` untuk memperbarui data dan menampilkannya.

```python

def on_level_gn_selected(event):

    level_gn_current = int(entry_level_gn.get())

    

    modified_data = apply_level_gn_logic(level_gn_current)

    

    if modified_data:

        # Tampilkan hasil yang dimodifikasi di sini, misalnya dalam bentuk Label atau Text

        for level, data in modified_data.items():

            print(f"Level_gn {level}: Bass = {data['Bass']}, Trebel = {data['Trebel']}")

    else:

        print("Data tidak ditemukan.")


entry_level_gn.bind("<<ComboboxSelected>>", on_level_gn_selected)

```

### Penjelasan:

1. **get_data_by_level()**: Fungsi ini mengambil data dari database atau struktur data yang telah ditentukan untuk **Bass** dan **Trebel** berdasarkan **ID**.

2. **reduce_digits()**: Fungsi ini mengurangi setiap digit dari Bass dan Trebel sesuai aturan level_gn.

3. **apply_level_gn_logic()**: Fungsi ini mengaplikasikan aturan untuk level_gn 4 hingga 12, di mana pengurangan digit dilakukan berdasarkan level_gn_current.

4. **on_level_gn_selected()**: Fungsi ini dieksekusi saat user memilih level_gn dari Combobox, dan menampilkan hasil yang telah dimodifikasi.

Dengan pendekatan ini, Anda bisa menampilkan data yang disesuaikan untuk setiap level_gn yang dipilih, serta mengatur aturan pengurangan digit secara otomatis.


Kita perbaiki kembali aturan level-gn yang benar untuk data tabel gn_biru, sebagai berikut:

Pada tabel gn_biru memiliki level_gn sebanyak 12 yang dimulai dari level_gn 1 hingga level_gn 12. Aturan level_gn adalah berikut ini:

1. Level_gn 1 adalah id 3

2. Level gn 2 adalah id 2.

3. Level_gn 3 adalah id 1.

4. Level_gn 4 adalah id 3 - 1 setiap digit data Bass maupun trebel.

5. Level gn 5 adalah id 2 - 1 setiap digit data Bass maupun trebel.

6. Level_gn 6 adalah id 1 -1 setiap digit data Bass maupun trebel.

7. Level_gn 7 adalah id 3 - 2 setiap digit data Bass maupun trebel.

8. Level gn 8 adalah id 2 - 2 setiap digit data Bass maupun trebel.

9. Level_gn 9 adalah id 1 - 2 setiap digit data Bass maupun trebel.

10. Level_gn 10 adalah id 3 - 3 setiap digit data Bass maupun trebel.

11. Level gn 11 adalah id 2 - 3 setiap digit data Bass maupun trebel.

12. Level_gn 12 adalah id 1 - 3 setiap digit data Bass maupun trebel.

Data yang ada pada tabel gn_biru tersebut di baris id 3 untuk level_gn 1, 4, 7, 10, .bila user memilih salah satu data dari sebuah sel katakanlah user menginput level_gn = 1 untuk id 3 maka level_gn 1 itu adalah sebagai level_gn_current, lalu bila di level_gn 4 yaitu level_gn_current + 3 maka semua data id 3 di setiap digit akan berkurang 1 baik data Bass maupun Trebel, lalu bila di level_gn 7 yaitu level_gn_current + 6 maka semua data id 3 di setiap digit akan berkurang 2 baik data Bass maupun Trebel, dan seterusnya bila level_gn berikutnya adalah di level_gn 10 yaitu level_gn_current + 9 maka semua data id 3 di setiap digit akan berkurang 3 baik data Bass maupun Trebel. Hal yang sama di atas berlaku untuk data di baris id 2 untuk level_gn 2, 5, 8, 11, dan baris id 1 untuk level_gn 3, 6, 9, 12.


Baik, sekarang kita akan memperbaiki aturan `level_gn` sesuai dengan logika yang baru pada tabel `gn_biru`. Berikut logika yang akan diterapkan:


### Aturan `level_gn` untuk tabel `gn_biru`:

- Tabel `gn_biru` memiliki 12 `level_gn`.

- `level_gn` 1, 4, 7, 10 menggunakan data dari **ID 3**.

- `level_gn` 2, 5, 8, 11 menggunakan data dari **ID 2**.

- `level_gn` 3, 6, 9, 12 menggunakan data dari **ID 1**.

- Setiap kali `level_gn` naik, data Bass dan Trebel akan dikurangi sesuai aturan:

  - **Level_gn 1, 2, 3**: Tidak ada perubahan (data asli dari ID 3, 2, dan 1).

  - **Level_gn 4, 5, 6**: Kurangi 1 pada setiap digit data Bass dan Trebel.

  - **Level_gn 7, 8, 9**: Kurangi 2 pada setiap digit data Bass dan Trebel.

  - **Level_gn 10, 11, 12**: Kurangi 3 pada setiap digit data Bass dan Trebel.


Mari kita terapkan aturan ini dalam kode Python yang sesuai.


### 1. Fungsi untuk mendapatkan data berdasarkan ID

Kita akan membuat fungsi untuk mengambil data Bass dan Trebel berdasarkan **ID** yang sesuai dengan level_gn.


```python

def get_data_by_id(id):

    # Contoh data dari tabel gn_biru

    data_bass_trebel = {

        1: {'Bass': '3456', 'Trebel': '7890'}, # Data ID 1

        2: {'Bass': '2345', 'Trebel': '6789'}, # Data ID 2

        3: {'Bass': '1234', 'Trebel': '5678'} # Data ID 3

    }

    

    return data_bass_trebel.get(id)

```


### 2. Fungsi untuk mengurangi setiap digit Bass dan Trebel

Fungsi ini mengurangi setiap digit dari Bass dan Trebel berdasarkan level_gn yang dipilih.


```python

def reduce_digits(data, reduction):

    bass = data['Bass']

    trebel = data['Trebel']

    

    # Kurangi setiap digit

    reduced_bass = ''.join([str(max(int(digit) - reduction, 0)) for digit in bass])

    reduced_trebel = ''.join([str(max(int(digit) - reduction, 0)) for digit in trebel])

    

    return {'Bass': reduced_bass, 'Trebel': reduced_trebel}

```


### 3. Aturan pengurangan digit berdasarkan level_gn

Kita akan menerapkan aturan bahwa setiap digit akan dikurangi pada level_gn tertentu. Pengurangan ini tergantung pada level_gn yang dipilih oleh user.


```python

def apply_level_gn_logic(level_gn):

    # Aturan level_gn sesuai dengan ID

    level_gn_to_id_map = {

        1: 3, 2: 2, 3: 1, # Level_gn 1-3 (ID asli)

        4: 3, 5: 2, 6: 1, # Level_gn 4-6 (Kurangi 1)

        7: 3, 8: 2, 9: 1, # Level_gn 7-9 (Kurangi 2)

        10: 3, 11: 2, 12: 1 # Level_gn 10-12 (Kurangi 3)

    }

    

    # Tentukan pengurangan digit berdasarkan level_gn

    reduction_map = {

        1: 0, 2: 0, 3: 0, # Level_gn 1-3 (tidak ada pengurangan)

        4: 1, 5: 1, 6: 1, # Level_gn 4-6 (kurangi 1)

        7: 2, 8: 2, 9: 2, # Level_gn 7-9 (kurangi 2)

        10: 3, 11: 3, 12: 3 # Level_gn 10-12 (kurangi 3)

    }


    # Ambil ID berdasarkan level_gn

    id = level_gn_to_id_map.get(level_gn)

    

    if id is None:

        return None # Jika level_gn tidak valid

    

    # Ambil data dari tabel berdasarkan ID

    data = get_data_by_id(id)

    

    # Kurangi data sesuai aturan

    reduction = reduction_map.get(level_gn, 0)

    modified_data = reduce_digits(data, reduction)

    

    return modified_data

```


### 4. Event handler untuk level_gn yang dipilih oleh user

Ketika user memilih level_gn, data akan dimodifikasi berdasarkan aturan yang sudah ditentukan dan hasilnya ditampilkan.


```python

def on_level_gn_selected(event):

    level_gn = int(entry_level_gn.get())

    

    modified_data = apply_level_gn_logic(level_gn)

    

    if modified_data:

        # Tampilkan hasil modifikasi

        print(f"Level_gn {level_gn}: Bass = {modified_data['Bass']}, Trebel = {modified_data['Trebel']}")

    else:

        print("Data tidak ditemukan.")


# Entry untuk level_gn dengan event binding

entry_level_gn = ttk.Combobox(frame, values=list(range(1, 13)), state="readonly")

entry_level_gn.grid(row=1, column=0)

entry_level_gn.bind("<<ComboboxSelected>>", on_level_gn_selected)

```


### Contoh Penggunaan

Misalkan user memilih **level_gn 4**:


- ID yang digunakan adalah **ID 3** (sesuai aturan level_gn).

- Setiap digit dari Bass dan Trebel akan berkurang 1.

- Data asli Bass = '1234', Trebel = '5678'.

- Setelah pengurangan 1 pada setiap digit:

  - Bass menjadi: '0123'.

  - Trebel menjadi: '4567'.


Data ini kemudian ditampilkan kepada user setelah mereka memilih level_gn dari Combobox.


### Kesimpulan:

Dengan menggunakan logika ini, Anda dapat dengan mudah mengelola data dalam tabel `gn_biru` dan melakukan pengurangan digit berdasarkan level_gn yang dipilih oleh user. Setiap level_gn mengikuti aturan yang telah Anda tetapkan dan data akan dimodifikasi sesuai dengan level_gn_current.


Jadi sementara sebelum berlanjut lebih jauh, kita perbaiki dulu kode berikut ini:

import tkinter as tk

from tkinter import ttk

import sqlite3


root = tk.Tk()

root.title("Pilihan Nada")

root.geometry("600x400")


# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada

def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()


        # Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected

        result = level_gn(id_selected, progres_selected, mode_selected)


        # Tampilkan data ke dalam entry

        entry_bass_1.delete(0, tk.END)

        entry_bass_1.insert(0, result["Bass_1"])


        entry_trebel_1.delete(0, tk.END)

        entry_trebel_1.insert(0, result["Trebel_1"])


        entry_bass_2.delete(0, tk.END)

        entry_bass_2.insert(0, result["Bass_2"])


        entry_trebel_2.delete(0, tk.END)

        entry_trebel_2.insert(0, result["Trebel_2"])


        entry_bass_3.delete(0, tk.END)

        entry_bass_3.insert(0, result["Bass_3"])


    except Exception as e:

        print("Error:", e)


# Fungsi untuk mengambil data dari database dan mengatur trebel/bass sesuai progres dan mode

def level_gn(id, progres, mode):

    # Koneksi ke database

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    # Query untuk pengambilan data dari tabel Gn_Biru

    query = """

        SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (id,))

    data = cursor.fetchone()


    bass_1 = data[0]

    bass_2 = data[2]

    bass_3 = data[4]


    # Pengaturan Trebel berdasarkan progres dan mode

    if progres == 1:

        if mode == "naik" or mode == "turun":

            trebel_1 = data[1]

            trebel_2 = data[3]

    elif progres == 2:

        if mode == "naik":

            trebel_1 = adjust_id_trebel_progres2_naik_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres2_naik_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)

        elif mode == "turun":

            trebel_1 = adjust_id_trebel_progres2_turun_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres2_turun_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)

    elif progres == 3:

        if mode == "naik":

            trebel_1 = adjust_id_trebel_progres3_naik_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 2)

            trebel_2 = adjust_id_trebel_progres3_naik_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 2)

        elif mode == "turun":

            trebel_1 = adjust_id_trebel_progres3_turun_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 2)

            trebel_2 = adjust_id_trebel_progres3_turun_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 2)


    conn.close()


    # Return hasil

    result = {

        "Bass_1": bass_1,

        "Trebel_1": trebel_1,

        "Bass_2": bass_2,

        "Trebel_2": trebel_2,

        "Bass_3": bass_3

    }

    return result


# Fungsi adjust untuk berbagai progres dan mode

def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def ambil_data_trebel(id, target_id, kolom):

    # Fungsi untuk mengambil data Trebel dari ID yang berbeda

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    query = f"""

        SELECT {kolom}

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (target_id,))

    data = cursor.fetchone()

    conn.close()

    return data[0]


# Frame untuk ID dan progres

frame_top = tk.Frame(root)

frame_top.pack(pady=10)


# Letakkan entry dan combobox di bawah 

label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")

label_level_gn_selected.grid(row=1, column=0, padx=0, pady=7)

entry_level_gn = tk.Entry(frame_top)

entry_level_gn.grid(row=1, column=1, padx=0, pady=7)


label_id_selected = tk.Label(frame_top, text="ID:")

label_id_selected.grid(row=2, column=0, padx=0, pady=7)

entry_id = tk.Entry(frame_top)

entry_id.grid(row=2, column=1, padx=0, pady=7)


label_progres = tk.Label(frame_top, text="Progres:")

label_progres.grid(row=3, column=0, padx=0, pady=7)

progres_var = tk.StringVar()

progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)

progres_combobox['values'] = (1, 2, 3)

progres_combobox.grid(row=3, column=1, padx=0, pady=7)


label_mode = tk.Label(frame_top, text="Mode:")

label_mode.grid(row=4, column=0, padx=0, pady=7)

mode_var = tk.StringVar()

mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])

mode_combobox.grid(row=4, column=1, padx=0, pady=7)


# Frame untuk hasil adaptasi

frame_bottom = tk.Frame(root)

frame_bottom.pack(pady=10)


# Tombol untuk memproses pemilihan nada

button_pilih_nada = tk.Button(frame_bottom, text="Pilih Nada", bg="#158aff", fg="white", command=pilih_nada)

button_pilih_nada.grid(row=5, column=1, padx=5, pady=5)


separator = ttk.Separator(frame_bottom, orient='horizontal')

separator.grid(row=6, column=0, sticky="ew", pady=15)


# Labels dan Entry untuk Bass dan Trebel

gugusan_nada_bass_1_label = tk.Label(frame_bottom, text="Bass_1")

gugusan_nada_bass_1_label.grid(row=7, column=1, padx=5, pady=5)

gugusan_nada_trebel_1_label = tk.Label(frame_bottom, text="Trebel_1")

gugusan_nada_trebel_1_label.grid(row=7, column=2, padx=5, pady=5)

gugusan_nada_bass_2_label = tk.Label(frame_bottom, text="Bass_2")

gugusan_nada_bass_2_label.grid(row=7, column=3, padx=5, pady=5)

gugusan_nada_trebel_2_label = tk.Label(frame_bottom, text="Trebel_2")

gugusan_nada_trebel_2_label.grid(row=7, column=4, padx=5, pady=5)

gugusan_nada_bass_3_label = tk.Label(frame_bottom, text="Bass_3")

gugusan_nada_bass_3_label.grid(row=7, column=5, padx=5, pady=5)


# Entry box untuk Bass dan Trebel

entry_bass_1 = tk.Entry(frame_bottom, bg="white")

entry_bass_1.grid(row=8, column=1, padx=5, pady=5)

entry_trebel_1 = tk.Entry(frame_bottom, bg="white")

entry_trebel_1.grid(row=8, column=2, padx=5, pady=5)

entry_bass_2 = tk.Entry(frame_bottom, bg="white")

entry_bass_2.grid(row=8, column=3, padx=5, pady=5)

entry_trebel_2 = tk.Entry(frame_bottom, bg="white")

entry_trebel_2.grid(row=8, column=4, padx=5, pady=5)

entry_bass_3 = tk.Entry(frame_bottom, bg="white")

entry_bass_3.grid(row=8, column=5, padx=5, pady=5)


root.mainloop()      


Pada kode tersebut harus ditambahkan fungsi update_level_gn yang sesuai, dan menambahkan tombol validate_button sebagai validasi level_gn untuk id yang sesuai dengan level-gn yang diinputkan.


It appears that your code is almost complete, but it got cut off at the end. I assume you were working on setting up the entry boxes for displaying the bass and trebel data after the selection is made. Let's finish the missing part and make a few adjustments for clarity and proper functionality:


### Here’s the completed and corrected version of the code:


```python

import tkinter as tk

from tkinter import ttk

import sqlite3


root = tk.Tk()

root.title("Pilihan Nada")

root.geometry("600x400")


# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada

def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()


        # Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected

        result = level_gn(id_selected, progres_selected, mode_selected)


        # Tampilkan data ke dalam entry

        entry_bass_1.delete(0, tk.END)

        entry_bass_1.insert(0, result["Bass_1"])


        entry_trebel_1.delete(0, tk.END)

        entry_trebel_1.insert(0, result["Trebel_1"])


        entry_bass_2.delete(0, tk.END)

        entry_bass_2.insert(0, result["Bass_2"])


        entry_trebel_2.delete(0, tk.END)

        entry_trebel_2.insert(0, result["Trebel_2"])


        entry_bass_3.delete(0, tk.END)

        entry_bass_3.insert(0, result["Bass_3"])


    except Exception as e:

        print("Error:", e)


# Fungsi untuk mengambil data dari database dan mengatur trebel/bass sesuai progres dan mode

def level_gn(id, progres, mode):

    # Koneksi ke database

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    # Query untuk pengambilan data dari tabel Gn_Biru

    query = """

        SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (id,))

    data = cursor.fetchone()


    bass_1 = data[0]

    bass_2 = data[2]

    bass_3 = data[4]


    # Pengaturan Trebel berdasarkan progres dan mode

    if progres == 1:

        if mode == "naik" or mode == "turun":

            trebel_1 = data[1]

            trebel_2 = data[3]

    elif progres == 2:

        if mode == "naik":

            trebel_1 = adjust_id_trebel_progres2_naik_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres2_naik_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)

        elif mode == "turun":

            trebel_1 = adjust_id_trebel_progres2_turun_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres2_turun_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)

    elif progres == 3:

        if mode == "naik":

            trebel_1 = adjust_id_trebel_progres3_naik_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 2)

            trebel_2 = adjust_id_trebel_progres3_naik_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 2)

        elif mode == "turun":

            trebel_1 = adjust_id_trebel_progres3_turun_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 2)

            trebel_2 = adjust_id_trebel_progres3_turun_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 2)


    conn.close()


    # Return hasil

    result = {

        "Bass_1": bass_1,

        "Trebel_1": trebel_1,

        "Bass_2": bass_2,

        "Trebel_2": trebel_2,

        "Bass_3": bass_3

    }

    return result


# Fungsi adjust untuk berbagai progres dan mode

def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def ambil_data_trebel(id, target_id, kolom):

    # Fungsi untuk mengambil data Trebel dari ID yang berbeda

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    query = f"""

        SELECT {kolom}

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (target_id,))

    data = cursor.fetchone()

    conn.close()

    return data[0]


# Frame untuk ID dan progres

frame_top = tk.Frame(root)

frame_top.pack(pady=10)


# Letakkan entry dan combobox di bawah 

label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")

label_level_gn_selected.grid(row=1, column=0, padx=0, pady=7)

entry_level_gn = tk.Entry(frame_top)

entry_level_gn.grid(row=1, column=1, padx=0, pady=7)


label_id_selected = tk.Label(frame_top, text="ID:")

label_id_selected.grid(row=2, column=0, padx=0, pady=7)

entry_id = tk.Entry(frame_top)

entry_id.grid(row=2, column=1, padx=0, pady=7)


label_progres = tk.Label(frame_top, text="Progres:")

label_progres.grid(row=3, column=0, padx=0, pady=7)

progres_var = tk.StringVar()

progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)

progres_combobox['values'] = (1, 2, 3)

progres_combobox.grid(row=3, column=1, padx=0, pady=7)


label_mode = tk.Label(frame_top, text="Mode:")

label_mode.grid(row=4, column=0, padx=0, pady=7)

mode_var = tk.StringVar()

mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var


Ulangi chat kamu yang terakhir pada kode terakhir yang kamu kirim gunakan bahasa Indonesia saja, because I don't understand in English.

Maksud saya, untuk data tabel gn_biru, kita perbaiki dulu kode berikut ini:


import tkinter as tk

from tkinter import ttk

import sqlite3


root = tk.Tk()

root.title("Pilihan Nada")

root.geometry("600x400")


# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada

def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()


        # Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected

        result = level_gn(id_selected, progres_selected, mode_selected)


        # Tampilkan data ke dalam entry

        entry_bass_1.delete(0, tk.END)

        entry_bass_1.insert(0, result["Bass_1"])


        entry_trebel_1.delete(0, tk.END)

        entry_trebel_1.insert(0, result["Trebel_1"])


        entry_bass_2.delete(0, tk.END)

        entry_bass_2.insert(0, result["Bass_2"])


        entry_trebel_2.delete(0, tk.END)

        entry_trebel_2.insert(0, result["Trebel_2"])


        entry_bass_3.delete(0, tk.END)

        entry_bass_3.insert(0, result["Bass_3"])


    except Exception as e:

        print("Error:", e)


# Fungsi untuk mengambil data dari database dan mengatur trebel/bass sesuai progres dan mode

def level_gn(id, progres, mode):

    # Koneksi ke database

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    # Query untuk pengambilan data dari tabel Gn_Biru

    query = """

        SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (id,))

    data = cursor.fetchone()


    bass_1 = data[0]

    bass_2 = data[2]

    bass_3 = data[4]


    # Pengaturan Trebel berdasarkan progres dan mode

    if progres == 1:

        if mode == "naik" or mode == "turun":

            trebel_1 = data[1]

            trebel_2 = data[3]

    elif progres == 2:

        if mode == "naik":

            trebel_1 = adjust_id_trebel_progres2_naik_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres2_naik_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)

        elif mode == "turun":

            trebel_1 = adjust_id_trebel_progres2_turun_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 1)

            trebel_2 = adjust_id_trebel_progres2_turun_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)

    elif progres == 3:

        if mode == "naik":

            trebel_1 = adjust_id_trebel_progres3_naik_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 2)

            trebel_2 = adjust_id_trebel_progres3_naik_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 2)

        elif mode == "turun":

            trebel_1 = adjust_id_trebel_progres3_turun_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 2)

            trebel_2 = adjust_id_trebel_progres3_turun_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 2)


    conn.close()


    # Return hasil

    result = {

        "Bass_1": bass_1,

        "Trebel_1": trebel_1,

        "Bass_2": bass_2,

        "Trebel_2": trebel_2,

        "Bass_3": bass_3

    }

    return result


# Fungsi adjust untuk berbagai progres dan mode

def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


def ambil_data_trebel(id, target_id, kolom):

    # Fungsi untuk mengambil data Trebel dari ID yang berbeda

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    query = f"""

        SELECT {kolom}

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (target_id,))

    data = cursor.fetchone()

    conn.close()

    return data[0]


# Frame untuk ID dan progres

frame_top = tk.Frame(root)

frame_top.pack(pady=10)


# Letakkan entry dan combobox di bawah 

label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")

label_level_gn_selected.grid(row=1, column=0, padx=0, pady=7)

entry_level_gn = tk.Entry(frame_top)

entry_level_gn.grid(row=1, column=1, padx=0, pady=7)


label_id_selected = tk.Label(frame_top, text="ID:")

label_id_selected.grid(row=2, column=0, padx=0, pady=7)

entry_id = tk.Entry(frame_top)

entry_id.grid(row=2, column=1, padx=0, pady=7)


label_progres = tk.Label(frame_top, text="Progres:")

label_progres.grid(row=3, column=0, padx=0, pady=7)

progres_var = tk.StringVar()

progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)

progres_combobox['values'] = (1, 2, 3)

progres_combobox.grid(row=3, column=1, padx=0, pady=7)


label_mode = tk.Label(frame_top, text="Mode:")

label_mode.grid(row=4, column=0, padx=0, pady=7)

mode_var = tk.StringVar()

mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])

mode_combobox.grid(row=4, column=1, padx=0, pady=7)


# Frame untuk hasil adaptasi

frame_bottom = tk.Frame(root)

frame_bottom.pack(pady=10)


# Tombol untuk memproses pemilihan nada

button_pilih_nada = tk.Button(frame_bottom, text="Pilih Nada", bg="#158aff", fg="white", command=pilih_nada)

button_pilih_nada.grid(row=5, column=1, padx=5, pady=5)


separator = ttk.Separator(frame_bottom, orient='horizontal')

separator.grid(row=6, column=0, sticky="ew", pady=15)


# Labels dan Entry untuk Bass dan Trebel

gugusan_nada_bass_1_label = tk.Label(frame_bottom, text="Bass_1")

gugusan_nada_bass_1_label.grid(row=7, column=1, padx=5, pady=5)

gugusan_nada_trebel_1_label = tk.Label(frame_bottom, text="Trebel_1")

gugusan_nada_trebel_1_label.grid(row=7, column=2, padx=5, pady=5)

gugusan_nada_bass_2_label = tk.Label(frame_bottom, text="Bass_2")

gugusan_nada_bass_2_label.grid(row=7, column=3, padx=5, pady=5)

gugusan_nada_trebel_2_label = tk.Label(frame_bottom, text="Trebel_2")

gugusan_nada_trebel_2_label.grid(row=7, column=4, padx=5, pady=5)

gugusan_nada_bass_3_label = tk.Label(frame_bottom, text="Bass_3")

gugusan_nada_bass_3_label.grid(row=7, column=5, padx=5, pady=5)


# Entry box untuk Bass dan Trebel

entry_bass_1 = tk.Entry(frame_bottom, bg="white")

entry_bass_1.grid(row=8, column=1, padx=5, pady=5)

entry_trebel_1 = tk.Entry(frame_bottom, bg="white")

entry_trebel_1.grid(row=8, column=2, padx=5, pady=5)

entry_bass_2 = tk.Entry(frame_bottom, bg="white")

entry_bass_2.grid(row=8, column=3, padx=5, pady=5)

entry_trebel_2 = tk.Entry(frame_bottom, bg="white")

entry_trebel_2.grid(row=8, column=4, padx=5, pady=5)

entry_bass_3 = tk.Entry(frame_bottom, bg="white")

entry_bass_3.grid(row=8, column=5, padx=5, pady=5)


root.mainloop()      


Pada kode tersebut harus ditambahkan fungsi update_level_gn yang sesuai, dan menambahkan tombol validate_button sebagai validasi level_gn untuk id yang sesuai dengan level-gn yang diinputkan.


Berikut adalah pembaruan kode yang lebih rapi dan dapat digunakan untuk pengolahan tabel `Gn_Biru` dengan fitur yang diinginkan:


```python

import tkinter as tk

from tkinter import ttk

import sqlite3


root = tk.Tk()

root.title("Pilihan Nada")

root.geometry("600x400")


# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada

def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()


        # Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected

        result = level_gn(id_selected, progres_selected, mode_selected)


        # Tampilkan data ke dalam entry

        entry_bass_1.delete(0, tk.END)

        entry_bass_1.insert(0, result["Bass_1"])


        entry_trebel_1.delete(0, tk.END)

        entry_trebel_1.insert(0, result["Trebel_1"])


        entry_bass_2.delete(0, tk.END)

        entry_bass_2.insert(0, result["Bass_2"])


        entry_trebel_2.delete(0, tk.END)

        entry_trebel_2.insert(0, result["Trebel_2"])


        entry_bass_3.delete(0, tk.END)

        entry_bass_3.insert(0, result["Bass_3"])


    except Exception as e:

        print("Error:", e)


# Fungsi untuk mengambil data dari database dan mengatur trebel/bass sesuai progres dan mode

def level_gn(id, progres, mode):

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    query = """

        SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3

        FROM Gn_Biru

        WHERE ID = ?

    """

    cursor.execute(query, (id,))

    data = cursor.fetchone()


    bass_1 = data[0]

    bass_2 = data[2]

    bass_3 = data[4]


    # Pengaturan Trebel berdasarkan progres dan mode

    if progres == 1:

        if mode == "naik" or mode == "turun":

            trebel_1 = data[1]

            trebel_2 = data[3]

    elif progres == 2:

        if mode == "naik":

            trebel_1 = adjust_trebel_progres2_naik(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)

            trebel_2 = adjust_trebel_progres2_naik(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)

        elif mode == "turun":

            trebel_1 = adjust_trebel_progres2_turun(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 1)

            trebel_2 = adjust_trebel_progres2_turun(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)

    elif progres == 3:

        if mode == "naik":

            trebel_1 = adjust_trebel_progres3_naik(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 2)

            trebel_2 = adjust_trebel_progres3_naik(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 2)

        elif mode == "turun":

            trebel_1 = adjust_trebel_progres3_turun(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 2)

            trebel_2 = adjust_trebel_progres3_turun(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 2)


    conn.close()


    result = {

        "Bass_1": bass_1,

        "Trebel_1": trebel_1,

        "Bass_2": bass_2,

        "Trebel_2": trebel_2,

        "Bass_3": bass_3

    }

    return result


# Fungsi adjust untuk berbagai progres dan mode

def adjust_trebel_progres2_naik(trebel_value, new_id_value, pengurang):

    return adjust_trebel(trebel_value, new_id_value, pengurang, -2)


def adjust_trebel_progres2_turun(trebel_value, new_id_value, pengurang):

    return adjust_trebel(trebel_value, new_id_value, pengurang, -2)


def adjust_trebel_progres3_naik(trebel_value, new_id_value, pengurang):

    return adjust_trebel(trebel_value, new_id_value, pengurang, -3)


def adjust_trebel_progres3_turun(trebel_value, new_id_value, pengurang):

    return adjust_trebel(trebel_value, new_id_value, pengurang, -3)


# Fungsi umum untuk penyesuaian trebel

def adjust_trebel(trebel_value, new_id_value, pengurang, adjustment_value):

    if trebel_value.isdigit():

        digit_pertama = str(int(trebel_value[0]) - pengurang)

    else:

        digit_pertama = trebel_value

    if new_id_value.isdigit():

        digit_kedua_dan_seterusnya = ''.join(str(int(char) + adjustment_value) for char in new_id_value[1:])

    else:

        digit_kedua_dan_seterusnya = new_id_value[1:]

    adjusted_value = digit_pertama + digit_kedua_dan_seterusnya

    return adjusted_value


# Fungsi untuk mengambil data Trebel dari ID lain

def ambil_data_trebel(id, target_id, kolom):

    conn = sqlite3.connect('DATAMUSIK.db')

    cursor = conn.cursor()


    query = f"SELECT {kolom} FROM Gn_Biru WHERE ID = ?"

    cursor.execute(query, (target_id,))

    data = cursor.fetchone()

    conn.close()

    return data[0]


# Frame untuk ID, level, progres, dan mode

frame_top = tk.Frame(root)

frame_top.pack(pady=10)


label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")

label_level_gn_selected.grid(row=1, column=0, padx=5, pady=7)

entry_level_gn = tk.Entry(frame_top)

entry_level_gn.grid(row=1, column=1, padx=5, pady=7)


label_id_selected = tk.Label(frame_top, text="ID:")

label_id_selected.grid(row=2, column=0, padx=5, pady=7)

entry_id = tk.Entry(frame_top)

entry_id.grid(row=2, column=1, padx=5, pady=7)


label_progres = tk.Label(frame_top, text="Progres:")

label_progres.grid(row=3, column=0, padx=5, pady=7)

progres_var = tk.StringVar()

progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var, values=(1, 2, 3))

progres_combobox.grid(row=3, column=1, padx=5, pady=7)


label_mode = tk.Label(frame_top, text="Mode:")

label_mode.grid(row=4, column=0, padx=5, pady=7)

mode_var = tk.StringVar()

mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])

mode_combobox.grid(row=4, column=1, padx=5, pady=7)


# Frame untuk hasil input

frame_bottom = tk.Frame(root)

frame_bottom.pack(pady=10)


# Tombol untuk memproses pemilihan nada

button_pilih_nada = tk.Button(frame_bottom, text="Pilih Nada", bg="#158aff", fg="white", command=pilih_nada)

button_pilih_nada.grid(row=5, column=1, padx=5, pady=5)


separator = ttk.Separator(frame_bottom, orient='horizontal')

separator.grid(row=6, column=0, sticky="ew", pady=15)


# Labels dan Entry untuk Bass dan Trebel

labels = ["Bass_1", "Trebel_1", "Bass_2", "Trebel_2", "Bass_3"]

entries = []


for i, label in enumerate(labels, start=7):

    lbl = tk.Label(frame_bottom, text=label)

    lbl.grid(row=7, column=i-6, padx=5, pady=5)

    entry = tk.Entry(frame_bottom, bg="white")

    entry.grid(row=8, column=i-6, padx=5, pady=5)

    entries.append(entry)


entry_bass_1, entry_trebel_1, entry_bass_2, entry_trebel_2, entry_bass_3 = entries


root.mainloop()

```


Perubahan yang telah dilakukan:


1. Membuat fungsi `adjust_trebel()` sebagai fungsi umum yang dipanggil oleh semua progres dan mode untuk menyederhanakan logika pengaturan Trebel.

2. Menyederhan


Lanjutkan hingga selesai


Berikut kelanjutan kode tersebut:


```python

entry_bass_1 = tk.Entry(frame_bottom, bg="white")

entry_bass_1.grid(row=8, column=1, padx=5, pady=5)


entry_trebel_1 = tk.Entry(frame_bottom, bg="white")

entry_trebel_1.grid(row=8, column=2, padx=5, pady=5)


entry_bass_2 = tk.Entry(frame_bottom, bg="white")

entry_bass_2.grid(row=8, column=3, padx=5, pady=5)


entry_trebel_2 = tk.Entry(frame_bottom, bg="white")

entry_trebel_2.grid(row=8, column=4, padx=5, pady=5)


entry_bass_3 = tk.Entry(frame_bottom, bg="white")

entry_bass_3.grid(row=8, column=5, padx=5, pady=5)


# Fungsi utama untuk menjalankan aplikasi tkinter

root.mainloop()

```


Penjelasan tambahan dari kode yang sudah ditulis:

1. **Frame Top dan Bottom**:

   - Frame `frame_top` digunakan untuk input ID, Level_Gn, progres, dan mode yang akan digunakan dalam proses pengambilan data nada.

   - Frame `frame_bottom` digunakan untuk menampilkan hasil dari Bass dan Trebel berdasarkan input pengguna pada bagian atas.

2. **Fungsi `level_gn()`**:

   - Fungsi ini mengatur logika pengambilan data dari database (`Gn_Biru`) dan melakukan modifikasi pada Trebel berdasarkan progres dan mode yang dipilih.

   - Pengambilan nilai Trebel dilakukan dari kolom yang sesuai di database, dan modifikasi nilai dilakukan dengan mengurangi angka tertentu (misalnya 1 atau 2) sesuai dengan progres dan mode.

3. **Fungsi Adjust**:

   - Fungsi `adjust_id_trebel_progres2_naik_value`, `adjust_id_trebel_progres2_turun_value`, `adjust_id_trebel_progres3_naik_value`, dan `adjust_id_trebel_progres3_turun_value` digunakan untuk melakukan modifikasi terhadap nilai Trebel berdasarkan progres dan mode yang dipilih oleh pengguna.

4. **Pengambilan Data dari Database**:

   - Fungsi `ambil_data_trebel()` digunakan untuk mengambil data Trebel dari ID lain (target_id) yang berbeda dari ID yang sedang diproses.

5. **Input dan Output**:

   - Pengguna memasukkan ID, Level_Gn, progres, dan mode pada bagian atas.

   - Hasil dari proses tersebut (nilai Bass dan Trebel) akan ditampilkan pada entry box di bagian bawah.

Aplikasi ini seharusnya bisa dijalankan untuk menampilkan data berdasarkan input pengguna. Jika ada perubahan pada struktur database atau logika yang perlu diperbaiki lebih lanjut, hal tersebut bisa disesuaikan sesuai kebutuhan.



Bersambung ke:

FUNGSI UNTUK MENGAMBIL DATA TABEL Gn_Biru DARI DATABASE DATAMUSIK.db, DAN MENGATUR BASS/TREBEL SESUAI Level_gn, Progres, dan Mode. (Part-2)



Komentar

Postingan populer dari blog ini

Pemograman R Studio

  Metode Numerik Menggunakan R Pengantar Gambaran Isi Buku Cara Berkontribusi dalam Buku Ini Ucapan Terima Kasih Lisensi 1  Bahasa Pemrograman R 1.1  Sejarah R 1.2  Fitur dan Karakteristik R 1.3  Kelebihan dan Kekurangan R 1.4  RStudio 1.5  Menginstall R dan RStudio 1.6  Working Directory 1.6.1  Mengubah Lokasi Working Directory 1.6.2  Mengubah Lokasi Working Directory Default 1.7  Memasang dan Mengaktifkan Paket R 1.8  Fasilitas Help 1.8.1  Mencari Help dari Suatu Perintah Tertentu 1.8.2  General Help 1.8.3  Fasilitas Help Lainnya 1.9  Referensi 2  Kalkulasi Menggunakan R 2.1  Operator Aritmatik 2.2  Fungsi Aritmetik 2.3  Operator Relasi 2.4  Operator Logika 2.5  Memasukkan Nilai Kedalam Variabel 2.6  Tipe dan Struktur Data 2.7  Vektor 2.7.1  Membuat vektor 2.7.2  Missing Values 2.7.3  Subset Pada Vektor 2.7.4  Operasi Matematis Menggunakan Vektor ...

MIGRASI DATABASE DARI SQLite KE MySQL (Part-1)

  MIGRASI DATABASE DARI SQLite KE MySQL (Part-1) Pemakaian yang mana lebih baik dalam membuat database_musik di mysql atau Exel yang cell Cell pada tabel dilakukan operasi fungsi logika matematika. Untuk keperluan membuat database atau tabel yang memerlukan operasi logika atau matematika, seperti yang Anda sebutkan, MySQL jauh lebih baik dibandingkan Excel. Berikut adalah beberapa alasan mengapa MySQL lebih disarankan: 1. **Kapasitas dan Skalabilitas**: MySQL dapat menangani jumlah data yang jauh lebih besar daripada Excel. Ini penting jika Anda berencana untuk menyimpan banyak data atau melakukan operasi yang kompleks di atas data tersebut. 2. **Kekuatan dan Kinerja**: MySQL dirancang khusus untuk memproses query dan operasi basis data dengan cepat. Ini termasuk operasi matematika, logika, dan agregasi data yang umum dilakukan dalam aplikasi. 3. **Fleksibilitas Struktur**: Dalam MySQL, Anda dapat dengan mudah menentukan struktur tabel yang kompleks dan melakukan kueri yang lebih r...

Cara Menjadi Pengembang Front End – Keterampilan Front End Web Dev

  Menyumbangkan Belajar coding —  kurikulum 3.000 jam gratis 10 JUNI 2022 / #PENGEMBANGAN UJUNG DEPAN Bagaimana Menjadi Pengembang Front End – Keterampilan Front End Web Dev Joel Olawanle Beberapa profesional dengan bayaran tertinggi di dunia adalah pengembang front-end.  Mereka menggunakan pengetahuan dan bakat mereka untuk merancang situs web yang menarik dan ramah pengguna. Pengembang front-end tidak memerlukan gelar atau sertifikat sekolah untuk bekerja.  Sebaliknya, mereka harus memahami dasar-dasar pengembangan front-end, bahasa pemrograman, dan kerangka kerja pengembangan front-end. Dalam panduan ini, Anda akan belajar bagaimana menjadi pengembang front end dengan terlebih dahulu memahami apa yang dimaksud dengan pengembangan front end, keterampilan teknis dan soft skill yang diperlukan, bahasa dan kerangka kerja yang tersedia, dan beberapa langkah untuk memulai. Seorang pengembang front-end di Amerika Serikat dapat memperoleh rata-rata $86,178 per tahun, menu...