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
Posting Komentar
This Message