Langsung ke konten utama

CRUD DATA PADA TABEL Gn_Cyan_Atas, dan Sub_Gn_Cyan_Atas PADA DATA KOLOM Bass DAN KOLOM Trebel (Part-4)

 CRUD DATA PADA TABEL Gn_Cyan_Atas, dan Sub_Gn_Cyan_Atas PADA DATA KOLOM Bass DAN KOLOM Trebel (Part-4)


Tolong perbaiki kode berikut bagian fungsi pilih nada, agar supaya data dapat ditampilkan menurut progres 1, 2, atau 3, dan mode Naik atau Turun dengan menggunakan fungsi kongruen dan proses nada yang telah diimport.

Berikut kode:

import tkinter as tk

from tkinter import ttk

from tkinter import messagebox

import sqlite3

from kongruensi_trebel_gn_cyan_atas_trebel_praktis import kongruen, proses_trebel


# Initialize the main window

root = tk.Tk()

root.geometry("690x1390")

root.title("Arah Arus Musik Gn_Cyan_Atas dan Sub_Gn_Cyan_Atas")


# Buat frame_top di dalam inner_frame

frame_top = tk.Frame(root)

frame_top.pack(pady=10) # Pengaturan padding agar tidak terlalu dekat dengan elemen lainnya

frame_top.grid_columnconfigure(0, minsize=-20) # Tambahkan kolom negatif (menggeser ke kiri)


# Definisikan entry untuk level_gn dan id, 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)


label_nada = tk.Label(frame_top, text="Nada:")

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

nada_var = tk.StringVar()

nada_combobox = ttk.Combobox(frame_top, textvariable=nada_var)

nada_combobox['values'] = ("Bass", "Trebel")

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


def update_combobox_trebel(event):

    # Hapus opsi yang ada sebelumnya

    combobox_trebel.set('')

    combobox_trebel['values'] = []


    # Cek nilai yang dipilih pada combobox_nada

    nada_selected = nada_combobox.get()

    if nada_selected == "Trebel":

        # Jika Trebel dipilih, tambahkan opsi untuk combobox_trebel

        

        combobox_trebel['values'] = ["Trebel_1", "Trebel_2", "Trebel_3", "Trebel_4", "Trebel_5"]

        trebel_var = tk.StringVar()

        combobox_trebel.grid(row=6, column=1, padx=10, pady=10) # Menampilkan combobox_trebel

    else:

        combobox_trebel.grid_remove() # Sembunyikan combobox_trebel jika bukan Trebel yang dipilih


# Label untuk combobox Trebel

label_trebel = ttk.Label(frame_top, text="Pilih Trebel:")

label_trebel.grid(row=6, column=0, padx=10, pady=10)


# Combobox Trebel (Kosongkan awalnya)

combobox_trebel = ttk.Combobox(frame_top, state="readonly")

combobox_trebel.grid(row=6, column=1, padx=10, pady=10)

combobox_trebel.grid_remove() # Sembunyikan combobox_trebel saat awal


# Tambahkan callback pada perubahan nilai di combobox_nada

nada_combobox.bind("<<ComboboxSelected>>", update_combobox_trebel)


# Fungsi untuk mengambil data Gn_Cyan_Atas dari database berdasarkan ID

def get_data_gn_cyan_atas_from_db(id_selected):

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

    cursor = conn.cursor()

    cursor.execute("SELECT * FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))

    data = cursor.fetchone()

    conn.close()

    return data

        

# Fungsi untuk mengambil data Sub_Gn_Cyan_Bawah dari database berdasarkan Sub_ID

def get_data_sub_gn_cyan_atas_from_db(sub_id_selected):

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

    cursor = conn.cursor()

    cursor.execute("SELECT * FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (sub_id_selected,))

    data = cursor.fetchone()

    conn.close()

    return data


# Fungsi untuk menampilkan messagebox dan memvalidasi input level_gn

def validate_level_gn():

    try:

        level_gn = int(entry_level_gn.get())


        if level_gn == 1:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")

            set_id_entry(1)

        elif level_gn == 2:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")

            set_id_entry(2)

        elif level_gn == 3:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")

            set_id_entry(3)

        elif level_gn == 4:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")

            set_id_entry(1)

        elif level_gn == 5:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")

            set_id_entry(3)

        elif level_gn == 6:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")

            set_id_entry(1)

        elif level_gn == 7:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")

            set_id_entry(2)

        elif level_gn == 8:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")

            set_id_entry(3)

        elif level_gn == 9:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")

            set_id_entry(2)

        elif level_gn == 10:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")

            set_id_entry(3)

        elif level_gn == 11:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")

            set_id_entry(1)

        elif level_gn == 12:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")

            set_id_entry(2)

        else:

            messagebox.showerror("Error", "Masukkan input yang benar.\nInput Level Gn adalah 1 hingga 12")

            reset_entries()


    except ValueError:

        messagebox.showerror("Error", "Input harus berupa angka.")

        reset_entries()

        

# Fungsi untuk mengatur entry ID dan mencegah input selain ID yang valid

def set_id_entry(valid_id):

    entry_id.delete(0, tk.END)

    entry_id.insert(0, valid_id)

    entry_id.config(state='readonly') # Membatasi input hanya pada ID yang valid


# Fungsi untuk mereset entries jika input level_gn tidak valid

def reset_entries():

    entry_level_gn.delete(0, tk.END)

    entry_id.config(state='normal')

    entry_id.delete(0, tk.END)


# Tambahkan tombol untuk memvalidasi level_gn

validate_button = tk.Button(frame_top, text="Validasi Level Gn", bg="yellow", command=validate_level_gn)

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


def pilih_nada():

    try:

        # Ambil data dari entry dan combobox

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get()) # Mengubah progres menjadi integer

        mode_selected = mode_var.get().lower()

        nada_selected = nada_var.get().lower()


        # Hanya berlaku jika Trebel dipilih

        trebel_selected = combobox_trebel.get().lower() if nada_selected == "trebel" else None


        # Koneksi ke database

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

        cursor = conn.cursor()


        # Mengambil data dari tabel Gn_Cyan_Atas berdasarkan ID

        cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))

        data_gn_cyan_atas = cursor.fetchone()


        # Mengambil data dari tabel Sub_Gn_Cyan_Atas berdasarkan Sub_ID = 1

        cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (1,))

        data_sub_gn_cyan_atas = cursor.fetchone()


        conn.close()


        if data_gn_cyan_atas:

            if progres_selected == 2 and mode_selected == "naik":

                # Logika untuk Progres 2 Mode Naik

                if nada_selected == "trebel" and trebel_selected:

                    index_trebel = int(trebel_selected.split('_')[1]) - 1

                    entry_trebel.delete(0, tk.END)

                    entry_trebel.insert(0, adjust_trebel_value(data_gn_cyan_atas[index_trebel], progres_selected-1))

                

            elif progres_selected == 2 and mode_selected == "turun":

                           

                # Logika untuk Progres 2 Mode Turun

                if nada_selected == "trebel" and trebel_selected:

                    index_trebel = int(trebel_selected.split('_')[1]) - 1

                    entry_trebel.delete(0, tk.END)

                    entry_trebel.insert(0, adjust_trebel_value(data_gn_cyan_atas[index_trebel], progres_selected-1))                

                # (Tambahkan logika untuk mode turun sesuai kebutuhan Anda)


            # Tambahkan logika untuk progres lainnya dan mode lainnya jika diperlukan

        else: 

       

            messagebox.showerror("Error", "Data tidak ditemukan dalam Gn_Cyan_Atas untuk ID yang dipilih.")


    except ValueError:

        messagebox.showerror("Error", "Masukkan data yang valid.")

            

# Fungsi untuk menyesuaikan nilai sub bass berdasarkan progres

