Langsung ke konten utama

FUNGSI ADJUSTMENT

FUNGSI ADJUSTMENT 


Tolong perbaiki kode berikut:

# Fungsi untuk menyesuaikan nilai sub trebel berdasarkan progres

def adjust_sub_trebel(sub_trebel_value, adjustment):

    adjusted_sub_trebel = ''.join(str(max(0, int(char) - adjustment)) if char.isdigit() else char for char in sub_trebel_value)

    return adjusted_sub_trebel def adjust_sub_trebel(sub_trebel_value, adjustment):

    adjusted_sub_trebel = ''.join(str(max(0, int(char) - adjustment)) if char.isdigit() else char for char in sub_trebel_value)

    return adjusted_sub_trebel    


def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_sub_gn_cyan_atas, index_trebel):

    if progres_selected == 1:

        if mode_selected in ["naik", "turun"]:

            return data_sub_gn_cyan_atas[index_trebel]

            

    elif progres_selected == 2:           

         if mode_selected in ["naik", "turun"]:

            entry_sub_trebel.delete(0, tk.END)   

            entry_sub_trebel.insert(0, adjust_sub_trebel_value(data_sub_gn_cyan_atas[progres_selected - 1], 1))

    

    elif progres_selected == 3:

         if mode_selected in ["naik", "turun"]:

            entry_sub_trebel.delete(0, tk.END)   

            entry_sub_trebel.insert(0, adjust_sub_trebel_value(data_sub_gn_cyan_atas[progres_selected - 2], 2))

    

    return None     

      

Untuk progres_selected 2, dan 3 dengan menggunakan fungsi adjust_sub_trebel.


Berikut adalah versi perbaikan dari kode yang Anda berikan:


```python

# Fungsi untuk menyesuaikan nilai sub trebel berdasarkan progres

def adjust_sub_trebel(sub_trebel_value, adjustment):

    adjusted_sub_trebel = ''.join(

        str(max(0, int(char) - adjustment)) if char.isdigit() else char 

        for char in sub_trebel_value

    )

    return adjusted_sub_trebel


# Fungsi untuk memproses data trebel berdasarkan level, progres, dan mode

def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_sub_gn_cyan_atas, index_trebel):

    if progres_selected == 1:

        if mode_selected in ["naik", "turun"]:

            return data_sub_gn_cyan_atas[index_trebel]

            

    elif progres_selected == 2:

        if mode_selected in ["naik", "turun"]:

            return adjust_sub_trebel(data_sub_gn_cyan_atas[index_trebel], 1)

    

    elif progres_selected == 3:

        if mode_selected in ["naik", "turun"]:

            return adjust_sub_trebel(data_sub_gn_cyan_atas[index_trebel], 2)

    

    return None

```


### Penjelasan Perbaikan:

1. **`adjust_sub_trebel`:**

   - Fungsi ini tidak diubah karena sudah sesuai. Ia akan mengurangi setiap digit numerik dalam string sesuai dengan nilai `adjustment`, dan memastikan tidak ada digit yang kurang dari 0.


2. **`proses_trebel`:**

   - Pada progres 1, data dari `data_sub_gn_cyan_atas` akan langsung dikembalikan tanpa modifikasi, sesuai logika yang Anda inginkan.

   - Pada progres 2 dan 3, fungsi `adjust_sub_trebel` dipanggil dengan nilai `adjustment` yang sesuai (1 untuk progres 2, dan 2 untuk progres 3).

   - Pada kedua progres tersebut, data dari `data_sub_gn_cyan_atas[index_trebel]` diproses dengan `adjust_sub_trebel` sebelum dikembalikan.


3. **Penghapusan Redundansi:**

   - Redundansi pada blok `if` dan `elif` untuk progres 2 dan 3 telah dihilangkan dengan langsung mengembalikan hasil dari `adjust_sub_trebel`.


Dengan kode ini, nilai Trebel akan disesuaikan dengan pengurangan yang tepat berdasarkan progres dan mode yang dipilih.


Pada kode tersebut, apakah fungsi adjust_sub_trebel berfungsi untuk mengurangi setiap digit angka sebesar nilai adjustment yang diberikan. Tolong pastikan hasil digit bisa kurang dari 0


Pada kode yang sebelumnya saya berikan, fungsi `adjust_sub_trebel` sudah melakukan pengurangan setiap digit angka sebesar nilai `adjustment` yang diberikan, namun digit tersebut tidak akan kurang dari 0 karena digunakan fungsi `max(0, int(char) - adjustment)` untuk mencegah nilai negatif. Jika Anda menginginkan digit angka dapat menjadi negatif setelah pengurangan, kita bisa menghapus batasan tersebut. Berikut adalah modifikasi kodenya:


