KESELURUHAN KODE ISI FILE CRUD_Gn_Cyan_Atas_Trebel.py
Jadi keseluruhan kode untuk file: CRUD_Gn_Cyan_Atas_Trebel.py adalah berikut 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)
def pilih_nada():
try:
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()
trebel_selected = combobox_trebel.get().lower()
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 (dalam hal ini 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()
# Pastikan data dari database ada
if not data_gn_cyan_atas:
messagebox.showerror("Error", "Data tidak ditemukan di tabel Gn_Cyan_Atas.")
return
if not data_sub_gn_cyan_atas:
messagebox.showerror("Error", "Data tidak ditemukan di tabel Sub_Gn_Cyan_Atas.")
return
# Inisialisasi index_trebel berdasarkan pilihan Trebel
trebel_index_map = {
"trebel_1": 0,
"trebel_2": 1,
"trebel_3": 2,
"trebel_4": 3,
"trebel_5": 4
}
if trebel_selected not in trebel_index_map:
messagebox.showerror("Error", "Pilihan Trebel tidak valid.")
return
index_trebel = trebel_index_map[trebel_selected]
if data_gn_cyan_atas or data_sub_gn_cyan_atas:
if mode_selected == "naik" or "turun":
if progres_selected == 1 and nada_selected == "trebel":
# Logika untuk Progres 1
entry_trebel.delete(0, tk.END)
entry_trebel.insert(0, data_gn_cyan_atas[index_trebel]) # Ambil data dari Gn_Cyan_Atas berdasarkan index_trebel
entry_sub_trebel.delete(0, tk.END)
entry_sub_trebel.insert(0, data_sub_gn_cyan_atas[index_trebel]) # Ambil data dari Sub_Gn_Cyan_Atas berdasarkan index_trebel
elif progres_selected == 2 and nada_selected == "trebel":
# Logika untuk Progres 2
entry_sub_trebel.delete(0, tk.END)
entry_sub_trebel.insert(0, adjust_trebel_value(data_sub_gn_cyan_atas[index_trebel], 1)) # Ambil data dari Sub_Gn_Cyan_Atas berdasarkan index_trebel
elif progres_selected == 3 and nada_selected == "trebel":
# Logika untuk Progres 3
entry_sub_trebel.delete(0, tk.END)
entry_sub_trebel.insert(0, adjust_trebel_value(data_sub_gn_cyan_atas[index_trebel], 2)) # Ambil data dari Sub_Gn_Cyan_Atas berdasarkan index_trebel
# Inisialisasi index_id berdasarkan pilihan ID
if id_selected == 1:
index_id = 0
elif id_selected == 2:
index_id = 1
elif id_selected == 3:
index_id = 2
else:
messagebox.showerror("Error", "Pilihan ID tidak valid.")
return
if id_selected in [1, 2, 3] and mode_selected == "naik" or "turun":
if index_id + 1 == 1:
id_selected = 1
elif index_id + 1 == 2:
id_selected == 2
elif index_id + 1 >= 3:
id_selected == 3
elif index_id - 1 == 1:
id_selected == 3
elif index_id - 1 == 0:
id_selected == 2
elif index_id - 1 <= -1:
id_selected == 1
else:
messagebox.showerror("Error", "Penyesuaian ID tidak valid.")
return
# Penyesuaian ID berdasarkan level_gn_selected
def adjust_id(level_gn_selected):
if level_gn_selected in [1, 4, 6, 11]:
return 1, 0
elif level_gn_selected in [2, 7, 9, 12]:
return 2, 1
elif level_gn_selected in [3, 5, 8, 10]:
return 3, 2
else:
messagebox.showerror("Error", "Level_Gn tidak valid.")
return None, None
id_selected, index_id = adjust_id(level_gn_selected)
if id_selected is None:
return
if data_gn_cyan_atas:
# Aturan mode naik: id_selected bertambah sesuai dengan progres - 1
new_id = id_selected + (progres_selected - 1)
print(f"new_id: {new_id}") # Debugging: lihat apakah new_id benar
# Pengecualian jika new_id > 3, maka berputar kembali ke id 1 atau id 2
if new_id == 4:
new_id = 1
elif new_id == 5:
new_id = 2
# Aturan mode turun: id_selected berkurang sesuai dengan progres - 1
new_id = id_selected - (progres_selected - 1)
if new_id == 0:
new_id = 3
elif new_id == -1:
new_id = 2
print(f"Adjusted new_id after exception: {new_id}")
# Logika utama untuk mengambil dan menampilkan data Trebel_1 hingga Trebel_5
if 0 <= index_trebel <= 4: # Pastikan index berada dalam rentang 0 hingga 4
trebel_value = data_gn_cyan_atas[index_trebel] # Ambil Trebel berdasarkan index_trebel
print(f"trebel_value (dari index_trebel): {trebel_value}") # Debugging: pastikan trebel_value diambil dengan benar
if progres_selected == 2 and mode_selected == "naik":
if id_selected == 1 and nada_selected == "trebel":
new_id = 2 # Menetapkan new_id untuk logika khusus ini
# Ambil data dari new_id_value untuk digit kedua dan seterusnya
new_id_value = data_gn_cyan_atas[2] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}") # Debugging: pastikan new_id_value diambil dengan benar
entry_trebel.delete(0, tk.END)
# Hitung final_adjustment dengan pengurangan untuk digit pertama dan gabungkan digit kedua
final_adjustment = adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang=1)
print(f"final_adjustment: {final_adjustment}") # Debugging: lihat hasil final_adjustment
# Masukkan hasilnya ke entry_trebel
entry_trebel.insert(0, final_adjustment)
elif id_selected == 2 and nada_selected == "trebel":
new_id = 3
new_id_value = data_gn_cyan_atas[3] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang=1)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
elif id_selected == 3 and nada_selected == "trebel":
new_id = 1
new_id_value = data_gn_cyan_atas[1] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang=1)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
elif progres_selected == 3 and mode_selected == "naik":
if id_selected == 1 and nada_selected == "trebel":
new_id = 3 # Menetapkan new_id untuk logika khusus ini
# Ambil data dari new_id_value untuk digit kedua dan seterusnya
new_id_value = data_gn_cyan_atas[3] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}") # Debugging: pastikan new_id_value diambil dengan benar
entry_trebel.delete(0, tk.END)
# Hitung final_adjustment dengan pengurangan untuk digit pertama dan gabungkan digit kedua
final_adjustment = adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang=2)
print(f"final_adjustment: {final_adjustment}") # Debugging: lihat hasil final_adjustment
# Masukkan hasilnya ke entry_trebel
entry_trebel.insert(0, final_adjustment)
elif id_selected == 2 and nada_selected == "trebel":
new_id = 1
new_id_value = data_gn_cyan_atas[1] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang=2)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
elif id_selected == 3 and nada_selected == "trebel":
new_id = 2
new_id_value = data_gn_cyan_atas[2] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang=2)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
else:
messagebox.showerror("Error", f"ID: {id_selected}, Nada: {nada_selected} tidak valid untuk Progres dan Mode")
return
if progres_selected == 2 and mode_selected == "turun":
if id_selected == 1 and nada_selected == "trebel":
new_id = 3
new_id_value = data_gn_cyan_atas[3]
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang=1)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
elif id_selected == 2 and nada_selected == "trebel":
new_id = 1
new_id_value = data_gn_cyan_atas[1] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang=1)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
elif id_selected == 3 and nada_selected == "trebel":
new_id = 2
new_id_value = data_gn_cyan_atas[2] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang=1)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
if progres_selected == 3 and mode_selected == "turun":
if id_selected == 1 and nada_selected == "trebel":
new_id = 2
new_id_value = data_gn_cyan_atas[2]
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang=2)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
elif id_selected == 2 and nada_selected == "trebel":
new_id = 3
new_id_value = data_gn_cyan_atas[3] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang=2)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
elif id_selected == 3 and nada_selected == "trebel":
new_id = 1
new_id_value = data_gn_cyan_atas[1] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang=2)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
else:
messagebox.showerror("Error", f"ID: {id_selected}, Nada: {nada_selected} tidak valid untuk Progres dan Mode")
return
except ValueError:
messagebox.showerror("Error", "Input harus berupa angka yang valid.")
except IndexError:
messagebox.showerror("Error", "Indeks data tidak valid, pastikan data yang diakses memiliki cukup karakter.")
except Exception as e:
messagebox.showerror("Error", f"Terjadi kesalahan: {str(e)}")
finally:
# Menghapus status read-only sementara
entry_id.config(state='normal')
# Bersihkan atau reset entry dan combobox setelah tombol pilih_nada ditekan
entry_level_gn.delete(0, 'end')
entry_id.delete(0, 'end')
progres_combobox.set('')
mode_combobox.set('')
nada_combobox.set('')
# Kembalikan status read-only setelah menghapus isinya
entry_id.config(state='readonly')
# Pastikan reset_entries() adalah fungsi valid yang digunakan untuk mereset komponen lainnya
reset_entries()
# Fungsi untuk menyesuaikan nilai sub trebel berdasarkan progres
def adjust_trebel_value(trebel_value, progres):
if trebel_value.isdigit():
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
def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):
# Pastikan digit pertama dari trebel_value adalah digit
if trebel_value.isdigit():
# Modifikasi digit pertama dengan mengurangkan 'pengurang' yang ditentukan
digit_pertama = str(int(trebel_value[0]) - pengurang)
print(f"Digit pertama setelah pengurangan: {digit_pertama}")
else:
# Jika bukan digit, tidak diubah
digit_pertama = trebel_value
# Ambil digit kedua dan seterusnya dari new_id_value dan kurangi 2 untuk setiap digit
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(
str(int(char) - 2) for char in new_id_value[1:]
)
print(f"Digit kedua dan seterusnya setelah pengurangan: {digit_kedua_dan_seterusnya}")
else:
digit_kedua_dan_seterusnya = new_id_value[1:] # Jika bukan digit, tidak diubah
# Gabungkan digit pertama dengan digit kedua dan seterusnya
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
print(f"Nilai akhir: {adjusted_value}")
return adjusted_value
def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
print(f"Digit pertama setelah pengurangan: {digit_pertama}")
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(
str(int(char) - 2) for char in new_id_value[1:]
)
print(f"Digit kedua dan seterusnya setelah pengurangan: {digit_kedua_dan_seterusnya}")
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
print(f"Nilai akhir: {adjusted_value}")
return adjusted_value
def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):
# Pastikan digit pertama dari trebel_value adalah digit
if trebel_value.isdigit():
# Modifikasi digit pertama dengan mengurangkan 'pengurang' yang ditentukan
digit_pertama = str(int(trebel_value[0]) - pengurang)
print(f"Digit pertama setelah pengurangan: {digit_pertama}")
else:
# Jika bukan digit, tidak diubah
digit_pertama = trebel_value
# Ambil digit kedua dan seterusnya dari new_id_value dan kurangi 2 untuk setiap digit
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(
str(int(char) - 3) for char in new_id_value[1:]
)
print(f"Digit kedua dan seterusnya setelah pengurangan: {digit_kedua_dan_seterusnya}")
else:
digit_kedua_dan_seterusnya = new_id_value[1:] # Jika bukan digit, tidak diubah
# Gabungkan digit pertama dengan digit kedua dan seterusnya
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
print(f"Nilai akhir: {adjusted_value}")
return adjusted_value
def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
print(f"Digit pertama setelah pengurangan: {digit_pertama}")
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(
str(int(char) - 3) for char in new_id_value[1:]
)
print(f"Digit kedua dan seterusnya setelah pengurangan: {digit_kedua_dan_seterusnya}")
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
print(f"Nilai akhir: {adjusted_value}")
return adjusted_value
#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()
Tolong beri arti dari penulisan kode berikut:
def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):
# Pastikan digit pertama dari trebel_value adalah digit
if trebel_value.isdigit():
# Modifikasi digit pertama dengan mengurangkan 'pengurang' yang ditentukan
digit_pertama = str(int(trebel_value[0]) - pengurang)
print(f"Digit pertama setelah pengurangan: {digit_pertama}")
else:
# Jika bukan digit, tidak diubah
digit_pertama = trebel_value
# Ambil digit kedua dan seterusnya dari new_id_value dan kurangi 2 untuk setiap digit
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(
str(int(char) - 3) for char in new_id_value[1:]
)
print(f"Digit kedua dan seterusnya setelah pengurangan: {digit_kedua_dan_seterusnya}")
else:
digit_kedua_dan_seterusnya = new_id_value[1:] # Jika bukan digit, tidak diubah
# Gabungkan digit pertama dengan digit kedua dan seterusnya
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
print(f"Nilai akhir: {adjusted_value}")
return adjusted_value
elif progres_selected == 3 and mode_selected == "naik":
if id_selected == 1 and nada_selected == "trebel":
new_id = 3 # Menetapkan new_id untuk logika khusus ini
# Ambil data dari new_id_value untuk digit kedua dan seterusnya
new_id_value = data_gn_cyan_atas[3] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}") # Debugging: pastikan new_id_value diambil dengan benar
entry_trebel.delete(0, tk.END)
# Hitung final_adjustment dengan pengurangan untuk digit pertama dan gabungkan digit kedua
final_adjustment = adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang=2)
print(f"final_adjustment: {final_adjustment}") # Debugging: lihat hasil final_adjustment
# Masukkan hasilnya ke entry_trebel
entry_trebel.insert(0, final_adjustment)
elif id_selected == 2 and nada_selected == "trebel":
new_id = 1
new_id_value = data_gn_cyan_atas[1] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang=2)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
elif id_selected == 3 and nada_selected == "trebel":
new_id = 2
new_id_value = data_gn_cyan_atas[2] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang=2)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
Penjelasan kode di atas adalah sebagai berikut:
### Fungsi `adjust_id_trebel_progres3_naik_value`
Fungsi ini bertugas memodifikasi nilai dari suatu string berdasarkan aturan berikut:
1. **Mengecek apakah nilai pertama dari `trebel_value` adalah digit**:
- Jika benar, maka digit pertama dari `trebel_value` akan dikurangi dengan nilai `pengurang` yang ditentukan (dalam kasus ini `pengurang=2`).
- Jika bukan digit, maka nilai pertama tetap seperti semula tanpa perubahan.
2. **Mengecek apakah `new_id_value` merupakan digit**:
- Jika benar, maka setiap digit kedua dan seterusnya dari `new_id_value` akan dikurangi sebesar 3.
- Jika bukan digit, maka digit kedua dan seterusnya tetap seperti semula.
3. **Menggabungkan hasil**:
- Digit pertama yang telah dikurangi akan digabungkan dengan hasil pengurangan pada digit kedua dan seterusnya dari `new_id_value`.
4. **Pengembalian hasil**:
- Nilai hasil penggabungan ini kemudian dikembalikan sebagai output dari fungsi.
Contoh:
- Misalkan `trebel_value = "3"`, `new_id_value = "456"`, dan `pengurang = 2`. Maka digit pertama (`3`) dikurangi 2 menjadi `1`, dan digit kedua serta seterusnya dari `456` akan menjadi `12` (`5-3=2` dan `6-3=3`). Hasil akhirnya adalah "112".
### Penggunaan Fungsi di Dalam Logika Program:
Kode ini menggunakan logika berdasarkan **progres** dan **mode** yang dipilih.
- **Jika `progres_selected == 3` dan `mode_selected == "naik"`**:
- Kode memproses data `trebel_value` untuk setiap ID yang dipilih (1, 2, atau 3) sesuai dengan logika berikut:
1. **Untuk ID 1 dan nada "trebel"**:
- `new_id_value` diambil dari data `data_gn_cyan_atas[3]`.
- Fungsi `adjust_id_trebel_progres3_naik_value` kemudian digunakan untuk memodifikasi nilai `trebel_value` dan `new_id_value`.
- Hasil akhir dimasukkan kembali ke dalam `entry_trebel`.
2. **Untuk ID 2 dan nada "trebel"**:
- `new_id_value` diambil dari data `data_gn_cyan_atas[1]`.
- Sama seperti sebelumnya, hasil dari `adjust_id_trebel_progres3_naik_value` dimasukkan ke `entry_trebel`.
3. **Untuk ID 3 dan nada "trebel"**:
- `new_id_value` diambil dari data `data_gn_cyan_atas[2]`.
- Proses modifikasi dengan fungsi yang sama dan hasil dimasukkan ke `entry_trebel`.
### Kesimpulan:
Kode ini digunakan untuk memodifikasi nilai dari kolom `trebel` berdasarkan ID, progres, dan mode yang dipilih. Fungsi `adjust_id_trebel_progres3_naik_value` mengubah digit pertama dari `trebel_value` dengan mengurangkan angka yang ditentukan (`pengurang`), lalu menggabungkannya dengan digit kedua dan seterusnya dari `new_id_value`, di mana setiap digit kedua dan seterusnya dikurangi dengan angka tetap (3). Hasil modifikasi ini kemudian ditampilkan di widget tkinter `entry_trebel`.
Kalau kode berikut apa arti penulisannya:
new_id = 3 # Menetapkan new_id untuk logika khusus ini
# Ambil data dari new_id_value untuk digit kedua dan seterusnya
new_id_value = data_gn_cyan_atas[3] # Data berdasarkan index_trebel
Penulisan kode berikut memiliki arti sebagai berikut:
```python
new_id = 3 # Menetapkan new_id untuk logika khusus ini
```
- Kode ini menetapkan nilai `new_id` sebagai **3**. Artinya, `new_id` digunakan sebagai variabel untuk menyimpan angka **3** dalam konteks logika tertentu. Mungkin logika khusus ini membutuhkan `new_id` sebagai **3** untuk proses lebih lanjut yang terkait dengan ID tertentu atau pengambilan data lainnya.
```python
new_id_value = data_gn_cyan_atas[3] # Data berdasarkan index_trebel
```
- Baris ini mengambil **data** dari struktur `data_gn_cyan_atas` pada **index ke-3** dan menyimpannya dalam variabel `new_id_value`.
- `data_gn_cyan_atas` mungkin merupakan list atau array yang berisi data-data tertentu, dan `data_gn_cyan_atas[3]` berarti mengambil elemen yang berada pada posisi ke-4 (karena indexing dimulai dari 0).
- Data yang diambil dari `index ke-3` ini kemudian akan digunakan untuk proses lebih lanjut, mungkin untuk memodifikasi atau digunakan bersama dengan `new_id` dan data lainnya.
### Kesimpulan:
Kode ini:
1. Menetapkan `new_id` menjadi 3, untuk logika atau proses tertentu.
2. Mengambil data dari array/list `data_gn_cyan_atas` pada index ke-3, yang akan digunakan lebih lanjut dalam proses yang sedang berjalan.
data_gn_cyan_atas[3] ini apakah mengambil data berdasarkan index_trebel ataukah index_id
Dalam konteks kode yang diberikan, `data_gn_cyan_atas[3]` mengambil data dari indeks ke-3 dari struktur `data_gn_cyan_atas`. Namun, apakah ini terkait dengan **index_trebel** atau **index_id** bergantung pada bagaimana struktur `data_gn_cyan_atas` disusun dan digunakan dalam program.
Jika dalam struktur `data_gn_cyan_atas` data disimpan berdasarkan **index_trebel** (yang merujuk pada nada Trebel dalam musik), maka pengambilan `data_gn_cyan_atas[3]` berarti mengambil data pada posisi ke-4 yang relevan dengan nada Trebel tertentu.
Namun, jika `data_gn_cyan_atas` menyimpan data berdasarkan **index_id** (yang mungkin berhubungan dengan ID tertentu dari data yang lebih umum), maka `data_gn_cyan_atas[3]` merujuk pada data ID ke-3 (atau ke-4 jika indeks mulai dari 0) dalam list tersebut.
Untuk menjawab pertanyaan dengan tepat, kita perlu melihat bagaimana **data_gn_cyan_atas** disusun dan apa yang diwakili oleh indeks dalam struktur data tersebut. Jika ada penjelasan sebelumnya dalam kode atau dokumentasi bahwa indeks tersebut merujuk pada **index_trebel**, maka itulah konteks yang dipakai. Sebaliknya, jika indeks mewakili ID, maka itu merujuk pada **index_id**.
Berdasarkan baris ini:
```python
new_id_value = data_gn_cyan_atas[3] # Data berdasarkan index_trebel
```
Komentar menyebutkan bahwa data ini diambil berdasarkan **index_trebel**, jadi kemungkinan besar struktur ini memang dirancang untuk menyimpan data nada Trebel.
Jadi kalau mengambil data berdasarkan index_id, bagaimana bentuk penulisan kodenya.
Jika ingin mengambil data berdasarkan **index_id**, penulisan kodenya akan bergantung pada bagaimana data disusun dalam struktur tersebut. Misalnya, jika `data_gn_cyan_atas` adalah list atau dictionary yang menyimpan data dengan menggunakan **index_id**, maka kode akan sedikit berbeda bergantung pada jenis strukturnya.
Berikut beberapa contoh skenario:
### 1. **Jika `data_gn_cyan_atas` adalah List dan menggunakan index_id sebagai indeks:**
```python
# Misal data_gn_cyan_atas adalah list dengan data berdasarkan index_id
data_gn_cyan_atas = ['data_id_0', 'data_id_1', 'data_id_2', 'data_id_3']
# Mengambil data berdasarkan index_id
index_id = 3
new_id_value = data_gn_cyan_atas[index_id]
print(f"Data berdasarkan index_id {index_id}: {new_id_value}")
```
Dalam contoh ini, `data_gn_cyan_atas[index_id]` akan mengambil data di posisi ke-3 dalam list (karena list dimulai dari indeks 0).
### 2. **Jika `data_gn_cyan_atas` adalah Dictionary dengan index_id sebagai kunci:**
```python
# Misal data_gn_cyan_atas adalah dictionary dengan index_id sebagai kunci
data_gn_cyan_atas = {
1: 'data_id_1',
2: 'data_id_2',
3: 'data_id_3',
4: 'data_id_4'
}
# Mengambil data berdasarkan index_id
index_id = 3
new_id_value = data_gn_cyan_atas.get(index_id, 'Data tidak ditemukan')
print(f"Data berdasarkan index_id {index_id}: {new_id_value}")
```
Dalam contoh ini, `data_gn_cyan_atas.get(index_id)` akan mengambil data dengan kunci yang sesuai dengan **index_id** yang ditentukan.
### 3. **Jika `data_gn_cyan_atas` adalah List of Dictionaries dan index_id adalah salah satu atribut di dalam dictionary:**
```python
# Misal data_gn_cyan_atas adalah list yang berisi dictionary dengan atribut index_id
data_gn_cyan_atas = [
{'index_id': 1, 'data': 'data_id_1'},
{'index_id': 2, 'data': 'data_id_2'},
{'index_id': 3, 'data': 'data_id_3'}
]
# Mengambil data berdasarkan index_id
index_id = 3
new_id_value = next((item['data'] for item in data_gn_cyan_atas if item['index_id'] == index_id), 'Data tidak ditemukan')
print(f"Data berdasarkan index_id {index_id}: {new_id_value}")
```
Dalam contoh ini, kita menggunakan `next()` untuk mencari item dalam list yang memiliki `index_id` yang cocok, lalu mengambil data dari item tersebut.
### Kesimpulan:
Cara mengambil data berdasarkan **index_id** sangat bergantung pada struktur data yang digunakan. Jika **index_id** adalah indeks dalam list, maka kita cukup menggunakan indeks tersebut langsung. Jika **index_id** adalah kunci dalam dictionary, kita dapat menggunakan kunci untuk mengambil nilai yang sesuai.
Kalau begitu, kode keseluruhan untuk file CRUD_Gn_Cyan_Atas_Trebe.py akan menjadi seperti berikut 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)
def pilih_nada():
try:
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()
trebel_selected = combobox_trebel.get().lower()
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 (dalam hal ini 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()
# Pastikan data dari database ada
if not data_gn_cyan_atas:
messagebox.showerror("Error", "Data tidak ditemukan di tabel Gn_Cyan_Atas.")
return
if not data_sub_gn_cyan_atas:
messagebox.showerror("Error", "Data tidak ditemukan di tabel Sub_Gn_Cyan_Atas.")
return
# Inisialisasi index_trebel berdasarkan pilihan Trebel
trebel_index_map = {
"trebel_1": 0,
"trebel_2": 1,
"trebel_3": 2,
"trebel_4": 3,
"trebel_5": 4
}
if trebel_selected not in trebel_index_map:
messagebox.showerror("Error", "Pilihan Trebel tidak valid.")
return
index_trebel = trebel_index_map[trebel_selected]
if data_gn_cyan_atas or data_sub_gn_cyan_atas:
if mode_selected == "naik" or "turun":
if progres_selected == 1 and nada_selected == "trebel":
# Logika untuk Progres 1
entry_trebel.delete(0, tk.END)
entry_trebel.insert(0, data_gn_cyan_atas[index_trebel]) # Ambil data dari Gn_Cyan_Atas berdasarkan index_trebel
entry_sub_trebel.delete(0, tk.END)
entry_sub_trebel.insert(0, data_sub_gn_cyan_atas[index_trebel]) # Ambil data dari Sub_Gn_Cyan_Atas berdasarkan index_trebel
elif progres_selected == 2 and nada_selected == "trebel":
# Logika untuk Progres 2
entry_sub_trebel.delete(0, tk.END)
entry_sub_trebel.insert(0, adjust_trebel_value(data_sub_gn_cyan_atas[index_trebel], 1)) # Ambil data dari Sub_Gn_Cyan_Atas berdasarkan index_trebel
elif progres_selected == 3 and nada_selected == "trebel":
# Logika untuk Progres 3
entry_sub_trebel.delete(0, tk.END)
entry_sub_trebel.insert(0, adjust_trebel_value(data_sub_gn_cyan_atas[index_trebel], 2)) # Ambil data dari Sub_Gn_Cyan_Atas berdasarkan index_trebel
# Inisialisasi index_id berdasarkan pilihan ID
if id_selected == 1:
index_id = 0
elif id_selected == 2:
index_id = 1
elif id_selected == 3:
index_id = 2
else:
messagebox.showerror("Error", "Pilihan ID tidak valid.")
return
if id_selected in [1, 2, 3] and mode_selected == "naik" or "turun":
if index_id + 1 == 1:
id_selected = 1
elif index_id + 1 == 2:
id_selected == 2
elif index_id + 1 >= 3:
id_selected == 3
elif index_id - 1 == 1:
id_selected == 3
elif index_id - 1 == 0:
id_selected == 2
elif index_id - 1 <= -1:
id_selected == 1
else:
messagebox.showerror("Error", "Penyesuaian ID tidak valid.")
return
# Penyesuaian ID berdasarkan level_gn_selected
def adjust_id(level_gn_selected):
if level_gn_selected in [1, 4, 6, 11]:
return 1, 0
elif level_gn_selected in [2, 7, 9, 12]:
return 2, 1
elif level_gn_selected in [3, 5, 8, 10]:
return 3, 2
else:
messagebox.showerror("Error", "Level_Gn tidak valid.")
return None, None
id_selected, index_id = adjust_id(level_gn_selected)
if id_selected is None:
return
if data_gn_cyan_atas:
# Aturan mode naik: id_selected bertambah sesuai dengan progres - 1
new_id = id_selected + (progres_selected - 1)
print(f"new_id: {new_id}") # Debugging: lihat apakah new_id benar
# Pengecualian jika new_id > 3, maka berputar kembali ke id 1 atau id 2
if new_id == 4:
new_id = 1
elif new_id == 5:
new_id = 2
# Aturan mode turun: id_selected berkurang sesuai dengan progres - 1
new_id = id_selected - (progres_selected - 1)
if new_id == 0:
new_id = 3
elif new_id == -1:
new_id = 2
print(f"Adjusted new_id after exception: {new_id}")
# Logika utama untuk mengambil dan menampilkan data Trebel_1 hingga Trebel_5
if 0 <= index_trebel <= 4: # Pastikan index berada dalam rentang 0 hingga 4
trebel_value = data_gn_cyan_atas[index_trebel] # Ambil Trebel berdasarkan index_trebel
print(f"trebel_value (dari index_trebel): {trebel_value}") # Debugging: pastikan trebel_value diambil dengan benar
if progres_selected == 2 and mode_selected == "naik":
if id_selected == 1 and nada_selected == "trebel":
new_id = 2 or index_id == 1 # Menetapkan new_id untuk logika khusus ini
# Ambil data dari new_id_value untuk digit kedua dan seterusnya
new_id_value = data_gn_cyan_atas[index_id] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}") # Debugging: pastikan new_id_value diambil dengan benar
entry_trebel.delete(0, tk.END)
# Hitung final_adjustment dengan pengurangan untuk digit pertama dan gabungkan digit kedua
final_adjustment = adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang=1)
print(f"final_adjustment: {final_adjustment}") # Debugging: lihat hasil final_adjustment
# Masukkan hasilnya ke entry_trebel
entry_trebel.insert(0, final_adjustment)
elif id_selected == 2 and nada_selected == "trebel":
new_id = 3 or index_id == 2
new_id_value = data_gn_cyan_atas[index_id] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang=1)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
elif id_selected == 3 and nada_selected == "trebel":
new_id = 1 or index_id == 0
new_id_value = data_gn_cyan_atas[index_id] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang=1)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
elif progres_selected == 3 and mode_selected == "naik":
if id_selected == 1 and nada_selected == "trebel":
new_id = 3 or index_id == 2 # Menetapkan new_id untuk logika khusus ini
# Ambil data dari new_id_value untuk digit kedua dan seterusnya
new_id_value = data_gn_cyan_atas[index_id] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}") # Debugging: pastikan new_id_value diambil dengan benar
entry_trebel.delete(0, tk.END)
# Hitung final_adjustment dengan pengurangan untuk digit pertama dan gabungkan digit kedua
final_adjustment = adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang=2)
print(f"final_adjustment: {final_adjustment}") # Debugging: lihat hasil final_adjustment
# Masukkan hasilnya ke entry_trebel
entry_trebel.insert(0, final_adjustment)
elif id_selected == 2 and nada_selected == "trebel":
new_id = 1 or index_id == 0
new_id_value = data_gn_cyan_atas[index_id] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang=2)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
elif id_selected == 3 and nada_selected == "trebel":
new_id = 2 or index_id == 1
new_id_value = data_gn_cyan_atas[index_id] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang=2)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
else:
messagebox.showerror("Error", f"ID: {id_selected}, Nada: {nada_selected} tidak valid untuk Progres dan Mode")
return
if progres_selected == 2 and mode_selected == "turun":
if id_selected == 1 and nada_selected == "trebel":
new_id = 3 or index_id == 2
new_id_value = data_gn_cyan_atas[index_id]
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang=1)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
elif id_selected == 2 and nada_selected == "trebel":
new_id = 1 or index_id == 0
new_id_value = data_gn_cyan_atas[index_id] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang=1)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
elif id_selected == 3 and nada_selected == "trebel":
new_id = 2 or index_id == 1
new_id_value = data_gn_cyan_atas[index_id] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang=1)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
if progres_selected == 3 and mode_selected == "turun":
if id_selected == 1 and nada_selected == "trebel":
new_id = 2 or index_id == 1
new_id_value = data_gn_cyan_atas[index_id]
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang=2)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
elif id_selected == 2 and nada_selected == "trebel":
new_id = 3 or index_id == 2
new_id_value = data_gn_cyan_atas[index_id] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang=2)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
elif id_selected == 3 and nada_selected == "trebel":
new_id = 1 or index_id == 0
new_id_value = data_gn_cyan_atas[index_id] # Data berdasarkan index_trebel
print(f"new_id_value (dari index_trebel): {new_id_value}")
entry_trebel.delete(0, tk.END)
final_adjustment = adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang=2)
print(f"final_adjustment: {final_adjustment}")
entry_trebel.insert(0, final_adjustment)
else:
messagebox.showerror("Error", f"ID: {id_selected}, Nada: {nada_selected} tidak valid untuk Progres dan Mode")
return
except ValueError:
messagebox.showerror("Error", "Input harus berupa angka yang valid.")
except IndexError:
messagebox.showerror("Error", "Indeks data tidak valid, pastikan data yang diakses memiliki cukup karakter.")
except Exception as e:
messagebox.showerror("Error", f"Terjadi kesalahan: {str(e)}")
finally:
# Menghapus status read-only sementara
entry_id.config(state='normal')
# Bersihkan atau reset entry dan combobox setelah tombol pilih_nada ditekan
entry_level_gn.delete(0, 'end')
entry_id.delete(0, 'end')
progres_combobox.set('')
mode_combobox.set('')
nada_combobox.set('')
# Kembalikan status read-only setelah menghapus isinya
entry_id.config(state='readonly')
# Pastikan reset_entries() adalah fungsi valid yang digunakan untuk mereset komponen lainnya
reset_entries()
# Fungsi untuk menyesuaikan nilai sub trebel berdasarkan progres
def adjust_trebel_value(trebel_value, progres):
if trebel_value.isdigit():
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
def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):
# Pastikan digit pertama dari trebel_value adalah digit
if trebel_value.isdigit():
# Modifikasi digit pertama dengan mengurangkan 'pengurang' yang ditentukan
digit_pertama = str(int(trebel_value[0]) - pengurang)
print(f"Digit pertama setelah pengurangan: {digit_pertama}")
else:
# Jika bukan digit, tidak diubah
digit_pertama = trebel_value
# Ambil digit kedua dan seterusnya dari new_id_value dan kurangi 2 untuk setiap digit
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(
str(int(char) - 2) for char in new_id_value[1:]
)
print(f"Digit kedua dan seterusnya setelah pengurangan: {digit_kedua_dan_seterusnya}")
else:
digit_kedua_dan_seterusnya = new_id_value[1:] # Jika bukan digit, tidak diubah
# Gabungkan digit pertama dengan digit kedua dan seterusnya
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
print(f"Nilai akhir: {adjusted_value}")
return adjusted_value
def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
print(f"Digit pertama setelah pengurangan: {digit_pertama}")
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(
str(int(char) - 2) for char in new_id_value[1:]
)
print(f"Digit kedua dan seterusnya setelah pengurangan: {digit_kedua_dan_seterusnya}")
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
print(f"Nilai akhir: {adjusted_value}")
return adjusted_value
def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):
# Pastikan digit pertama dari trebel_value adalah digit
if trebel_value.isdigit():
# Modifikasi digit pertama dengan mengurangkan 'pengurang' yang ditentukan
digit_pertama = str(int(trebel_value[0]) - pengurang)
print(f"Digit pertama setelah pengurangan: {digit_pertama}")
else:
# Jika bukan digit, tidak diubah
digit_pertama = trebel_value
# Ambil digit kedua dan seterusnya dari new_id_value dan kurangi 2 untuk setiap digit
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(
str(int(char) - 3) for char in new_id_value[1:]
)
print(f"Digit kedua dan seterusnya setelah pengurangan: {digit_kedua_dan_seterusnya}")
else:
digit_kedua_dan_seterusnya = new_id_value[1:] # Jika bukan digit, tidak diubah
# Gabungkan digit pertama dengan digit kedua dan seterusnya
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
print(f"Nilai akhir: {adjusted_value}")
return adjusted_value
def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
print(f"Digit pertama setelah pengurangan: {digit_pertama}")
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(
str(int(char) - 3) for char in new_id_value[1:]
)
print(f"Digit kedua dan seterusnya setelah pengurangan: {digit_kedua_dan_seterusnya}")
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
print(f"Nilai akhir: {adjusted_value}")
return adjusted_value
#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()
Komentar
Posting Komentar
This Message