def adjust_trebel_value(trebel_value, progres):

    if trebel_value.isdigit():

        # Menyesuaikan nilai dengan mengurangi setiap digit dengan progres

        adjusted_value = ''.join(str(int(char) - progres) if char.isdigit() else char for char in trebel_value)

    else:

        adjusted_value = trebel_value

    return adjusted_value

               

# Fungsi untuk memastikan urutan Level_Gn berdsarkan ID dan kolom

def level_gn(table_name):

    try:

        level_gn_selected = int(entry_level_gn.get()) # Mendapatkan Level_Gn dari input

        

        # Variabel awal untuk ID, kolom, dan modifikasi angka (hanya digunakan untuk Sub_Gn_Cyan_Atas)

        id_selected = None

        kolom_selected = None

        modifikasi_angka = 0 # Default 0, tidak ada pengurangan


        if table_name == 'Gn_Cyan_Atas':

            # Logika untuk tabel Gn_Cyan_Atas

            if level_gn_selected == 1:

                id_selected = 1

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 4:

                id_selected = 1

                kolom_selected = 'Bass_2'

            elif level_gn_selected == 6:

                id_selected = 1

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 11:

                id_selected = 1

                kolom_selected = 'Bass_5'

            elif level_gn_selected == 2:

                id_selected = 2

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 7:

                id_selected = 2

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 9:

                id_selected = 2

                kolom_selected = 'Bass_4'

            elif level_gn_selected == 12:

                id_selected = 2

                kolom_selected = 'Bass_5'

            elif level_gn_selected == 3:

                id_selected = 3

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 5:

                id_selected = 3

                kolom_selected = 'Bass_2'

            elif level_gn_selected == 8:

                id_selected = 3

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 10:

                id_selected = 3

                kolom_selected = 'Bass_4'

            else:

                messagebox.showerror("Error", "Level_Gn harus antara 1 hingga 12.")

                return None, None


        elif table_name == 'Sub_Gn_Cyan_Atas':

            # Logika untuk tabel Sub_Gn_Cyan_Atas

            if level_gn_selected == 1:

                id_selected = 1

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 5:

                id_selected = 1

                kolom_selected = 'Bass_1'

                modifikasi_angka = -1

            elif level_gn_selected == 9:

                id_selected = 1

                kolom_selected = 'Bass_1'

                modifikasi_angka = -2

            elif level_gn_selected == 2:

                id_selected = 1

                kolom_selected = 'Bass_2'

            elif level_gn_selected == 6:

                id_selected = 1

                kolom_selected = 'Bass_2'

                modifikasi_angka = -1

            elif level_gn_selected == 10:

                id_selected = 1

                kolom_selected = 'Bass_2'

                modifikasi_angka = -2

            elif level_gn_selected == 3:

                id_selected = 1

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 7:

                id_selected = 1

                kolom_selected = 'Bass_3'

                modifikasi_angka = -1

            elif level_gn_selected == 11:

                id_selected = 1

                kolom_selected = 'Bass_3'

                modifikasi_angka = -2

            elif level_gn_selected == 4:

                id_selected = 1

                kolom_selected = 'Bass_4'

            elif level_gn_selected == 8:

                id_selected = 1

                kolom_selected = 'Bass_4'

                modifikasi_angka = -1

            elif level_gn_selected == 12:

                id_selected = 1

                kolom_selected = 'Bass_4'

                modifikasi_angka = -2

            else:

                messagebox.showerror("Error", "Level_Gn harus antara 1 hingga 12.")

                return None, None, None


        else:

            messagebox.showerror("Error", "Nama tabel tidak valid!")

            return None, None, None


        # Menyisipkan ID dan kolom yang dipilih ke dalam entry box

        entry_id.delete(0, 'end')

        entry_id.insert(0, str(id_selected))


        entry_kolom.delete(0, 'end')

        entry_kolom.insert(0, kolom_selected)


        if table_name == 'Gn_Cyan_Atas':

            return id_selected, kolom_selected

        elif table_name == 'Sub_Gn_Cyan_Atas':

            return id_selected, kolom_selected, modifikasi_angka


    except ValueError:

        messagebox.showerror("Error", "Masukkan nilai Level_Gn yang valid!")

        return None, None, None                  


#label dan entry

label_trebel_gn_cyan_atas = tk.Label(frame_top, text="Trebel Gn_Cyan_Atas:")

label_trebel_gn_cyan_atas.grid(row=10, column=0, padx=0, pady=7)

entry_trebel = tk.Entry(frame_top)

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


label_trebel_sub_gn_cyan_atas = tk.Label(frame_top, text="Sub Trebel Gn_Cyan_Atas:")

label_trebel_sub_gn_cyan_atas.grid(row=11, column=0, padx=0, pady=7)

entry_sub_trebel = tk.Entry(frame_top)

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


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

separator.grid(row=7, column=0, sticky

="ew", pady=15)


# Tombol untuk menjalankan fungsi pilih_nada

button_pilih_nada = tk.Button(frame_top, text="Pilih Nada", bg="lightgreen", command=pilih_nada)

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


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

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


root.mainloop()

.....


Untuk menyesuaikan kode Anda agar dapat menampilkan data berdasarkan progres 1, 2, atau 3 serta mode Naik atau Turun menggunakan fungsi `kongruen` dan `proses_trebel`, berikut adalah perbaikan pada fungsi `pilih_nada`:


```python

def pilih_nada():

    try:

        # Ambil data dari entry dan combobox

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get()) # Mengubah progres menjadi integer

        mode_selected = mode_var.get().lower()

        nada_selected = nada_var.get().lower()


        # Hanya berlaku jika Trebel dipilih

        trebel_selected = combobox_trebel.get().lower() if nada_selected == "trebel" else None


        # Koneksi ke database

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

        cursor = conn.cursor()


        # Mengambil data dari tabel Gn_Cyan_Atas berdasarkan ID

        cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))

        data_gn_cyan_atas = cursor.fetchone()


        # Mengambil data dari tabel Sub_Gn_Cyan_Atas berdasarkan Sub_ID = 1

        cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (1,))

        data_sub_gn_cyan_atas = cursor.fetchone()


        conn.close()


        if data_gn_cyan_atas:

            # Tentukan index trebel yang dipilih berdasarkan nilai combobox trebel

            if nada_selected == "trebel" and trebel_selected:

                index_trebel = int(trebel_selected.split('_')[1]) - 1


                # Pilih data sesuai dengan mode dan progres

                if progres_selected == 1:

                    # Logika untuk Progres 1

                    if mode_selected == "naik":

                        trebel_value = proses_trebel(data_gn_cyan_atas[index_trebel], 1)

                    elif mode_selected == "turun":

                        trebel_value = proses_trebel(data_sub_gn_cyan_atas[index_trebel], 1)


                elif progres_selected == 2:

                    # Logika untuk Progres 2

                    if mode_selected == "naik":

                        trebel_value = proses_trebel(data_gn_cyan_atas[index_trebel], 2)

                    elif mode_selected == "turun":

                        trebel_value = proses_trebel(data_sub_gn_cyan_atas[index_trebel], 2)


                elif progres_selected == 3:

                    # Logika untuk Progres 3

                    if mode_selected == "naik":

                        trebel_value = proses_trebel(data_gn_cyan_atas[index_trebel], 3)

                    elif mode_selected == "turun":

                        trebel_value = proses_trebel(data_sub_gn_cyan_atas[index_trebel], 3)


                # Tampilkan nilai pada entry_trebel

                entry_trebel.delete(0, tk.END)

                entry_trebel.insert(0, trebel_value)


            # Jika nada yang dipilih adalah Bass

            elif nada_selected == "bass":

                bass_value = kongruen(level_gn_selected, progres_selected)

                entry_trebel.delete(0, tk.END)

                entry_trebel.insert(0, bass_value)


        else:

            messagebox.showerror("Error", "Data tidak ditemukan dalam Gn_Cyan_Atas")


    except ValueError:

        messagebox.showerror("Error", "Input tidak valid.")

```