```python

# Fungsi untuk menyesuaikan nilai sub trebel berdasarkan progres, memungkinkan hasil digit kurang dari 0

def adjust_sub_trebel(sub_trebel_value, adjustment):

    adjusted_sub_trebel = ''.join(

        str(int(char) - adjustment) if char.isdigit() else char 

        for char in sub_trebel_value

    )

    return adjusted_sub_trebel

```


### Penjelasan Perubahan:

- Pada fungsi `adjust_sub_trebel`, saya menghapus fungsi `max(0, ...)`, sehingga sekarang nilai digit dapat kurang dari 0 jika hasil pengurangannya negatif.


Dengan perubahan ini, setiap digit dalam `sub_trebel_value` akan dikurangi oleh `adjustment`, dan hasilnya bisa menjadi angka negatif jika digit tersebut lebih kecil dari nilai `adjustment`.


# Fungsi untuk menyesuaikan nilai trebel berdasarkan progres

def adjust_trebel(trebel_value, adjustment):

    adjusted_trebel = ''.join(

        str(max(0, int(char) - adjustment)) if char.isdigit() else char 

        for char in trebel_value

    )

    return adjusted_trebel


# Fungsi untuk memproses data trebel berdasarkan level, progres, dan mode

def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel):

    if progres_selected == 1:

        if mode_selected in ["naik", "turun"]:

            return data_gn_cyan_atas[index_trebel]

            

    elif progres_selected == 2:

        if mode_selected in ["naik"]:

            return adjust_trebel(data_gn_cyan_atas[index_trebel], 1)


        if mode_selected in ["turun"]:

            return adjust_trebel(data_gn_cyan_atas[index_trebel], 1)

    

    elif progres_selected == 3:

        if mode_selected in ["naik"]:

            return adjust_trebel(data_gn_cyan_atas[index_trebel], 2)


        if mode_selected in ["turun"]:

            return adjust_trebel(data_gn_cyan_atas[index_trebel], 2)

    

    return None


Tolong modifikasi kode tersebut untuk pengambilan data Trebel dari kolom Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 dari tabel Gn_Cyan_Atas, dan menampilkannya pada entry_trebel.

Contoh : Bila data kolom Trebel_1 di Trebel_1 id 1 di progres 2 mode Naik, maka data yang ditampilkan adalah data Trebel_1 id 2 yang setiap digit angkanya dikurang 2. 

Bila data Trebel_1 id 1 di progres 2 mode Turun, maka data yang ditampilkan adalah data Trebel_1 id 3 yang setiap digit angkanya dikurang 3. 

Bila data Trebel_1 id 1 di progres 3 mode Naik, maka data yang ditampilkan adalah data Trebel_1 id 3 yang setiap digit angkanya dikurang 4. 

Bila data Trebel_1 id 1 di progres 3 mode Turun, maka data yang ditampilkan adalah data Trebel_1 id 2 yang setiap digit angkanya dikurang 3. 

Hal yang di atas berlaku untuk perlakuan yang sama pada data di kolom Trebel_2, Trebel_3, Trebel_4, dan Trebel_5.

Kalau memungkinkan pada kode bisa ditambahkan fungsi adjust_trebel_value, seperti kode berikut:

# Fungsi untuk menyesuaikan nilai sub trebel 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


Untuk memodifikasi kode agar sesuai dengan skenario yang Anda sebutkan, berikut adalah perubahan yang perlu dilakukan. Kode ini akan mengambil data Trebel dari kolom `Trebel_1`, `Trebel_2`, `Trebel_3`, `Trebel_4`, dan `Trebel_5` dari tabel `Gn_Cyan_Atas`, lalu menampilkannya pada `entry_trebel` sesuai dengan progres dan mode yang dipilih, sambil melakukan penyesuaian nilai sesuai dengan progres yang telah ditentukan.


### Modifikasi Kode