**Penjelasan Perubahan:**

1. **Logika untuk Progres dan Mode:** Saya menambahkan logika untuk menangani berbagai kombinasi progres (1, 2, 3) dan mode (Naik, Turun). Fungsi `proses_trebel` digunakan untuk mengolah nilai trebel, sedangkan `kongruen` digunakan untuk nilai bass berdasarkan level Gn dan progres yang dipilih.

2. **Pengaturan Kondisional:** Fungsi ini sekarang mendukung pilihan `Trebel` dan `Bass`, serta menyesuaikan proses berdasarkan input progres dan mode dari pengguna.

3. **Validasi dan Eksekusi:** Pastikan Anda mengisi `entry_trebel` dengan nilai yang dihasilkan dari fungsi yang relevan berdasarkan kondisi progres dan mode yang dipilih.

Dengan penyesuaian ini, kode akan mengambil data yang sesuai dari database dan mengolahnya berdasarkan kondisi progres dan mode sebelum menampilkan hasilnya di `entry_trebel`. Pastikan juga bahwa fungsi `proses_trebel` dan `kongruen` sudah sesuai dengan yang diharapkan.


Muncul pesan error':

Exception in Tkinter callback

Traceback (most recent call last):

  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/tkinter/__init__.py", line 1948, in __call__

    return self.func(*args)

           ^^^^^^^^^^^^^^^^

  File "/storage/emulated/0/NadaPL/KGNS-NPL/CRUD_Gn_Cyan_Atas_Trebel.py", line 204, in pilih_nada

    else:

          

TypeError: proses_trebel() missing 3 required positional arguments: 'trebel_id3', 'progres', a

nd 'mode'


Pesan error yang muncul menunjukkan bahwa fungsi `proses_trebel()` dipanggil tanpa menyertakan tiga argumen yang diperlukan, yaitu `trebel_id3`, `progres`, dan `mode`.

Untuk memperbaiki error ini, pastikan bahwa ketika Anda memanggil fungsi `proses_trebel()`, semua argumen yang dibutuhkan telah diberikan. Berikut adalah contoh bagaimana fungsi ini seharusnya dipanggil:


```python

proses_trebel(trebel_id1, trebel_id2, trebel_id3, progres, mode)

```

Jika Anda tidak memiliki semua argumen yang diperlukan saat memanggil fungsi, pertimbangkan untuk menambahkannya atau memodifikasi fungsi `proses_trebel()` agar argumen tersebut bersifat opsional dengan memberikan nilai default. Contohnya:


```python

def proses_trebel(trebel_id1, trebel_id2, trebel_id3=None, progres=None, mode=None):

    # Isi fungsi di sini

```

Pastikan Anda memeriksa di mana `proses_trebel()` dipanggil dalam kode Anda, khususnya di sekitar baris 204 dalam file `CRUD_Gn_Cyan_Atas_Trebel.py`, dan tambahkan argumen yang diperlukan atau modifikasi fungsi seperti yang dijelaskan di atas.


Apakah pada kode harus juga menyertakan fungsi def adjust_trebel_value


Pada kode yang diberikan, tidak ada fungsi bernama `adjust_trebel_value`. Namun, melihat konteks dan logika yang digunakan, sepertinya yang dimaksud adalah fungsi `proses_trebel`. Fungsi ini berfungsi untuk memproses nilai Trebel sesuai dengan mode dan progres yang dipilih.


Jika ada kebutuhan untuk memodifikasi atau menyesuaikan nilai Trebel dengan aturan atau logika khusus lainnya, Anda mungkin perlu menambahkan fungsi seperti `adjust_trebel_value`. Berikut beberapa pertimbangan kapan fungsi semacam itu diperlukan:


1. **Penyesuaian Spesifik untuk Nilai Trebel**: Jika Anda ingin menerapkan penyesuaian atau perubahan tambahan pada nilai Trebel yang dihasilkan oleh `proses_trebel`, maka `adjust_trebel_value` atau fungsi serupa bisa berguna.


2. **Logika Kondisional Tambahan**: Misalnya, jika ada kondisi khusus di mana nilai Trebel harus diubah lebih lanjut berdasarkan aturan yang belum ditangani oleh `proses_trebel`, maka fungsi `adjust_trebel_value` dapat digunakan untuk menangani logika tersebut.


3. **Keterbacaan Kode**: Jika logika di dalam `pilih_nada` menjadi terlalu panjang atau rumit, memindahkan sebagian dari logika tersebut ke dalam fungsi `adjust_trebel_value` dapat membantu dalam membuat kode lebih mudah dibaca dan dipelihara.


Jika Anda merasa bahwa `proses_trebel` sudah mencakup semua logika yang dibutuhkan untuk memproses nilai Trebel sesuai dengan mode dan progres, maka Anda tidak perlu menambahkan fungsi tambahan seperti `adjust_trebel_value`. Namun, jika ada kebutuhan tambahan untuk mengatur atau menyesuaikan nilai Trebel di luar apa yang telah ditangani oleh `proses_trebel`, maka fungsi seperti itu akan diperlukan.


**Contoh penggunaan `adjust_trebel_value`:**


```python

def adjust_trebel_value(trebel_value, level_gn, progres_selected, mode_selected):

    # Contoh logika penyesuaian nilai trebel

    if progres_selected == 1 and mode_selected == "naik":

        # Modifikasi nilai trebel_value berdasarkan level_gn atau aturan lainnya

        trebel_value = modify_value_based_on_rules(trebel_value, level_gn)

    elif progres_selected == 2 and mode_selected == "turun":

        # Modifikasi lain untuk kasus tertentu

        trebel_value = another_modification(trebel_value, level_gn)

    

    return trebel_value

```


Lalu Anda bisa memanggil `adjust_trebel_value` di dalam fungsi `pilih_nada` setelah mendapatkan `trebel_value` dari `proses_trebel`:


```python

trebel_value = adjust_trebel_value(trebel_value, level_gn_selected, progres_selected, mode_selected)

```

Jika tidak ada kebutuhan tambahan seperti itu, Anda dapat tetap menggunakan logika yang sudah ada tanpa perlu menambahkan fungsi baru.


Kode isi file kongruensi_trebel_gn_cyan_atas_praktis.py sudah saya masukkan ke dalam kode isi file CRUD_Gn_Cyan_Atas_Trebel.py. Tolong perbaiki kode agar supaya data terpilih dapat ditampilkan berdasarkan progres 1, 2, atau 3 dan berdasarkan mode Naik atau Turun. Berikut ini kodenya:

import tkinter as tk

from tkinter import ttk

from tkinter import messagebox

import sqlite3


# Initialize the main window

root = tk.Tk()

root.geometry("690x1390")

root.title("Arah Arus Musik Gn_Cyan_Atas dan Sub_Gn_Cyan_Atas")


# Buat frame_top di dalam inner_frame

frame_top = tk.Frame(root)

frame_top.pack(pady=10) # Pengaturan padding agar tidak terlalu dekat dengan elemen lainnya

frame_top.grid_columnconfigure(0, minsize=-20) # Tambahkan kolom negatif (menggeser ke kiri)


# Definisikan entry untuk level_gn dan id, 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)


label_nada = tk.Label(frame_top, text="Nada:")

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

nada_var = tk.StringVar()

nada_combobox = ttk.Combobox(frame_top, textvariable=nada_var)

nada_combobox['values'] = ("Bass", "Trebel")

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


def update_combobox_trebel(event):

    # Hapus opsi yang ada sebelumnya

    combobox_trebel.set('')

    combobox_trebel['values'] = []


    # Cek nilai yang dipilih pada combobox_nada

    nada_selected = nada_combobox.get()

    if nada_selected == "Trebel":

        # Jika Trebel dipilih, tambahkan opsi untuk combobox_trebel

        

        combobox_trebel['values'] = ["Trebel_1", "Trebel_2", "Trebel_3", "Trebel_4", "Trebel_5"]

        trebel_var = tk.StringVar()

        combobox_trebel.grid(row=6, column=1, padx=10, pady=10) # Menampilkan combobox_trebel

    else:

        combobox_trebel.grid_remove() # Sembunyikan combobox_trebel jika bukan Trebel yang dipilih


# Label untuk combobox Trebel

label_trebel = ttk.Label(frame_top, text="Pilih Trebel:")

label_trebel.grid(row=6, column=0, padx=10, pady=10)


# Combobox Trebel (Kosongkan awalnya)

combobox_trebel = ttk.Combobox(frame_top, state="readonly")

combobox_trebel.grid(row=6, column=1, padx=10, pady=10)

combobox_trebel.grid_remove() # Sembunyikan combobox_trebel saat awal


# Tambahkan callback pada perubahan nilai di combobox_nada

nada_combobox.bind("<<ComboboxSelected>>", update_combobox_trebel)


# Fungsi untuk mengambil data Gn_Cyan_Atas dari database berdasarkan ID

def get_data_gn_cyan_atas_from_db(id_selected):

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

    cursor = conn.cursor()

    cursor.execute("SELECT * FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))

    data = cursor.fetchone()

    conn.close()

    return data

        

# Fungsi untuk mengambil data Sub_Gn_Cyan_Bawah dari database berdasarkan Sub_ID

def get_data_sub_gn_cyan_atas_from_db(sub_id_selected):

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

    cursor = conn.cursor()

    cursor.execute("SELECT * FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (sub_id_selected,))

    data = cursor.fetchone()

    conn.close()

    return data


# Fungsi untuk menampilkan messagebox dan memvalidasi input level_gn

def validate_level_gn():

    try:

        level_gn = int(entry_level_gn.get())


        if level_gn == 1:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")

            set_id_entry(1)

        elif level_gn == 2:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")

            set_id_entry(2)

        elif level_gn == 3:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")

            set_id_entry(3)

        elif level_gn == 4:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")

            set_id_entry(1)

        elif level_gn == 5:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")

            set_id_entry(3)

        elif level_gn == 6:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")

            set_id_entry(1)

        elif level_gn == 7:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")

            set_id_entry(2)

        elif level_gn == 8:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")

            set_id_entry(3)

        elif level_gn == 9:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")

            set_id_entry(2)

        elif level_gn == 10:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")

            set_id_entry(3)

        elif level_gn == 11:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")

            set_id_entry(1)

        elif level_gn == 12:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")

            set_id_entry(2)

        else:

            messagebox.showerror("Error", "Masukkan input yang benar.\nInput Level Gn adalah 1 hingga 12")

            reset_entries()


    except ValueError:

        messagebox.showerror("Error", "Input harus berupa angka.")

        reset_entries()

        

# Fungsi untuk mengatur entry ID dan mencegah input selain ID yang valid

def set_id_entry(valid_id):

    entry_id.delete(0, tk.END)

    entry_id.insert(0, valid_id)

    entry_id.config(state='readonly') # Membatasi input hanya pada ID yang valid


# Fungsi untuk mereset entries jika input level_gn tidak valid

def reset_entries():

    entry_level_gn.delete(0, tk.END)

    entry_id.config(state='normal')

    entry_id.delete(0, tk.END)


# Tambahkan tombol untuk memvalidasi level_gn

validate_button = tk.Button(frame_top, text="Validasi Level Gn", bg="yellow", command=validate_level_gn)

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


def pilih_nada():

    try:

        # Ambil data dari entry dan combobox

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get()) # Mengubah progres menjadi integer

        mode_selected = mode_var.get().lower()

        nada_selected = nada_var.get().lower()


        # Hanya berlaku jika Trebel dipilih

        trebel_selected = combobox_trebel.get().lower() if nada_selected == "trebel" else None


        # Koneksi ke database

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

        cursor = conn.cursor()


        # Mengambil data dari tabel Gn_Cyan_Atas berdasarkan ID

        cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))

        data_gn_cyan_atas = cursor.fetchone()


        # Mengambil data dari tabel Sub_Gn_Cyan_Atas berdasarkan Sub_ID = 1

        cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (1,))

        data_sub_gn_cyan_atas = cursor.fetchone()


        conn.close()


        if data_gn_cyan_atas:

            # Tentukan index trebel yang dipilih berdasarkan nilai combobox trebel

            if nada_selected == "trebel" and trebel_selected:

                index_trebel = int(trebel_selected.split('_')[1]) - 1


                # Pilih data sesuai dengan mode dan progres

                if progres_selected == 1:

                    # Logika untuk Progres 1

                    if mode_selected == "naik":

                        trebel_value = proses_trebel(data_gn_cyan_atas[index_trebel], 1)

                    elif mode_selected == "turun":

                        trebel_value = proses_trebel(data_sub_gn_cyan_atas[index_trebel], 1)


                elif progres_selected == 2:

                    # Logika untuk Progres 2

                    if mode_selected == "naik":

                        trebel_value = proses_trebel(data_gn_cyan_atas[index_trebel], 2)

                    elif mode_selected == "turun":

                        trebel_value = proses_trebel(data_sub_gn_cyan_atas[index_trebel], 2)


                elif progres_selected == 3:

                    # Logika untuk Progres 3

                    if mode_selected == "naik":

                        trebel_value = proses_trebel(data_gn_cyan_atas[index_trebel], 3)

                    elif mode_selected == "turun":

                        trebel_value = proses_trebel(data_sub_gn_cyan_atas[index_trebel], 3)


                # Tampilkan nilai pada entry_trebel

                entry_trebel.delete(0, tk.END)

                entry_trebel.insert(0, trebel_value)


            # Jika nada yang dipilih adalah Bass


        else:

            messagebox.showerror("Error", "Data tidak ditemukan dalam Gn_Cyan_Atas")


    except ValueError:

        messagebox.showerror("Error", "Input tidak valid.")

  

def kongruen(data1, data2):

    # Fungsi untuk menentukan kongruensi antar dua data Trebel

    return ''.join(str(int(d1) + int(d2)) for d1, d2 in zip(data1, data2))


def proses_trebel(trebel_id1, trebel_id2, trebel_id3, progres, mode):

    # Fungsi umum untuk proses Trebel berdasarkan progres dan mode


    if progres == 1:

        # Untuk progres 1, langsung return nilai yang sesuai

        return trebel_id1, trebel_id2, trebel_id3


    elif progres == 2:

        if mode == "Naik":

            # Kurangi 1 dari digit angka dan kongruen sesuai aturan

            return (kongruen(trebel_id1, trebel_id2),

                    kongruen(trebel_id2, trebel_id3),

                    kongruen(trebel_id3, trebel_id1))


        elif mode == "Turun":

            # Kurangi 1 dari digit angka dan kongruen sesuai aturan

            return (kongruen(trebel_id1, trebel_id3),

                    kongruen(trebel_id2, trebel_id1),

                    kongruen(trebel_id3, trebel_id2))


    elif progres == 3:

        if mode == "Naik":

            # Kurangi 2 dari digit angka dan kongruen sesuai aturan

            return (kongruen(trebel_id1, trebel_id3),

                    kongruen(trebel_id2, trebel_id1),

                    kongruen(trebel_id3, trebel_id2))


        elif mode == "Turun":

            # Kurangi 2 dari digit angka dan kongruen sesuai aturan

            return (kongruen(trebel_id1, trebel_id2),

                    kongruen(trebel_id2, trebel_id3),

                    kongruen(trebel_id3, trebel_id1))


    return None # Jika kondisi tidak sesuai

                                                                        

# Fungsi untuk memastikan urutan Level_Gn berdsarkan ID dan kolom