```python

# Fungsi untuk menyesuaikan nilai trebel berdasarkan progres, mengurangi nilai setiap digit

def adjust_trebel_value(trebel_value, adjustment):

    if trebel_value.isdigit():

        adjusted_value = ''.join(str(int(char) - adjustment) for char in trebel_value)

    else:

        adjusted_value = trebel_value

    return adjusted_value


# Fungsi untuk memproses data trebel berdasarkan level, progres, dan mode

def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel):

    adjustment = 0

    target_index = index_trebel

    

    if progres_selected == 2:

        if mode_selected == "naik":

            adjustment = 2

            target_index = 1 # Pindah ke ID 2

            

        elif mode_selected == "turun":

            adjustment = 3

            target_index = 2 # Pindah ke ID 3

    

    elif progres_selected == 3:

        if mode_selected == "naik":

            adjustment = 4

            target_index = 2 # Pindah ke ID 3

            

        elif mode_selected == "turun":

            adjustment = 3

            target_index = 1 # Pindah ke ID 2


    # Mengambil nilai trebel dari kolom sesuai dengan target index

    trebel_value = data_gn_cyan_atas[target_index][index_trebel]

    

    # Menyesuaikan nilai trebel berdasarkan adjustment

    adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

    

    return adjusted_trebel

```


### Penjelasan Perubahan:


1. **Fungsi `adjust_trebel_value`**:

   - Fungsi ini mengurangi setiap digit dalam nilai trebel dengan `adjustment` yang ditentukan oleh progres yang dipilih.


2. **Fungsi `proses_trebel`**:

   - Berdasarkan `progres_selected` dan `mode_selected`, kode akan menetapkan nilai `adjustment` dan `target_index`.

   - `target_index` digunakan untuk mengambil data trebel yang sesuai dari data `Gn_Cyan_Atas` (misalnya, pindah ke ID 2 atau 3).

   - Nilai `adjustment` akan menentukan seberapa besar pengurangan pada digit nilai trebel.

   - Hasil penyesuaian nilai trebel kemudian dikembalikan.


### Penggunaan Pada Entry Field


Misalkan Anda ingin menampilkan nilai yang telah diproses pada `entry_trebel`, Anda dapat menggunakan fungsi `proses_trebel` sebagai berikut:


```python

entry_trebel.delete(0, tk.END)

entry_trebel.insert(0, proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel))

```


### Catatan Tambahan:

- Kode di atas mengasumsikan bahwa `data_gn_cyan_atas` adalah struktur data (misalnya, daftar dua dimensi atau DataFrame) yang menyimpan nilai-nilai dari kolom `Trebel_1`, `Trebel_2`, dll., di mana `index_trebel` mengacu pada kolom yang relevan.

- Pengambilan data dilakukan berdasarkan `target_index`, yang dipilih berdasarkan logika yang Anda jelaskan untuk setiap kombinasi progres dan mode.


Silakan sesuaikan lebih lanjut jika ada detail spesifik dari struktur data atau logika tambahan yang perlu diterapkan.


Tolong modifikasi kode berikut:

# Fungsi untuk menyesuaikan nilai trebel berdasarkan progres, mengurangi nilai setiap digit    

def adjust_trebel(trebel_value, adjustment):

    if trebel_value.isdigit():

        adjusted_value = ''.join(str(int(char) - adjustment) for char in trebel_value)

    else:

        adjusted_value = trebel_value

    return adjusted_value    


# Fungsi untuk memproses Trebel berdasarkan level_gn, progres, mode, dan data

def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel):

    adjustment = 0

    target_id = index_trebel

    

        # Menentukan index_id berdasarkan level_gn_selected

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

        index_id = 0

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

        index_id = 1

    elif level_gn_selected in [3, 5, 8, 10]:

        index_id = 2     

    else:

        messagebox.showerror("Error", "Level Gn tidak valid.")

        return    


    if progres_selected == 1:

        if mode_selected in ["naik", "turun"]:

            return data_gn_cyan_atas[index_trebel]

                    

    if progres_selected == 2:

        if mode_selected == "naik":

            adjustment = 2

            target_id = 1 # Pindah ke ID 2

            entry_trebel.delete(0, tk.END)

            trebel_value = data_gn_cyan_atas[target_id][index_trebel]

            adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

            

        elif mode_selected == "turun":

            adjustment = 3

            target_id = 2 # Pindah ke ID 3

            entry_trebel.delete(0, tk.END)

            entry_trebel.insert(0, proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel))

    

    elif progres_selected == 3:

        if mode_selected == "naik":

            adjustment = 4

            target_id = 2 # Pindah ke ID 3

            entry_trebel.delete(0, tk.END)           

            

        elif mode_selected == "turun":

            adjustment = 3

            target_id = 1 # Pindah ke ID 2

            entry_trebel.delete(0, tk.END)   

    

    # Mengambil nilai trebel dari kolom sesuai dengan target index

    trebel_value = data_gn_cyan_atas[target_id][index_trebel]

    

    # Menyesuaikan nilai trebel berdasarkan adjustment

    adjusted_trebel = adjust_trebel(trebel_value, adjustment)

    

    return adjusted_trebel    