def level_gn(table_name):

    try:

        level_gn_selected = int(entry_level_gn.get()) # Mendapatkan Level_Gn dari input

        

        # Variabel awal untuk ID, kolom, dan modifikasi angka (hanya digunakan untuk Sub_Gn_Cyan_Atas)

        id_selected = None

        kolom_selected = None

        modifikasi_angka = 0 # Default 0, tidak ada pengurangan


        if table_name == 'Gn_Cyan_Atas':

            # Logika untuk tabel Gn_Cyan_Atas

            if level_gn_selected == 1:

                id_selected = 1

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 4:

                id_selected = 1

                kolom_selected = 'Bass_2'

            elif level_gn_selected == 6:

                id_selected = 1

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 11:

                id_selected = 1

                kolom_selected = 'Bass_5'

            elif level_gn_selected == 2:

                id_selected = 2

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 7:

                id_selected = 2

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 9:

                id_selected = 2

                kolom_selected = 'Bass_4'

            elif level_gn_selected == 12:

                id_selected = 2

                kolom_selected = 'Bass_5'

            elif level_gn_selected == 3:

                id_selected = 3

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 5:

                id_selected = 3

                kolom_selected = 'Bass_2'

            elif level_gn_selected == 8:

                id_selected = 3

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 10:

                id_selected = 3

                kolom_selected = 'Bass_4'

            else:

                messagebox.showerror("Error", "Level_Gn harus antara 1 hingga 12.")

                return None, None


        elif table_name == 'Sub_Gn_Cyan_Atas':

            # Logika untuk tabel Sub_Gn_Cyan_Atas

            if level_gn_selected == 1:

                id_selected = 1

                kolom_selected = 'Bass_1'

            elif level_gn_selected == 5:

                id_selected = 1

                kolom_selected = 'Bass_1'

                modifikasi_angka = -1

            elif level_gn_selected == 9:

                id_selected = 1

                kolom_selected = 'Bass_1'

                modifikasi_angka = -2

            elif level_gn_selected == 2:

                id_selected = 1

                kolom_selected = 'Bass_2'

            elif level_gn_selected == 6:

                id_selected = 1

                kolom_selected = 'Bass_2'

                modifikasi_angka = -1

            elif level_gn_selected == 10:

                id_selected = 1

                kolom_selected = 'Bass_2'

                modifikasi_angka = -2

            elif level_gn_selected == 3:

                id_selected = 1

                kolom_selected = 'Bass_3'

            elif level_gn_selected == 7:

                id_selected = 1

                kolom_selected = 'Bass_3'

                modifikasi_angka = -1

            elif level_gn_selected == 11:

                id_selected = 1

                kolom_selected = 'Bass_3'

                modifikasi_angka = -2

            elif level_gn_selected == 4:

                id_selected = 1

                kolom_selected = 'Bass_4'

            elif level_gn_selected == 8:

                id_selected = 1

                kolom_selected = 'Bass_4'

                modifikasi_angka = -1

            elif level_gn_selected == 12:

                id_selected = 1

                kolom_selected = 'Bass_4'

                modifikasi_angka = -2

            else:

                messagebox.showerror("Error", "Level_Gn harus antara 1 hingga 12.")

                return None, None, None


        else:

            messagebox.showerror("Error", "Nama tabel tidak valid!")

            return None, None, None


        # Menyisipkan ID dan kolom yang dipilih ke dalam entry box

        entry_id.delete(0, 'end')

        entry_id.insert(0, str(id_selected))


        entry_kolom.delete(0, 'end')

        entry_kolom.insert(0, kolom_selected)


        if table_name == 'Gn_Cyan_Atas':

            return id_selected, kolom_selected

        elif table_name == 'Sub_Gn_Cyan_Atas':

            return id_selected, kolom_selected, modifikasi_angka


    except ValueError:

        messagebox.showerror("Error", "Masukkan nilai Level_Gn yang valid!")

        return None, None, None                  


#label dan entry

label_trebel_gn_cyan_atas = tk.Label(frame_top, text="Trebel Gn_Cyan_Atas:")

label_trebel_gn_cyan_atas.grid(row=10, column=0, padx=0, pady=7)

entry_trebel = tk.Entry(frame_top)

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


label_trebel_sub_gn_cyan_atas = tk.Label(frame_top, text="Sub Trebel Gn_Cyan_Atas:")

label_trebel_sub_gn_cyan_atas.grid(row=11, column=0, padx=0, pady=7)

entry_sub_trebel = tk.Entry(frame_top)

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


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


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


# Tombol untuk menjalankan fungsi pilih_nada

button_pilih_nada = tk.Button(frame_top, text="Pilih Nada", bg="lightgreen", command=pilih_nada)

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


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

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


root.mainloop()


Berikut ini adalah perbaikan dari kode yang sudah Anda buat untuk memastikan bahwa data yang dipilih dapat ditampilkan berdasarkan progres 1, 2, atau 3 serta berdasarkan mode Naik atau Turun. Saya juga melakukan beberapa perbaikan dan penyesuaian untuk memastikan kode bekerja dengan baik:


```python

import tkinter as tk

from tkinter import ttk

from tkinter import messagebox

import sqlite3


# Initialize the main window

root = tk.Tk()

root.geometry("690x1390")

root.title("Arah Arus Musik Gn_Cyan_Atas dan Sub_Gn_Cyan_Atas")


# Buat frame_top di dalam inner_frame

frame_top = tk.Frame(root)

frame_top.pack(pady=10) # Pengaturan padding agar tidak terlalu dekat dengan elemen lainnya

frame_top.grid_columnconfigure(0, minsize=-20) # Tambahkan kolom negatif (menggeser ke kiri)


# Definisikan entry untuk level_gn dan id, 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)


label_nada = tk.Label(frame_top, text="Nada:")

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

nada_var = tk.StringVar()

nada_combobox = ttk.Combobox(frame_top, textvariable=nada_var)

nada_combobox['values'] = ("Bass", "Trebel")

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


def update_combobox_trebel(event):

    # Hapus opsi yang ada sebelumnya

    combobox_trebel.set('')

    combobox_trebel['values'] = []


    # Cek nilai yang dipilih pada combobox_nada

    nada_selected = nada_combobox.get()

    if nada_selected == "Trebel":

        # Jika Trebel dipilih, tambahkan opsi untuk combobox_trebel

        combobox_trebel['values'] = ["Trebel_1", "Trebel_2", "Trebel_3", "Trebel_4", "Trebel_5"]

        trebel_var = tk.StringVar()

        combobox_trebel.grid(row=6, column=1, padx=10, pady=10) # Menampilkan combobox_trebel

    else:

        combobox_trebel.grid_remove() # Sembunyikan combobox_trebel jika bukan Trebel yang dipilih


# Label untuk combobox Trebel

label_trebel = ttk.Label(frame_top, text="Pilih Trebel:")

label_trebel.grid(row=6, column=0, padx=10, pady=10)


# Combobox Trebel (Kosongkan awalnya)

combobox_trebel = ttk.Combobox(frame_top, state="readonly")

combobox_trebel.grid(row=6, column=1, padx=10, pady=10)

combobox_trebel.grid_remove() # Sembunyikan combobox_trebel saat awal


# Tambahkan callback pada perubahan nilai di combobox_nada

nada_combobox.bind("<<ComboboxSelected>>", update_combobox_trebel)


# Fungsi untuk mengambil data Gn_Cyan_Atas dari database berdasarkan ID

def get_data_gn_cyan_atas_from_db(id_selected):

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

    cursor = conn.cursor()

    cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))

    data = cursor.fetchone()

    conn.close()

    return data

        

# Fungsi untuk mengambil data Sub_Gn_Cyan_Atas dari database berdasarkan Sub_ID

def get_data_sub_gn_cyan_atas_from_db(sub_id_selected):

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

    cursor = conn.cursor()

    cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (sub_id_selected,))

    data = cursor.fetchone()

    conn.close()

    return data


# Fungsi untuk menampilkan messagebox dan memvalidasi input level_gn

def validate_level_gn():

    try:

        level_gn = int(entry_level_gn.get())


        if level_gn == 1:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")

            set_id_entry(1)

        elif level_gn == 2:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")

            set_id_entry(2)

        elif level_gn == 3:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")

            set_id_entry(3)

        elif level_gn == 4:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")

            set_id_entry(1)

        elif level_gn == 5:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")

            set_id_entry(3)

        elif level_gn == 6:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")

            set_id_entry(1)

        elif level_gn == 7:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")

            set_id_entry(2)

        elif level_gn == 8:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")

            set_id_entry(3)

        elif level_gn == 9:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")

            set_id_entry(2)

        elif level_gn == 10:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")

            set_id_entry(3)

        elif level_gn == 11:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")

            set_id_entry(1)

        elif level_gn == 12:

            messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")

            set_id_entry(2)

        else:

            messagebox.showerror("Error", "Masukkan input yang benar.\nInput Level Gn adalah 1 hingga 12")

            reset_entries()


    except ValueError:

        messagebox.showerror("Error", "Input harus berupa angka.")

        reset_entries()

        

# Fungsi untuk mengatur entry ID dan mencegah input selain ID yang valid

def set_id_entry(valid_id):

    entry_id.delete(0, tk.END)

    entry_id.insert(0, valid_id)

    entry_id.config(state='readonly') # Membatasi input hanya pada ID yang valid


# Fungsi untuk mereset entries jika input level_gn tidak valid

def reset_entries():

    entry_level_gn.delete(0, tk.END)

    entry_id.config(state='normal')

    entry_id.delete(0, tk.END)


# Tambahkan tombol untuk memvalidasi level_gn

validate_button = tk.Button(frame_top, text="Validasi Level Gn", bg="yellow", command=validate_level_gn)

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


def pilih_nada():

    try:

        # Ambil data dari entry dan combobox

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get()) # Mengubah progres menjadi integer

        mode_selected = mode_var.get().lower()

        nada_selected = nada_var.get().lower()


        # Hanya berlaku jika Trebel dipilih

        trebel_selected = combobox_trebel.get().lower() if nada_selected == "trebel" else None


        # Koneksi ke database

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

        cursor = conn.cursor()


        # Mengambil data dari tabel Gn_Cyan_


Setelah cursor=conn.cursor(), , lanjutkan kodenya hingga selesai 


cursor = conn.cursor()


        # Mengambil data dari tabel Gn_Cyan_Atas berdasarkan ID

        cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))

        data_gn_cyan_atas = cursor.fetchone()


        # Mengambil data dari tabel Sub_Gn_Cyan_Atas berdasarkan Sub_ID = 1

        cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (1,))

        data_sub_gn_cyan_atas = cursor.fetchone()


        conn.close()


        if data_gn_cyan_atas:

            # Tentukan index trebel yang dipilih berdasarkan nilai combobox trebel

            if nada_selected == "trebel" and trebel_selected:

                index_trebel = int(trebel_selected.split('_')[1]) - 1


                # Pilih data sesuai dengan mode dan progres

                if progres_selected == 1:

                    # Logika untuk Progres 1

                    if mode_selected == "naik":

                        trebel_value = proses_trebel(data_gn_cyan_atas[index_trebel], 1)

                    elif mode_selected == "turun":

                        trebel_value = proses_trebel(data_sub_gn_cyan_atas[index_trebel], 1)


                elif progres_selected == 2:

                    # Logika untuk Progres 2

                    if mode_selected == "naik":

                        trebel_value = proses_trebel(data_gn_cyan_atas[index_trebel], 2)

                    elif mode_selected == "turun":

                        trebel_value = proses_trebel(data_sub_gn_cyan_atas[index_trebel], 2)


                elif progres_selected == 3:

                    # Logika untuk Progres 3

                    if mode_selected == "naik":

                        trebel_value = proses_trebel(data_gn_cyan_atas[index_trebel], 3)

                    elif mode_selected == "turun":

                        trebel_value = proses_trebel(data_sub_gn_cyan_atas[index_trebel], 3)


                # Menampilkan nilai trebel yang dipilih

                messagebox.showinfo("Info", f"Nilai Trebel yang dipilih: {trebel_value}")


            else:

                messagebox.showwarning("Peringatan", "Trebel harus dipilih jika Nada adalah Trebel.")

        else:

            messagebox.showerror("Error", "Data tidak ditemukan untuk ID yang dipilih.")


    except ValueError:

        messagebox.showerror("Error", "Terjadi kesalahan dalam pemrosesan data.")

    except sqlite3.Error as e:

        messagebox.showerror("Error", f"Database error: {e}")


def proses_trebel(trebel_value, progres):

    try:

        # Contoh logika untuk memproses nilai trebel berdasarkan progres

        if progres == 1:

            return trebel_value # Tidak ada perubahan untuk progres 1

        elif progres == 2:

            return trebel_value + 1 # Contoh perubahan nilai untuk progres 2

        elif progres == 3:

            return trebel_value + 2 # Contoh perubahan nilai untuk progres 3

        else:

            raise ValueError("Progres tidak valid.")

    except Exception as e:

        messagebox.showerror("Error", f"Terjadi kesalahan dalam pemrosesan Trebel: {e}")

        return None


# Tambahkan tombol untuk memvalidasi nada yang dipilih

validate_nada_button = tk.Button(frame_top, text="Pilih Nada", bg="green", command=pilih_nada)

validate_nada_button.grid(row=7, column=0, columnspan=2, padx=10, pady=10)


# Jalankan aplikasi

root.mainloop()


Tolong perbaiki fungsi proses_trebel dengan aturan logika berikut ini:

Berikut ini logika yang diterapkan pada data Trebel di tabel Gn_Cyan_Atas, dan tabel Sub_Gn_Cyan_Atas:


Logika pada data Trebel di tabel Gn_Cyan_Atas:

I. Jika data gugus nada yang terpilih dari kolom Trebel pada Gn_Cyan_Atas:

1a. Jika level_gn = 1, atau level_gn = 4, atau level_gn = 6, atau level_gn = 11 (sesuai dengan level_gn data Bass), dan user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5:

jika progres 1, dan jika mode Naik atau Turun: 

maka data dari Trebel_1 id 1 menjadi data Trebel_1 id 1, dan data dari Trebel_2 id 1 menjadi data Trebel_2 id 1, dan data dari Trebel_3 id 1 menjadi data Trebel_3 id 1, dan data dari Trebel_4 id 1 menjadi data Trebel_4 id 1, dan data dari Trebel_5 id 1 menjadi data Trebel_5 id 1,


1b. Jika level_gn = 1, atau level_gn = 4, atau level_gn = 6, atau level_gn = 11 (sesuai dengan level_gn data Bass), dan user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5:

jika progres 2 dan jika mode Naik:

maka data dari Trebel_1 id 1 menjadi data Trebel_1 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_1 id 2. 

dan data dari Trebel_2 id 1 menjadi data Trebel_2 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_2 id 2. 

dan data dari Trebel_3 id 1 menjadi data Trebel_3 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_3 id 2. 

dan data dari Trebel_4 id 1 menjadi data Trebel_4 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_4 id 2. 

dan data dari Trebel_5 id 1 menjadi data Trebel_5 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_5 id 2.


jika progres 2 dan jika mode Turun:

maka data dari Trebel_1 id 1 menjadi data Trebel_1 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_1 id 3. 

dan data dari Trebel_2 id 1 menjadi data Trebel_2 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_2 id 3. 

dan data dari Trebel_3 id 1 menjadi data Trebel_3 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_3 id 3. 

dan data dari Trebel_4 id 1 menjadi data Trebel_4 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_4 id 3. 

dan data dari Trebel_5 id 1 menjadi data Trebel_5 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_5 id 3.


1c. Jika level_gn = 1, atau level_gn = 4, atau level_gn = 6, atau level_gn = 11 (sesuai dengan level_gn data Bass), dan user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5:


jika progres 3 dan jika mode Naik:

maka data dari Trebel_1 id 1 menjadi data Trebel_1 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_1 id 3. 

dan data dari Trebel_2 id 1 menjadi data Trebel_2 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_2 id 3. 

dan data dari Trebel_3 id 1 menjadi data Trebel_3 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_3 id 3. 

dan data dari Trebel_4 id 1 menjadi data Trebel_4 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_4 id 3. 

dan data dari Trebel_5 id 1 menjadi data Trebel_5 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_5 id 3.


jika progres 3 dan jika mode Turun:

maka data dari Trebel_1 id 1 menjadi data Trebel_1 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_1 id 2. 

dan data dari Trebel_2 id 1 menjadi data Trebel_2 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_2 id 2. 

dan data dari Trebel_3 id 1 menjadi data Trebel_3 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_3 id 2. 

dan data dari Trebel_4 id 1 menjadi data Trebel_4 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_4 id 2. 

dan data dari Trebel_5 id 1 menjadi data Trebel_5 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_5 id 2.


2a. Jika level_gn = 2, atau level_gn = 7, atau level_gn = 9, level_gn = 12 (sesuai dengan level_gn data Bass), dan user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5: 

dan jika progres 1 dan jika mode Naik atau Turun:

maka data dari Trebel_1 id 2 menjadi data Trebel_1 id 2, dan data dari Trebel_2 id 2 menjadi data Trebel_2 id 2, dan data dari Trebel_3 id 2 menjadi data Trebel_3 id 2, dan data dari Trebel_4 id 2 menjadi data Trebel_4 id 2, dan data dari Trebel_5 id 2 menjadi data Trebel_5 id 2.


2b. Jika level_gn = 2, atau level_gn = 7, atau level_gn = 9, level_gn = 12 (sesuai dengan level_gn data Bass), dan user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5: 

jika progres 2 dan jika mode Naik:

maka data dari Trebel_1 id 2 menjadi data Trebel_1 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_1 id 3. 

dan data dari Trebel_2 id 2 menjadi data Trebel_2 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_2 id 3. 

dan data dari Trebel_3 id 2 menjadi data Trebel_3 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_3 id 3. 

dan data dari Trebel_4 id 2 menjadi data Trebel_4 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_4 id 3. 

dan data dari Trebel_5 id 2 menjadi data Trebel_5 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_5 id 3.


jika progres 2 dan jika mode Turun:

maka data dari Trebel_1 id 2 menjadi data Trebel_1 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_1 id 1. 

dan data dari Trebel_2 id 2 menjadi data Trebel_2 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_2 id 1. 

dan data dari Trebel_3 id 2 menjadi data Trebel_3 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_3 id 1. 

dan data dari Trebel_4 id 2 menjadi data Trebel_4 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_4 id 1. 

dan data dari Trebel_5 id 2 menjadi data Trebel_5 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_5 id 1.


2c. Jika level_gn = 2, atau level_gn = 7, atau level_gn = 9, level_gn = 12 (sesuai dengan level_gn data Bass), dan user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5: 

jika progres 3 dan jika mode Naik:

maka data dari Trebel_1 id 2 menjadi data Trebel_1 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_1 id 1. 

dan data dari Trebel_2 id 2 menjadi data Trebel_2 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_2 id 1. 

dan data dari Trebel_3 id 2 menjadi data Trebel_3 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_3 id 1. 

dan data dari Trebel_4 id 2 menjadi data Trebel_4 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_4 id 1. 

dan data dari Trebel_5 id 2 menjadi data Trebel_5 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_5 id 1.


jika progres 3 dan jika mode Turun:

maka data dari Trebel_1 id 2 menjadi data Trebel_1 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_1 id 3. 

dan data dari Trebel_2 id 2 menjadi data Trebel_2 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_2 id 3. 

dan data dari Trebel_3 id 2 menjadi data Trebel_3 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_3 id 3. 

dan data dari Trebel_4 id 2 menjadi data Trebel_4 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_4 id 3. 

dan data dari Trebel_5 id 2 menjadi data Trebel_5 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_5 id 3.


3a. Jika level_gn = 3, atau level_gn = 5, atau level_gn = 8, level_gn = 10 (sesuai dengan level_gn data Bass), dan user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5: 


dan jika progres 1 dan jika mode Naik atau Turun: 

maka data dari Trebel_1 id 3 menjadi data Trebel_1 id 3, dan data dari Trebel_2 id 3 menjadi data Trebel_2 id 3, dan data dari Trebel_3 id 3 menjadi data Trebel_3 id 3, dan data dari Trebel_4 id 3 menjadi data Trebel_4 id 3, dan data dari Trebel_5 id 3 menjadi data Trebel_5 id 3,


3b. Jika level_gn = 3, atau level_gn = 5, atau level_gn = 8, level_gn = 10 (sesuai dengan level_gn data Bass), dan user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5: 

jika progres 2 dan jika mode Naik:

maka data dari Trebel_1 id 3 menjadi data Trebel_1 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_1 id 1. 

dan data dari Trebel_2 id 3 menjadi data Trebel_2 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_2 id 1. 

dan data dari Trebel_3 id 3 menjadi data Trebel_3 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_3 id 1. 

dan data dari Trebel_4 id 3 menjadi data Trebel_4 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_4 id 1. 

dan data dari Trebel_5 id 3 menjadi data Trebel_5 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_5 id 1.


jika progres 2 dan jika mode Turun:

maka data dari Trebel_1 id 3 menjadi data Trebel_1 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_1 id 2. 

dan data dari Trebel_2 id 3 menjadi data Trebel_2 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_2 id 2. 

dan data dari Trebel_3 id 3 menjadi data Trebel_3 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_3 id 2. 

dan data dari Trebel_4 id 3 menjadi data Trebel_4 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_4 id 2. 

dan data dari Trebel_5 id 3 menjadi data Trebel_5 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_5 id 2.

3c. Jika level_gn = 3, atau level_gn = 5, atau level_gn = 8, level_gn = 10 (sesuai dengan level_gn data Bass), dan user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5: 


jika progres 3 dan jika mode Naik:

maka data dari Trebel_1 id 3 menjadi data Trebel_1 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_1 id 2. 

dan data dari Trebel_2 id 3 menjadi data Trebel_2 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_2 id 2. 

dan data dari Trebel_3 id 3 menjadi data Trebel_3 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_3 id 2.. 

dan data dari Trebel_4 id 3 menjadi data Trebel_4 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_4 id 2. 

dan data dari Trebel_5 id 3 menjadi data Trebel_5 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_5 id 2.


jika progres 3 dan jika mode Turun:

maka data dari Trebel_1 id 3 menjadi data Trebel_1 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_1 id 1. 

dan data dari Trebel_2 id 3 menjadi data Trebel_2 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_2 id 1. 

dan data dari Trebel_3 id 3 menjadi data Trebel_3 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_3 id 1. 

dan data dari Trebel_4 id 3 menjadi data Trebel_4 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_4 id 1. 

dan data dari Trebel_5 id 3 menjadi data Trebel_5 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_5 id 1.


Berikut Contoh data kongruen: 

Bila data di kolom Trebel_1 id 1 adalah 4567, data di kolom Trebel_1 id 2 adalah 13243, dan data di kolom Trebel_1 id 3 adalah 1132, maka bila data kolom Trebel_1 id 1 yang mengalami Progres 1 mode Naik atau Turun, maka data Trebel_1 id 1 akan tetap menjadi data: 4567. iBla data kolom Trebel_1 id 1 yang mengalami Progres 2 mode Naik akan menjadi data berikut: 35465 (data kongruen dengan data kolom Trebel_1 id 2). Bila data kolom Trebel_1 id 1 yang mengalami Progres 2 mode Turun akan menjadi data berikut: 3354 (data kongruen dengan data kolom Trebel_1 id 3). Bila data kolom Trebel_1 id 1 yang mengalami Progres 3 mode Naik akan menjadi berikut: 2231 (data kongruen dengan data kolom Trebel_1 id 3). Bila data kolom Trebel_1 id 1 yang mengalami Progres 3 mode Turun akan menjadi 24354 (data kongruen dengan data kolom Trebel_1 id 2). 


Logika pada data Trebel di Sub_Gn_Cyan_Atas:

II. Jika data gugus nada yang terpilih dari kolom Trebel pada Sub_Gn_Cyan_Atas:

1a. Jika level_gn = 1, atau level_gn = 2, atau level_gn = 3, atau level_gn = 4, atau level_gn = 5, atau level_gn = 6, atau level_gn = 7, atau level_gn = 8, atau level_gn = 9, atau level_gn = 10, atau level_gn = 11, atau level_gn = 12 (sesuai dengan level_gn data Sub_Bass), dan di entry pilih_trebel user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5:


jika progres 1, dan jika mode Naik atau Turun: 

maka data dari Trebel_1 sub_id 1 menjadi data Trebel_1 sub_id 1, dan data dari Trebel_2 sub_id 1 menjadi data Trebel_2 sub_id 1, dan data dari Trebel_3 sub_id 1 menjadi data Trebel_3 sub_id 1, dan data dari Trebel_4 sub_id 1 menjadi data Trebel_4 sub_id 1, dan data dari Trebel_5 sub_id 1 menjadi data Trebel_5 sub_id 1,


jika progres 2 dan jika mode Naik atau Turun:

maka data dari Trebel_1 sub_id 1 menjadi data Trebel_1 sub_id 1 yang digit angka datanya dikurang 1

dan data dari sub_id 1 menjadi data Trebel_2 sub_id 1 yang digit angka datanya dikurang 1.

dan data dari Trebel_3 sub_id 1 menjadi data Trebel_3 sub_id 1 yang digit angka datanya dikurang 1.

dan data dari Trebel_4 sub_id 1 menjadi data Trebel_4 sub_id 1 yang digit angka datanya dikurang 1.

dan data dari Trebel_5 sub_id 1 menjadi data Trebel_5 sub_id 1 yang digit angka datanya dikurang 1.


jika progres 3 dan jika mode Naik atau Turun:

maka data dari Trebel_1 sub_id 1 menjadi data Trebel_1 sub_id 1 yang digit angka datanya dikurang 2.

dan data dari Trebel_2 sub_id 1 menjadi data Trebel_2 sub_id 1 yang digit angka datanya dikurang 2.

dan data dari Trebel_3 sub_id 1 menjadi data Trebel_3 sub_id 1 yang digit angka datanya dikurang 2.

dan data dari Trebel_4 sub_id 1 menjadi data Trebel_4 sub_id 1 yang digit angka datanya dikurang 2.

dan data dari Trebel_5 sub_id 1 menjadi data Trebel_5 sub_id 1 yang digit angka datanya dikurang 2.


Untuk menerapkan logika yang telah dijelaskan pada fungsi `proses_trebel`, kita perlu memeriksa beberapa kondisi berdasarkan level_gn, progres, mode, dan Trebel yang dipilih oleh pengguna. Berikut adalah modifikasi fungsi `proses_trebel` yang sesuai dengan logika tersebut:


```python