Modifikasi kode tersebut untuk pengambilan setiap data Trebel dari sebuah sel dari kolom Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 dari tabel Gn_Cyan_Atas, dan menampilkannya pada entry_trebel. Contoh : Bila data kolom Trebel_1 di Trebel_1 id 1 di progres 2 mode Naik, maka data yang ditampilkan adalah data Trebel_1 id 2 yang setiap digit angkanya dikurang 2. Bila data Trebel_1 id 1 di progres 2 mode Turun, maka data yang ditampilkan adalah data Trebel_1 id 3 yang setiap digit angkanya dikurang 3. Bila data Trebel_1 id 1 di progres 3 mode Naik, maka data yang ditampilkan adalah data Trebel_1 id 3 yang setiap digit angkanya dikurang 4. Bila data Trebel_1 id 1 di progres 3 mode Turun, maka data yang ditampilkan adalah data Trebel_1 id 2 yang setiap digit angkanya dikurang 3. Hal yang di atas berlaku untuk perlakuan yang sama pada data di kolom Trebel_2, Trebel_3, Trebel_4, dan Trebel_5. Kalau memungkinkan pada kode bisa menggunakan index_id.


Berikut adalah kode yang telah dimodifikasi untuk pengambilan data dari kolom `Trebel_1`, `Trebel_2`, `Trebel_3`, `Trebel_4`, dan `Trebel_5` dari tabel `Gn_Cyan_Atas`, dengan memperhitungkan `progres_selected`, `mode_selected`, dan `level_gn_selected`. Kode ini juga menggunakan `index_id` untuk memilih ID yang tepat berdasarkan `level_gn_selected`.


```python

import tkinter as tk

from tkinter import messagebox


# Fungsi untuk menyesuaikan nilai trebel berdasarkan progres, mengurangi nilai setiap digit    

def adjust_trebel(trebel_value, adjustment):

    adjusted_value = ''.join(

        str(max(0, int(char) - adjustment)) if char.isdigit() else char

        for char in trebel_value

    )

    return adjusted_value    


# Fungsi untuk memproses Trebel berdasarkan level_gn, progres, mode, dan data

def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel):

    adjustment = 0

    target_id = index_trebel


    # Menentukan index_id berdasarkan level_gn_selected

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

        index_id = 0

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

        index_id = 1

    elif level_gn_selected in [3, 5, 8, 10]:

        index_id = 2     

    else:

        messagebox.showerror("Error", "Level Gn tidak valid.")

        return


    if progres_selected == 1:

        if mode_selected in ["naik", "turun"]:

            return data_gn_cyan_atas[index_id][index_trebel]

                    

    elif progres_selected == 2:

        if mode_selected == "naik":

            adjustment = 2

            target_id = 1 # Pindah ke ID 2

            

        elif mode_selected == "turun":

            adjustment = 3

            target_id = 2 # Pindah ke ID 3

    

    elif progres_selected == 3:

        if mode_selected == "naik":

            adjustment = 4

            target_id = 2 # Pindah ke ID 3

            

        elif mode_selected == "turun":

            adjustment = 3

            target_id = 1 # Pindah ke ID 2

    

    # Mengambil nilai trebel dari kolom sesuai dengan target ID

    trebel_value = data_gn_cyan_atas[target_id][index_trebel]

    

    # Menyesuaikan nilai trebel berdasarkan adjustment

    adjusted_trebel = adjust_trebel(trebel_value, adjustment)

    

    return adjusted_trebel


# Penggunaan Pada Entry Field (Misal entry_trebel adalah Entry Widget)

def update_entry_trebel(entry_trebel, level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel):

    entry_trebel.delete(0, tk.END)

    adjusted_trebel = proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel)

    entry_trebel.insert(0, adjusted_trebel)


# Contoh data (Misalnya ini adalah tabel Gn_Cyan_Atas)

data_gn_cyan_atas = [

    # Kolom Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5

    ['123', '234', '345', '456', '567'], # ID 1

    ['234', '345', '456', '567', '678'], # ID 2

    ['345', '456', '567', '678', '789'] # ID 3

]


# Contoh penggunaan

root = tk.Tk()

entry_trebel = tk.Entry(root)

entry_trebel.pack()


level_gn_selected = 2

progres_selected = 2

mode_selected = "naik"

index_trebel = 0 # Misalnya Trebel_1


update_entry_trebel(entry_trebel, level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel)


root.mainloop()

```


### Penjelasan:

1. **Index ID**: `index_id` digunakan untuk menentukan ID data yang diambil berdasarkan `level_gn_selected`.

2. **Penyesuaian Nilai**: Fungsi `adjust_trebel` digunakan untuk mengurangi setiap digit dari nilai trebel dengan `adjustment` yang dihitung berdasarkan `progres_selected` dan `mode_selected`.

3. **Proses Data**: Fungsi `proses_trebel` memproses data sesuai dengan aturan yang ditetapkan dan mengembalikan nilai trebel yang telah disesuaikan.

4. **Update Entry Field**: Fungsi `update_entry_trebel` memperbarui `entry_trebel` dengan nilai trebel yang telah diproses.


Jika ada yang perlu disesuaikan atau diperbaiki lagi, silakan beri tahu saya!


 Tolong perbaiki kode berikut:

# Fungsi untuk menyesuaikan nilai trebel berdasarkan progres, mengurangi nilai setiap digit    

def adjust_trebel(trebel_value, adjustment):

    if trebel_value.isdigit():

        adjusted_value = ''.join(str(int(char) - adjustment) for char in trebel_value)

    else:

        adjusted_value = trebel_value

    return adjusted_value    


# Fungsi untuk memproses Trebel berdasarkan level_gn, progres, mode, dan data

def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel):

    adjustment = 0

    target_id = 0

    

    # Menentukan index_id berdasarkan level_gn_selected

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

        index_id = 0

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

        index_id = 1

    elif level_gn_selected in [3, 5, 8, 10]:

        index_id = 2       

    else:

        messagebox.showerror("Error", "Level Gn tidak valid.")

        return


    # Menentukan target_id berdasarkan index_id                

    if mode_selected == "naik":

        if progres_selected == "2":

            target_id = index_id + 1

            if target_id == "3":

             index_id = 0                     

        if progres_selected == "3":

            target_id = index_id + 2

            if target_id == "3":

             index_id = 0          

            if target_id == "4":

             index_id = 1                              

    elif mode_selected == "turun":

        if progres_selected == "2":        

            target_id = index_id - 1

            if target_id == "-1":

             index_id = 2       

        if progres_selected == "3":

            target_id = index_id - 2

            if target_id == "-2":

             index_id = 1       

            if target_id == "-1":

             index_id = 2                      

    else:

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

    return  


    if progres_selected == 1:          

        if mode_selected in ["naik", "turun"]:

            return data_gn_cyan_atas[index_trebel]

            

    if level_gn_selected == [1, 4, 6, 11]:        

        index_id = 0            

        if progres_selected == 2:

            if mode_selected == "naik":

                adjustment = 2

                target_id = 1 # Pindah ke ID 2

                entry_trebel.delete(0, tk.END)

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

            

            elif mode_selected == "turun":

                adjustment = 3

                target_id = 2 # Pindah ke ID 3

                entry_trebel.delete(0, tk.END)

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

    

        elif progres_selected == 3:

            if mode_selected == "naik":

                adjustment = 4

                target_id = 2 # Pindah ke ID 3

                entry_trebel.delete(0, tk.END)

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

                                       

            elif mode_selected == "turun":

                adjustment = 3

                target_id = 1 # Pindah ke ID 2

                entry_trebel.delete(0, tk.END)   

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

                

    if level_gn_selected == [2, 7, 9, 12]:        

        index_id = 1          

        if progres_selected == 2:

            if mode_selected == "naik":

                adjustment = 2

                target_id = 2 # Pindah ke ID 2

                entry_trebel.delete(0, tk.END)

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

            

            elif mode_selected == "turun":

                adjustment = 0

                target_id = 0 # Pindah ke ID 3

                entry_trebel.delete(0, tk.END)

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

    

        elif progres_selected == 3:

            if mode_selected == "naik":

                adjustment = 1

                target_id = 0 # Pindah ke ID 3

                entry_trebel.delete(0, tk.END)

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

                                       

            elif mode_selected == "turun":

                adjustment = 3

                target_id = 2 # Pindah ke ID 2

                entry_trebel.delete(0, tk.END)   

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

                                

    if level_gn_selected == [3, 5, 8, 10]:  

        index_id = 2         

        if progres_selected == 2:

            if mode_selected == "naik":

                adjustment = -1

                target_id = 0 # Pindah ke ID 2

                entry_trebel.delete(0, tk.END)

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

            

            elif mode_selected == "turun":

                adjustment = 0

                target_id = 1 # Pindah ke ID 3

                entry_trebel.delete(0, tk.END)

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

    

        elif progres_selected == 3:

            if mode_selected == "naik":

                adjustment = 1

                target_id = 1 # Pindah ke ID 3

                entry_trebel.delete(0, tk.END)

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

                                       

            elif mode_selected == "turun":

                adjustment = 0

                target_id = 0 # Pindah ke ID 2

                entry_trebel.delete(0, tk.END)   

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

                

    # Mengambil nilai trebel dari kolom sesuai dengan target index

    trebel_value = data_gn_cyan_atas[target_id][index_trebel]

    

    # Menyesuaikan nilai trebel berdasarkan adjustment

    adjusted_trebel = adjust_trebel(trebel_value, adjustment)

    

    return adjusted_trebel    