def proses_trebel(level_gn, progres, mode, trebel_data, trebel_pilihan):

    # Memetakan data Trebel berdasarkan level_gn

    if level_gn in [1, 4, 6, 11]:

        if progres == 1:

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

                # Mode 1, Progres 1

                return trebel_data[trebel_pilihan][1]


        elif progres == 2:

            if mode == "Naik":

                # Mode 2, Progres 2 Naik

                return [str(int(trebel_data[trebel_pilihan][1][i]) - 1) for i in range(len(trebel_data[trebel_pilihan][1])) if trebel_data[trebel_pilihan][2][i]]


            elif mode == "Turun":

                # Mode 2, Progres 2 Turun

                return [str(int(trebel_data[trebel_pilihan][1][i]) - 1) for i in range(len(trebel_data[trebel_pilihan][1])) if trebel_data[trebel_pilihan][3][i]]


        elif progres == 3:

            if mode == "Naik":

                # Mode 3, Progres 3 Naik

                return [str(int(trebel_data[trebel_pilihan][1][i]) - 2) for i in range(len(trebel_data[trebel_pilihan][1])) if trebel_data[trebel_pilihan][3][i]]


            elif mode == "Turun":

                # Mode 3, Progres 3 Turun

                return [str(int(trebel_data[trebel_pilihan][1][i]) - 2) for i in range(len(trebel_data[trebel_pilihan][1])) if trebel_data[trebel_pilihan][2][i]]


    elif level_gn in [2, 7, 9, 12]:

        if progres == 1:

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

                # Mode 1, Progres 1

                return trebel_data[trebel_pilihan][2]


        elif progres == 2:

            if mode == "Naik":

                # Mode 2, Progres 2 Naik

                return [str(int(trebel_data[trebel_pilihan][2][i]) - 1) for i in range(len(trebel_data[trebel_pilihan][2])) if trebel_data[trebel_pilihan][3][i]]


            elif mode == "Turun":

                # Mode 2, Progres 2 Turun

                return [str(int(trebel_data[trebel_pilihan][2][i]) - 1) for i in range(len(trebel_data[trebel_pilihan][2])) if trebel_data[trebel_pilihan][1][i]]


        elif progres == 3:

            if mode == "Naik":

                # Mode 3, Progres 3 Naik

                return [str(int(trebel_data[trebel_pilihan][2][i]) - 2) for i in range(len(trebel_data[trebel_pilihan][2])) if trebel_data[trebel_pilihan][1][i]]


            elif mode == "Turun":

                # Mode 3, Progres 3 Turun

                return [str(int(trebel_data[trebel_pilihan][2][i]) - 2) for i in range(len(trebel_data[trebel_pilihan][2])) if trebel_data[trebel_pilihan][3][i]]


    return None