Agar supaya data yang diambil dari tabel adalah berdasarkan index_id, kemudian data ditampilkan berdasarkan target_id kemudian disesuaikan dengan nilai adjustment


Saya akan membantu memperbaiki kode Anda agar sesuai dengan logika yang Anda inginkan. Berikut adalah beberapa perbaikan dan penjelasan yang dilakukan:


1. Memastikan variabel `index_id` di-set dengan benar berdasarkan `level_gn_selected`.

2. Memperbaiki logika penentuan `target_id` berdasarkan `index_id`, `progres_selected`, dan `mode_selected`.

3. Memastikan nilai `trebel_value` diambil dari `data_gn_cyan_atas` menggunakan `target_id`.

4. Menyesuaikan nilai `trebel_value` menggunakan fungsi `adjust_trebel`.


Berikut adalah kode yang telah diperbaiki:


```python

# Fungsi untuk menyesuaikan nilai trebel berdasarkan progres, mengurangi nilai setiap digit    

def adjust_trebel(trebel_value, adjustment):

    if trebel_value.isdigit():

        adjusted_value = ''.join(str((int(char) - adjustment) % 10) for char in trebel_value)

    else:

        adjusted_value = trebel_value

    return adjusted_value


# Fungsi untuk memproses Trebel berdasarkan level_gn, progres, mode, dan data

def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel):

    adjustment = 0

    index_id = 0

    

    # Menentukan index_id berdasarkan level_gn_selected

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

        index_id = 0

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

        index_id = 1

    elif level_gn_selected in [3, 5, 8, 10]:

        index_id = 2       

    else:

        messagebox.showerror("Error", "Level Gn tidak valid.")

        return


    # Menentukan target_id berdasarkan index_id, progres_selected, dan mode_selected

    if mode_selected == "naik":

        if progres_selected == "2":

            target_id = (index_id + 1) % 3

        elif progres_selected == "3":

            target_id = (index_id + 2) % 3

    elif mode_selected == "turun":

        if progres_selected == "2":        

            target_id = (index_id - 1) % 3

        elif progres_selected == "3":

            target_id = (index_id - 2) % 3

    else:

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

        return


    # Menentukan nilai adjustment berdasarkan level_gn_selected, progres_selected, dan mode_selected

    if progres_selected == "1":

        adjustment = 0 # Adjustment tidak diperlukan untuk progres 1

    elif progres_selected == "2":

        if mode_selected == "naik":

            adjustment = 2 if level_gn_selected in [1, 4, 6, 11] else 1

        elif mode_selected == "turun":

            adjustment = 3 if level_gn_selected in [1, 4, 6, 11] else 0

    elif progres_selected == "3":

        if mode_selected == "naik":

            adjustment = 4 if level_gn_selected in [1, 4, 6, 11] else 1

        elif mode_selected == "turun":

            adjustment = 3 if level_gn_selected in [1, 4, 6, 11] else 0


    # Mengambil nilai trebel dari data_gn_cyan_atas berdasarkan target_id dan index_trebel

    trebel_value = data_gn_cyan_atas[target_id][index_trebel]


    # Menyesuaikan nilai trebel berdasarkan adjustment

    adjusted_trebel = adjust_trebel(trebel_value, adjustment)

    

    return adjusted_trebel

```


### Penjelasan:

1. **Fungsi `adjust_trebel`:** Kode ini memastikan bahwa setiap digit dalam `trebel_value` dikurangi dengan `adjustment` dan hasilnya tetap berada dalam rentang 0-9.

2. **Logika Penentuan `target_id`:** Saya menggunakan operator modulus (`%`) untuk memastikan bahwa `target_id` tetap dalam rentang yang valid (0, 1, 2).

3. **Pengambilan dan Penyesuaian Nilai `trebel`:** Data `trebel_value` diambil dari `data_gn_cyan_atas` berdasarkan `target_id` dan kemudian disesuaikan dengan `adjustment`.


Silakan uji kode ini untuk memastikan bahwa fungsi `proses_trebel` berjalan sesuai dengan logika yang Anda inginkan. Jika ada yang perlu disesuaikan lebih lanjut, saya siap membantu.


Tolong perbaiki kode ini:

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)


# Fungsi untuk memilih nada berdasarkan parameter yang dipilih oleh pengguna

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()

        nada_selected = nada_var.get().lower()

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


        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_gn_cyan_atas = cursor.fetchone()


        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 or data_sub_gn_cyan_atas:

            if nada_selected == "trebel" and trebel_selected:

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


                # Proses data trebel (definisikan fungsi proses_trebel)

                trebel_value = proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel)

                sub_trebel_value = proses_trebel(level_gn_selected, progres_selected, mode_selected, data_sub_gn_cyan_atas, index_trebel)


                if trebel_value is not None and sub_trebel_value is not None:

                    entry_trebel.delete(0, tk.END)

                    entry_trebel.insert(0, ''.join(trebel_value))

                    entry_sub_trebel.delete(0, tk.END)

                    entry_sub_trebel.insert(0, ''.join(sub_trebel_value))

                    

                    messagebox.showinfo("Info Trebel", f"Trebel Value: {''.join(trebel_value)}\nSub Trebel Value: {''.join(sub_trebel_value)}")

                    

                else:

                 messagebox.showerror("Error", "Nilai Trebel tidak ditemukan atau tidak valid.")

            else:

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

    except ValueError:

            messagebox.showerror("Error", "Pastikan semua input valid dan benar.")


# Fungsi untuk menyesuaikan nilai trebel berdasarkan progres, mengurangi nilai setiap digit    

def adjust_trebel(trebel_value, adjustment):

    if trebel_value.isdigit():

        adjusted_value = ''.join(str(int(char) - adjustment) for char in trebel_value)

    else:

        adjusted_value = trebel_value

    return adjusted_value    


# Fungsi untuk memproses Trebel berdasarkan level_gn, progres, mode, dan data

def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel):

    adjustment = 0

    target_id = 0

    

    # Menentukan index_id berdasarkan level_gn_selected

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

        index_id = 0

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

        index_id = 1

    elif level_gn_selected in [3, 5, 8, 10]:

        index_id = 2       

    else:

        messagebox.showerror("Error", "Level Gn tidak valid.")

        return


    # Menentukan target_id berdasarkan index_id, progres_selected, dan mode_selected

    if mode_selected == "naik":

        if progres_selected == "2":

            target_id = (index_id + 1) % 3

        elif progres_selected == "3":

            target_id = (index_id + 2) % 3

    elif mode_selected == "turun":

        if progres_selected == "2":        

            target_id = (index_id - 1) % 3

        elif progres_selected == "3":

            target_id = (index_id - 2) % 3

    else:

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

        return


    if progres_selected == 1:          

        if mode_selected in ["naik", "turun"]:

            return data_gn_cyan_atas[index_trebel]

            

    if level_gn_selected == [1, 4, 6, 11]:        

        index_id = 0            

        if progres_selected == 2:

            if mode_selected == "naik":

                adjustment = 2

                target_id = 1 # Pindah ke ID 2

                entry_trebel.delete(0, tk.END)

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

            

            elif mode_selected == "turun":

                adjustment = 3

                target_id = 2 # Pindah ke ID 3

                entry_trebel.delete(0, tk.END)

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

    

        elif progres_selected == 3:

            if mode_selected == "naik":

                adjustment = 4

                target_id = 2 # Pindah ke ID 3

                entry_trebel.delete(0, tk.END)

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

                                       

            elif mode_selected == "turun":

                adjustment = 3

                target_id = 1 # Pindah ke ID 2

                entry_trebel.delete(0, tk.END)   

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

                

    if level_gn_selected == [2, 7, 9, 12]:        

        index_id = 1          

        if progres_selected == 2:

            if mode_selected == "naik":

                adjustment = 2

                target_id = 2 # Pindah ke ID 2

                entry_trebel.delete(0, tk.END)

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

            

            elif mode_selected == "turun":

                adjustment = 0

                target_id = 0 # Pindah ke ID 3

                entry_trebel.delete(0, tk.END)

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

    

        elif progres_selected == 3:

            if mode_selected == "naik":

                adjustment = 1

                target_id = 0 # Pindah ke ID 3

                entry_trebel.delete(0, tk.END)

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

                                       

            elif mode_selected == "turun":

                adjustment = 3

                target_id = 2 # Pindah ke ID 2

                entry_trebel.delete(0, tk.END)   

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

                                

    if level_gn_selected == [3, 5, 8, 10]:  

        index_id = 2         

        if progres_selected == 2:

            if mode_selected == "naik":

                adjustment = -1

                target_id = 0 # Pindah ke ID 2

                entry_trebel.delete(0, tk.END)

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

            

            elif mode_selected == "turun":

                adjustment = 0

                target_id = 1 # Pindah ke ID 3

                entry_trebel.delete(0, tk.END)

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

    

        elif progres_selected == 3:

            if mode_selected == "naik":

                adjustment = 1

                target_id = 1 # Pindah ke ID 3

                entry_trebel.delete(0, tk.END)

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

                                       

            elif mode_selected == "turun":

                adjustment = 0

                target_id = 0 # Pindah ke ID 2

                entry_trebel.delete(0, tk.END)   

                trebel_value = data_gn_cyan_atas[target_id][index_trebel]

                adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)

                

    # Mengambil nilai trebel dari kolom sesuai dengan target index

    trebel_value = data_gn_cyan_atas[target_id][index_trebel]

    

    # Menyesuaikan nilai trebel berdasarkan adjustment

    adjusted_trebel = adjust_trebel(trebel_value, adjustment)

    

    return adjusted_trebel    

        