```


### Penjelasan:


1. **Level 1, 4, 6, 11**:

    - Untuk `progres 1` di `mode Naik/Turun`, data diambil langsung dari `trebel_data[trebel_pilihan][1]`.

    - Untuk `progres 2`, jika `mode Naik`, data yang dikurangi 1 diambil dari `trebel_data[trebel_pilihan][2]`, sedangkan untuk `mode Turun`, data yang dikurangi 1 diambil dari `trebel_data[trebel_pilihan][3]`.

    - Untuk `progres 3`, jika `mode Naik`, data yang dikurangi 2 diambil dari `trebel_data[trebel_pilihan][3]`, sedangkan untuk `mode Turun`, data yang dikurangi 2 diambil dari `trebel_data[trebel_pilihan][2]`.


2. **Level 2, 7, 9, 12**:

    - Untuk `progres 1` di `mode Naik/Turun`, data diambil langsung dari `trebel_data[trebel_pilihan][2]`.

    - Untuk `progres 2`, jika `mode Naik`, data yang dikurangi 1 diambil dari `trebel_data[trebel_pilihan][3]`, sedangkan untuk `mode Turun`, data yang dikurangi 1 diambil dari `trebel_data[trebel_pilihan][1]`.

    - Untuk `progres 3`, jika `mode Naik`, data yang dikurangi 2 diambil dari `trebel_data[trebel_pilihan][1]`, sedangkan untuk `mode Turun`, data yang dikurangi 2 diambil dari `trebel_data[trebel_pilihan][3]`.


Jika Anda membutuhkan penyesuaian lebih lanjut, silakan berikan detailnya.




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...