def adjust_sub_trebel(sub_trebel_value, adjustment):

    adjusted_sub_trebel = ''.join(

        str(int(char) - adjustment) if char.isdigit() else char 

        for char in sub_trebel_value

    )

    return adjusted_sub_trebel    


def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_sub_gn_cyan_atas, index_trebel):

    if progres_selected == 1:

        if mode_selected in ["naik", "turun"]:

            return data_sub_gn_cyan_atas[index_trebel]

            

    elif progres_selected == 2:

        if mode_selected in ["naik", "turun"]:

            return adjust_sub_trebel(data_sub_gn_cyan_atas[index_trebel], 1)

    

    elif progres_selected == 3:

        if mode_selected in ["naik", "turun"]:

            return adjust_sub_trebel(data_sub_gn_cyan_atas[index_trebel], 2)

    

    return 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()


Agar supaya data Trebel terpilih diambil berdasarkan index_id yang sesuai, lalu ditampilkan berdasarkan target_id yang sesuai, kemudian disesuaikan dengan nilai adjustment


Berikut adalah kode yang telah diperbaiki dan disesuaikan agar lebih baik dan fungsional:


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


# 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=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)

progres_combobox['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)


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

label_nada.grid(row=5, column=0, padx=5, 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=5, 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"]

        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 1 <= level_gn <= 12:

            id_mapping = {1: 1, 2: 2, 3: 3, 4: 1, 5: 3, 6: 1, 7: 2, 8: 3, 9: 2, 10: 3, 11: 1, 12: 2}

            valid_id = id_mapping.get(level_gn)

            messagebox.showinfo("Info", f"Lanjut dengan memasukkan input ID = {valid_id}")

            set_id_entry(valid_id)

        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=5, pady=7)


# Fungsi untuk memilih nada berdasarkan parameter yang dipilih oleh pengguna

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()

        nada_selected = nada_var.get().lower()

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


        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_gn_cyan_atas = cursor.fetchone()


        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 and data_sub_gn_cyan_atas:

            if nada_selected == "trebel" and trebel_selected:

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


                # Proses data trebel

                trebel_value = adjust_trebel(data_gn_cyan_atas[index_trebel], progres_selected, mode_selected)

                sub_trebel_value = adjust_trebel(data_sub_gn_cyan_atas[index_trebel], progres_selected, mode_selected)


                if trebel_value and sub_trebel_value:

                    entry_trebel.delete(0, tk.END)

                    entry_trebel.insert(0, ''.join(trebel_value))

                    entry_sub_trebel.delete(0, tk.END)

                    entry_sub_trebel.insert(0, ''.join(sub_trebel_value))

                    

                    messagebox.showinfo("Info Trebel", f"Trebel Value: {''.join(trebel_value)}\nSub Trebel Value: {''.join(sub_trebel_value)}")

                else:

                    messagebox.showerror("Error", "Nilai Trebel tidak ditemukan atau tidak valid.")

            else:

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

        else:

            messagebox.showerror("Error", "Pastikan semua input valid dan benar.")

    except ValueError:

        messagebox.showerror("Error", "Pastikan semua input valid dan benar.")


# Fungsi untuk menyesuaikan nilai trebel berdasarkan progres, mengurangi nilai setiap digit    

def adjust_trebel(trebel


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