FUNGSI UNTUK MENGAMBIL DATA TABEL Gn_Biru DARI DATABASE DATAMUSIK.db, DAN MENGATUR BASS/TREBEL SESUAI Level_gn, Progres, dan Mode. (Part-3)
FUNGSI UNTUK MENGAMBIL DATA TABEL Gn_Biru DARI DATABASE DATAMUSIK.db, DAN MENGATUR BASS/TREBEL SESUAI Level_gn, Progres, dan Mode. (Part-3)
Tolong perbaiki kode berikut pada baris 106 hingga 129, bahwa pengurangan digit data Trebel sudah benar menurut perubahan level_gn, sedangkan yang masih salah ada pada pengurangan digit pada data Bass menurut perubahan level_gn, bahwa pada level'gn 1, 2, 3 setiap digit data Trebel tidak ada pengurangan, lalu pada level'gn 4, 5, 6 setiap digit data Trebel mengalami pengurangan 1, lalu pada level'gn 7, 8, 9 setiap digit data Trebel mengalami pengurangan 2, lalu pada level'gn 10, 11, 12 setiap digit data Trebel mengalami pengurangan 2, kemudian setiap data Trebel di progres 2 akan mengalami lagi penurunan digit data dikurang 1 setelah setiap digit datanya berkurang oleh sebab perubahan level_gn, lalu bila setiap data Trebel di progres 3 akan mengalami lagi penurunan digit data dikurang 2 setelah setiap digit datanya berkurang oleh sebab perubahan level_gn. Contohnya data Trebel di kolom Trebel_1 id 3, level_gn 1, progres 1, mode naik adalah "32", lalu bila di level_gn 4 maka data Trebel_1 id 3 ini akan menjadi "21" (semua digit data berkurang 1 karena level_gn 4), lalu bila di progres 2, level_gn 4, maka data Trebel_1 id 3 ini akan menjadi "10" (semua digit data berkurang lagi 1 karena progres 2 dari kondisi level_gn 4), lalu bila di progres 3, level_gn 4, maka data Trebel_1 id 3 ini akan menjadi "0-1" (semua digit data berkurang lagi 2 karena progres 3 dari kondisi level_gn 4), dan seterusnya hingga bila di level_gn 10 maka data Trebel_1 id 3 ini akan menjadi "0-1" (semua digit data berkurang 3 karena level_gn 10), lalu bila di progres 2, level_gn 10, maka data Trebel_1 id 3 ini akan menjadi "-1-2" (semua digit data berkurang lagi 1 karena progres 2 dari kondisi level_gn 10), lalu bila di progres 3, level_gn 10, maka data Trebel_1 id 3 ini akan menjadi "-2-3" (semua digit data berkurang lagi 2 karena progres 3 dari kondisi level_gn 10).
Berikut kode yang butuh diperbaiki di baris 106 hingga 129:
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import sqlite3
root = tk.Tk()
root.title("Pilihan Nada")
root.geometry("600x400")
# Buat frame_top di dalam inner_frame
frame_top = tk.Frame(root)
frame_top.pack(pady=10)
frame_top.grid_columnconfigure(0, minsize=-20)
# Fungsi untuk menampilkan messagebox dan memvalidasi input level_gn
def validate_level_gn():
try:
level_gn = int(entry_level_gn.get())
if level_gn in [1, 4, 7, 10]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
elif level_gn in [2, 5, 8, 11]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
elif level_gn in [3, 6, 9, 12]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
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')
# 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)
# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada
def pilih_nada():
try:
level_gn_selected = int(entry_level_gn.get())
id_selected = int(entry_id.get())
progres_selected = int(progres_var.get())
mode_selected = mode_var.get().lower()
# Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected
result = level_gn(id_selected, progres_selected, mode_selected, level_gn_selected)
# Tampilkan data ke dalam entry
entry_bass_1.delete(0, tk.END)
entry_bass_1.insert(0, result["Bass_1"])
entry_trebel_1.delete(0, tk.END)
entry_trebel_1.insert(0, result["Trebel_1"])
entry_bass_2.delete(0, tk.END)
entry_bass_2.insert(0, result["Bass_2"])
entry_trebel_2.delete(0, tk.END)
entry_trebel_2.insert(0, result["Trebel_2"])
entry_bass_3.delete(0, tk.END)
entry_bass_3.insert(0, result["Bass_3"])
except Exception as e:
print("Error:", e)
# Fungsi untuk mengambil data dari database dan mengatur trebel/bass sesuai progres dan mode
def level_gn(id, progres, mode, level_gn_selected):
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Query untuk pengambilan data dari tabel Gn_Biru
query = """
SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3
FROM Gn_Biru
WHERE ID = ?
"""
cursor.execute(query, (id,))
data = cursor.fetchone()
bass_1, trebel_1, bass_2, trebel_2, bass_3 = data
# Tentukan pengurang berdasarkan level_gn
pengurang = 0
if level_gn_selected in [1, 2, 3]:
pengurang = 0
elif level_gn_selected in [4, 5, 6]:
pengurang = 1
elif level_gn_selected in [7, 8, 9]:
pengurang = 2
elif level_gn_selected in [10, 11, 12]:
pengurang = 3
# Fungsi untuk mengurangi setiap digit pada bass dan trebel
def adjust_value(value, pengurang):
adjusted_value = ''.join(str(max(0, int(digit) - pengurang)) if digit.isdigit() else digit for digit in value)
return adjusted_value
# Pengurangan pada Bass dan Trebel tergantung pada Level Gn
if level_gn_selected in [1, 4, 7, 10]:
bass_1 = adjust_value(bass_1, pengurang)
trebel_1 = adjust_value(trebel_1, pengurang)
bass_2 = adjust_value(bass_2, pengurang)
trebel_2 = adjust_value(trebel_2, pengurang)
bass_3 = adjust_value(bass_3, pengurang)
elif level_gn_selected in [2, 5, 8, 11]:
bass_1 = adjust_value(bass_1, pengurang)
trebel_1 = adjust_value(trebel_1, pengurang)
bass_2 = adjust_value(bass_2, pengurang)
trebel_2 = adjust_value(trebel_2, pengurang)
bass_3 = adjust_value(bass_3, pengurang)
elif level_gn_selected in [3, 6, 9, 12]:
bass_1 = adjust_value(bass_1, pengurang)
trebel_1 = adjust_value(trebel_1, pengurang)
bass_2 = adjust_value(bass_2, pengurang)
trebel_2 = adjust_value(trebel_2, pengurang)
bass_3 = adjust_value(bass_3, pengurang)
# Pengaturan Trebel berdasarkan progres dan mode
if progres == 1:
if mode == "naik" or mode == "turun":
trebel_1 = data[1]
trebel_2 = data[3]
elif progres == 2:
if mode == "naik":
trebel_1 = adjust_id_trebel_progres2_naik_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)
trebel_2 = adjust_id_trebel_progres2_naik_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)
elif mode == "turun":
trebel_1 = adjust_id_trebel_progres2_turun_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 1)
trebel_2 = adjust_id_trebel_progres2_turun_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)
elif progres == 3:
if mode == "naik":
trebel_1 = adjust_id_trebel_progres3_naik_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 2)
trebel_2 = adjust_id_trebel_progres3_naik_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 2)
elif mode == "turun":
trebel_1 = adjust_id_trebel_progres3_turun_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 2)
trebel_2 = adjust_id_trebel_progres3_turun_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 2)
conn.close()
# Return hasil
result = {
"Bass_1": bass_1,
"Trebel_1": trebel_1,
"Bass_2": bass_2,
"Trebel_2": trebel_2,
"Bass_3": bass_3
}
return result
# Fungsi adjust untuk berbagai progres dan mode
def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def ambil_data_trebel(id, target_id, kolom):
# Fungsi untuk mengambil data Trebel dari ID yang berbeda
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
query = f"""
SELECT {kolom}
FROM Gn_Biru
WHERE ID = ?
"""
cursor.execute(query, (target_id,))
data = cursor.fetchone()
conn.close()
return data[0]
# 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)
# Letakkan entry dan combobox di bawah
label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")
label_level_gn_selected.grid(row=1, column=0, padx=0, pady=7)
entry_level_gn = tk.Entry(frame_top)
entry_level_gn.grid(row=1, column=1, padx=0, pady=7)
label_id_selected = tk.Label(frame_top, text="ID:")
label_id_selected.grid(row=2, column=0, padx=0, pady=7)
entry_id = tk.Entry(frame_top)
entry_id.grid(row=2, column=1, padx=0, pady=7)
label_progres = tk.Label(frame_top, text="Progres:")
label_progres.grid(row=3, column=0, padx=0, pady=7)
progres_var = tk.StringVar()
progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)
progres_combobox['values'] = (1, 2, 3)
progres_combobox.grid(row=3, column=1, padx=0, pady=7)
label_mode = tk.Label(frame_top, text="Mode:")
label_mode.grid(row=4, column=0, padx=0, pady=7)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])
mode_combobox.grid(row=4, column=1, padx=0, pady=7)
# Frame untuk hasil adaptasi
frame_bottom = tk.Frame(root)
frame_bottom.pack(pady=10)
# Tombol untuk memproses pemilihan nada
button_pilih_nada = tk.Button(frame_bottom, text="Pilih Nada", bg="#158aff", fg="white", command=pilih_nada)
button_pilih_nada.grid(row=5, column=1, padx=5, pady=5)
separator = ttk.Separator(frame_bottom, orient='horizontal')
separator.grid(row=6, column=0, sticky="ew", pady=15)
# Labels dan Entry untuk Bass dan Trebel
gugusan_nada_bass_1_label = tk.Label(frame_bottom, text="Bass_1")
gugusan_nada_bass_1_label.grid(row=7, column=1, padx=5, pady=5)
gugusan_nada_trebel_1_label = tk.Label(frame_bottom, text="Trebel_1")
gugusan_nada_trebel_1_label.grid(row=7, column=2, padx=5, pady=5)
gugusan_nada_bass_2_label = tk.Label(frame_bottom, text="Bass_2")
gugusan_nada_bass_2_label.grid(row=7, column=3, padx=5, pady=5)
gugusan_nada_trebel_2_label = tk.Label(frame_bottom, text="Trebel_2")
gugusan_nada_trebel_2_label.grid(row=7, column=4, padx=5, pady=5)
gugusan_nada_bass_3_label = tk.Label(frame_bottom, text="Bass_3")
gugusan_nada_bass_3_label.grid(row=7, column=5, padx=5, pady=5)
# Entry box untuk Bass dan Trebel
entry_bass_1 = tk.Entry(frame_bottom, bg="white")
entry_bass_1.grid(row=8, column=1, padx=5, pady=5)
entry_trebel_1 = tk.Entry(frame_bottom, bg="white")
entry_trebel_1.grid(row=8, column=2, padx=5, pady=5)
entry_bass_2 = tk.Entry(frame_bottom, bg="white")
entry
_bass_2.grid(row=8, column=3, padx=5, pady=5)
entry_trebel_2 = tk.Entry(frame_bottom, bg="white")
entry_trebel_2.grid(row=8, column=4, padx=5, pady=5)
entry_bass_3 = tk.Entry(frame_bottom, bg="white")
entry_bass_3.grid(row=8, column=5, padx=5, pady=5)
root.mainloop()
Berikut adalah perbaikan untuk bagian kode antara baris 106 hingga 129 sesuai dengan logika yang Anda berikan. Fokus utama perbaikan adalah penerapan pengurangan digit pada data **Trebel** dan **Bass** berdasarkan perubahan **level_gn** dan **progres**:
```python
# Fungsi untuk mengurangi setiap digit pada bass dan trebel
def adjust_value(value, pengurang):
adjusted_value = ''.join(str(max(-9, int(digit) - pengurang)) if digit.isdigit() else digit for digit in value)
return adjusted_value
# Fungsi untuk menerapkan pengurangan tambahan berdasarkan progres
def apply_progres_adjustment(value, progres):
if progres == 2:
return adjust_value(value, 1)
elif progres == 3:
return adjust_value(value, 2)
return value
# Pengurangan pada Bass dan Trebel tergantung pada Level Gn dan Progres
def level_gn(id, progres, mode, level_gn_selected):
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Query untuk pengambilan data dari tabel Gn_Biru
query = """
SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3
FROM Gn_Biru
WHERE ID = ?
"""
cursor.execute(query, (id,))
data = cursor.fetchone()
bass_1, trebel_1, bass_2, trebel_2, bass_3 = data
# Tentukan pengurang berdasarkan level_gn
if level_gn_selected in [1, 2, 3]:
pengurang = 0
elif level_gn_selected in [4, 5, 6]:
pengurang = 1
elif level_gn_selected in [7, 8, 9]:
pengurang = 2
elif level_gn_selected in [10, 11, 12]:
pengurang = 3
# Sesuaikan nilai Bass dan Trebel dengan pengurang level_gn
bass_1 = adjust_value(bass_1, pengurang)
trebel_1 = adjust_value(trebel_1, pengurang)
bass_2 = adjust_value(bass_2, pengurang)
trebel_2 = adjust_value(trebel_2, pengurang)
bass_3 = adjust_value(bass_3, pengurang)
# Terapkan pengurangan tambahan berdasarkan progres
trebel_1 = apply_progres_adjustment(trebel_1, progres)
trebel_2 = apply_progres_adjustment(trebel_2, progres)
conn.close()
# Return hasil
result = {
"Bass_1": bass_1,
"Trebel_1": trebel_1,
"Bass_2": bass_2,
"Trebel_2": trebel_2,
"Bass_3": bass_3
}
return result
```
### Penjelasan Perubahan:
1. **Pengurangan berdasarkan `level_gn`**:
- Pada level 1-3: Tidak ada pengurangan.
- Pada level 4-6: Setiap digit data dikurangi 1.
- Pada level 7-9: Setiap digit data dikurangi 2.
- Pada level 10-12: Setiap digit data dikurangi 3.
2. **Pengurangan tambahan berdasarkan `progres`**:
- **Progres 2**: Setiap digit pada data **Trebel** dikurangi 1 setelah pengurangan yang dilakukan oleh perubahan **level_gn**.
- **Progres 3**: Setiap digit pada data **Trebel** dikurangi 2 setelah pengurangan yang dilakukan oleh perubahan **level_gn**.
3. **Fungsi `apply_progres_adjustment()`**: Digunakan untuk menerapkan pengurangan tambahan berdasarkan progres.
Kemudian data Trebel yang telah mengalami pengurangan digit datanya karena perubahan level_gn, selanjutnya data Trebel akan mengalami pengurangan digit datanya lagi berdasarkan progres dan mode sesuai dengan fungi adjust_id_trebel_progres2_naik, atau fungsi adjust_id_trebel_progres2_turun, atau fungsi adjust_id_trebel_progres3_naik, atau fungsi adjust_id_trebel_progres3_turun.
Untuk itu maka tambahkan kode berikut ini:
# Pengaturan Trebel berdasarkan progres dan mode
if progres == 1:
if mode == "naik" or mode == "turun":
trebel_1 = data[1]
trebel_2 = data[3]
elif progres == 2:
if mode == "naik":
trebel_1 = adjust_id_trebel_progres2_naik_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)
trebel_2 = adjust_id_trebel_progres2_naik_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)
elif mode == "turun":
trebel_1 = adjust_id_trebel_progres2_turun_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 1)
trebel_2 = adjust_id_trebel_progres2_turun_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)
elif progres == 3:
if mode == "naik":
trebel_1 = adjust_id_trebel_progres3_naik_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 2)
trebel_2 = adjust_id_trebel_progres3_naik_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 2)
elif mode == "turun":
trebel_1 = adjust_id_trebel_progres3_turun_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 2)
trebel_2 = adjust_id_trebel_progres3_turun_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 2)
conn.close()
# Return hasil
result = {
"Bass_1": bass_1,
"Trebel_1": trebel_1,
"Bass_2": bass_2,
"Trebel_2": trebel_2,
"Bass_3": bass_3
}
return result
def ambil_data_trebel(id, target_id, kolom):
# Fungsi untuk mengambil data Trebel dari ID yang berbeda
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
query = f"""
SELECT {kolom}
FROM Gn_Biru
WHERE ID = ?
"""
cursor.execute(query, (target_id,))
data = cursor.fetchone()
conn.close()
return data[0]
# Fungsi adjust untuk berbagai progres dan mode
def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
Tambahkan kepada kode yang baru kamu beri tersebut, sehingga kode keseluruhan kira_kira menjadi seperti berikut ini:
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import sqlite3
root = tk.Tk()
root.title("Pilihan Nada")
root.geometry("600x400")
# Buat frame_top di dalam inner_frame
frame_top = tk.Frame(root)
frame_top.pack(pady=10)
frame_top.grid_columnconfigure(0, minsize=-20)
# Fungsi untuk menampilkan messagebox dan memvalidasi input level_gn
def validate_level_gn():
try:
level_gn = int(entry_level_gn.get())
if level_gn in [1, 4, 7, 10]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
elif level_gn in [2, 5, 8, 11]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
elif level_gn in [3, 6, 9, 12]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
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')
# 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)
# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada
def pilih_nada():
try:
level_gn_selected = int(entry_level_gn.get())
id_selected = int(entry_id.get())
progres_selected = int(progres_var.get())
mode_selected = mode_var.get().lower()
# Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected
result = level_gn(id_selected, progres_selected, mode_selected, level_gn_selected)
# Tampilkan data ke dalam entry
entry_bass_1.delete(0, tk.END)
entry_bass_1.insert(0, result["Bass_1"])
entry_trebel_1.delete(0, tk.END)
entry_trebel_1.insert(0, result["Trebel_1"])
entry_bass_2.delete(0, tk.END)
entry_bass_2.insert(0, result["Bass_2"])
entry_trebel_2.delete(0, tk.END)
entry_trebel_2.insert(0, result["Trebel_2"])
entry_bass_3.delete(0, tk.END)
entry_bass_3.insert(0, result["Bass_3"])
except Exception as e:
print("Error:", e)
# Fungsi untuk mengambil data dari database dan mengatur trebel/bass sesuai progres dan mode
def level_gn(id, progres, mode, level_gn_selected):
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Query untuk pengambilan data dari tabel Gn_Biru
query = """
SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3
FROM Gn_Biru
WHERE ID = ?
"""
cursor.execute(query, (id,))
data = cursor.fetchone()
bass_1, trebel_1, bass_2, trebel_2, bass_3 = data
# Fungsi untuk mengurangi setiap digit pada bass dan trebel
def adjust_value(value, pengurang):
adjusted_value = ''.join(str(max(-9, int(digit) - pengurang)) if digit.isdigit() else digit for digit in value)
return adjusted_value
# Fungsi untuk menerapkan pengurangan tambahan berdasarkan progres
def apply_progres_adjustment(value, progres):
if progres == 2:
return adjust_value(value, 1)
elif progres == 3:
return adjust_value(value, 2)
return value
# Pengurangan pada Bass dan Trebel tergantung pada Level Gn dan Progres
def level_gn(id, progres, mode, level_gn_selected):
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Query untuk pengambilan data dari tabel Gn_Biru
query = """
SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3
FROM Gn_Biru
WHERE ID = ?
"""
cursor.execute(query, (id,))
data = cursor.fetchone()
bass_1, trebel_1, bass_2, trebel_2, bass_3 = data
# Tentukan pengurang berdasarkan level_gn
if level_gn_selected in [1, 2, 3]:
pengurang = 0
elif level_gn_selected in [4, 5, 6]:
pengurang = 1
elif level_gn_selected in [7, 8, 9]:
pengurang = 2
elif level_gn_selected in [10, 11, 12]:
pengurang = 3
# Sesuaikan nilai Bass dan Trebel dengan pengurang level_gn
bass_1 = adjust_value(bass_1, pengurang)
trebel_1 = adjust_value(trebel_1, pengurang)
bass_2 = adjust_value(bass_2, pengurang)
trebel_2 = adjust_value(trebel_2, pengurang)
bass_3 = adjust_value(bass_3, pengurang)
# Terapkan pengurangan tambahan berdasarkan progres
trebel_1 = apply_progres_adjustment(trebel_1, progres)
trebel_2 = apply_progres_adjustment(trebel_2, progres)
conn.close()
# Return hasil
result = {
"Bass_1": bass_1,
"Trebel_1": trebel_1,
"Bass_2": bass_2,
"Trebel_2": trebel_2,
"Bass_3": bass_3
}
return result
# Pengaturan Trebel berdasarkan progres dan mode
if progres == 1:
if mode == "naik" or mode == "turun":
trebel_1 = data[1]
trebel_2 = data[3]
elif progres == 2:
if mode == "naik":
trebel_1 = adjust_id_trebel_progres2_naik_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)
trebel_2 = adjust_id_trebel_progres2_naik_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)
elif mode == "turun":
trebel_1 = adjust_id_trebel_progres2_turun_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 1)
trebel_2 = adjust_id_trebel_progres2_turun_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)
elif progres == 3:
if mode == "naik":
trebel_1 = adjust_id_trebel_progres3_naik_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 2)
trebel_2 = adjust_id_trebel_progres3_naik_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 2)
elif mode == "turun":
trebel_1 = adjust_id_trebel_progres3_turun_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 2)
trebel_2 = adjust_id_trebel_progres3_turun_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 2)
conn.close()
# Return hasil
result = {
"Bass_1": bass_1,
"Trebel_1": trebel_1,
"Bass_2": bass_2,
"Trebel_2": trebel_2,
"Bass_3": bass_3
}
return result
def ambil_data_trebel(id, target_id, kolom):
# Fungsi untuk mengambil data Trebel dari ID yang berbeda
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
query = f"""
SELECT {kolom}
FROM Gn_Biru
WHERE ID = ?
"""
cursor.execute(query, (target_id,))
data = cursor.fetchone()
conn.close()
return data[0]
# Fungsi adjust untuk berbagai progres dan mode
def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
# 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)
# Letakkan entry dan combobox di bawah
label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")
label_level_gn_selected.grid(row=1, column=0, padx=0, pady=7)
entry_level_gn = tk.Entry(frame_top)
entry_level_gn.grid(row=1, column=1, padx=0, pady=7)
label_id_selected = tk.Label(frame_top, text="ID:")
label_id_selected.grid(row=2, column=0, padx=0, pady=7)
entry_id = tk.Entry(frame_top)
entry_id.grid(row=2, column=1, padx=0, pady=7)
label_progres = tk.Label(frame_top, text="Progres:")
label_progres.grid(row=3, column=0, padx=0, pady=7)
progres_var = tk.StringVar()
progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)
progres_combobox['values'] = (1, 2, 3)
progres_combobox.grid(row=3, column=1, padx=0, pady=7)
label_mode = tk.Label(frame_top, text="Mode:")
label_mode.grid(row=4, column=0, padx=0, pady=7)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])
mode_combobox.grid(row=4, column=1, padx=0, pady=7)
# Frame untuk hasil adaptasi
frame_bottom = tk.Frame(root)
frame_bottom.pack(pady=10)
# Tombol untuk memproses pemilihan nada
button_pilih_nada = tk.Button(frame_bottom, text="Pilih Nada", bg="#158aff", fg="white", command=pilih_nada)
button_pilih_nada.grid(row=5, column=1, padx=5, pady=5)
separator = ttk.Separator(frame_bottom, orient='horizontal')
separator.grid(row=6, column=0, sticky="ew", pady=15)
# Labels dan Entry untuk Bass dan Trebel
gugusan_nada_bass_1_label = tk.Label(frame_bottom, text="Bass_1")
gugusan_nada_bass_1_label.grid(row=7, column=1, padx=5, pady=5)
gugusan_nada_trebel_1_label = tk.Label(frame_bottom, text="Trebel_1")
gugusan_nada_trebel_1_label.grid(row=7, column=2, padx=5, pady=5)
gugusan_nada_bass_2_label = tk.Label(frame_bottom, text="Bass_2")
gugusan_nada_bass_2_label.grid(row=7, column=3, padx=5, pady=5)
gugusan_nada_trebel_2_label = tk.Label(frame_bottom, text="Trebel_2")
gugusan_nada_trebel_2_label.grid(row=7, column=4, padx=5, pady=5)
gugusan_nada_bass_3_label = tk.Label(frame_bottom, text="Bass_3")
gugusan_nada_bass_3_label.grid(row=7, column=5, padx=5, pady=5)
# Entry box untuk Bass dan Trebel
entry_bass_1 = tk.Entry(frame_bottom, bg="white")
entry_bass_1.grid(row=8, column=1, padx=5, pady=5)
entry_trebel_1 = tk.Entry(fram
e_bottom, bg="white")
entry_trebel_1.grid(row=8, column=2, padx=5, pady=5)
entry_bass_2 = tk.Entry(frame_bottom, bg="white")
entry_bass_2.grid(row=8, column=3, padx=5, pady=5)
entry_trebel_2 = tk.Entry(frame_bottom, bg="white")
entry_trebel_2.grid(row=8, column=4, padx=5, pady=5)
entry_bass_3 = tk.Entry(frame_bottom, bg="white")
entry_bass_3.grid(row=8, column=5, padx=5, pady=5)
root.mainloop()
Tampaknya Anda ingin menambahkan logika yang kompleks untuk memanipulasi data trebel berdasarkan progres dan mode yang dipilih. Selain itu, Anda ingin mengatur pengurangan nilai digit pada trebel tergantung pada level_gn, progres, dan mode, serta menampilkan hasilnya ke dalam beberapa entri di tkinter. Berikut ini adalah bagian terakhir dari kode lengkap yang melibatkan pengaturan trebel dan bass dengan menambahkan fungsi yang telah dijelaskan.
Berikut adalah kelanjutan dari fungsi `level_gn`:
```python
# Tentukan pengurang berdasarkan level_gn
if level_gn_selected in [1, 4, 7, 10]:
pengurang = 1
elif level_gn_selected in [2, 5, 8, 11]:
pengurang = 2
elif level_gn_selected in [3, 6, 9, 12]:
pengurang = 3
else:
pengurang = 0
# Pengurangan pada bass dan trebel sesuai level_gn
bass_1 = adjust_value(bass_1, pengurang)
trebel_1 = adjust_value(trebel_1, pengurang)
bass_2 = adjust_value(bass_2, pengurang)
trebel_2 = adjust_value(trebel_2, pengurang)
bass_3 = adjust_value(bass_3, pengurang)
# Pengaturan tambahan berdasarkan progres dan mode
if progres == 1:
if mode == "naik" or mode == "turun":
# Tidak ada penyesuaian tambahan
pass
elif progres == 2:
if mode == "naik":
trebel_1 = adjust_id_trebel_progres2_naik_value(trebel_1, ambil_data_trebel(id, 3, 'Trebel_1'), pengurang)
trebel_2 = adjust_id_trebel_progres2_naik_value(trebel_2, ambil_data_trebel(id, 3, 'Trebel_2'), pengurang)
elif mode == "turun":
trebel_1 = adjust_id_trebel_progres2_turun_value(trebel_1, ambil_data_trebel(id, 2, 'Trebel_1'), pengurang)
trebel_2 = adjust_id_trebel_progres2_turun_value(trebel_2, ambil_data_trebel(id, 2, 'Trebel_2'), pengurang)
elif progres == 3:
if mode == "naik":
trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(id, 2, 'Trebel_1'), pengurang)
trebel_2 = adjust_id_trebel_progres3_naik_value(trebel_2, ambil_data_trebel(id, 2, 'Trebel_2'), pengurang)
elif mode == "turun":
trebel_1 = adjust_id_trebel_progres3_turun_value(trebel_1, ambil_data_trebel(id, 3, 'Trebel_1'), pengurang)
trebel_2 = adjust_id_trebel_progres3_turun_value(trebel_2, ambil_data_trebel(id, 3, 'Trebel_2'), pengurang)
conn.close()
# Return hasil
result = {
"Bass_1": bass_1,
"Trebel_1": trebel_1,
"Bass_2": bass_2,
"Trebel_2": trebel_2,
"Bass_3": bass_3
}
return result
```
### Fungsi Tambahan
Fungsi tambahan seperti `adjust_id_trebel_progres2_naik_value`, `adjust_id_trebel_progres2_turun_value`, `adjust_id_trebel_progres3_naik_value`, dan `adjust_id_trebel_progres3_turun_value` juga sudah terintegrasi dalam kode. Selain itu, fungsi `ambil_data_trebel` digunakan untuk mengambil nilai trebel dari database berdasarkan ID yang berbeda.
### Penggunaan di tkinter
Anda juga sudah menyertakan bagian di mana data hasil manipulasi dimasukkan ke dalam entry widget di tkinter. Pastikan entry yang sesuai diisi dengan hasil yang diperoleh dari fungsi `level_gn`.
### Kesimpulan
Kode di atas menggabungkan logika penyesuaian nilai trebel berdasarkan level, progres, dan mode, serta menampilkan hasilnya di tkinter. Pastikan semua fungsi berjalan dengan benar dan terhubung ke database `DATAMUSIK.db`.
Tolong perbaiki kode berikut:
# Pengaturan tambahan berdasarkan progres dan mode
if progres == 1:
if mode == "naik" or mode == "turun":
# Tidak ada penyesuaian tambahan
pass
elif progres == 2:
if mode == "naik":
trebel_1 = adjust_id_trebel_progres2_naik_value(trebel_1, ambil_data_trebel(id, 3, 'Trebel_1'), pengurang)
elif mode == "turun":
trebel_1 = adjust_id_trebel_progres2_turun_value(trebel_1, ambil_data_trebel(id, 2, 'Trebel_1'), pengurang)
trebel_2 = adjust_id_trebel_progres2_turun_value(trebel_2, ambil_data_trebel(id, 2, 'Trebel_2'), pengurang)
elif progres == 3:
if mode == "naik":
trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(id, 2, 'Trebel_1'), pengurang)
elif mode == "turun":
trebel_1 = adjust_id_trebel_progres3_turun_value(trebel_1, ambil_data_trebel(id, 3, 'Trebel_1'), pengurang)
trebel_2 = adjust_id_trebel_progres3_turun_value(trebel_2, ambil_data_trebel(id, 3, 'Trebel_2'), pengurang)
def ambil_data_trebel(id, target_id, kolom):
# Fungsi untuk mengambil data Trebel dari ID yang berbeda
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
query = f"""
SELECT {kolom}
FROM Gn_Biru
WHERE ID = ?
"""
cursor.execute(query, (target_id,))
data = cursor.fetchone()
conn.close()
return data[0]
# Fungsi adjust untuk berbagai progres dan mode
def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
Agar supaya ada kesesuaian antara id data dengan new_id_value, yaitu:
Jika progres 2, data Trebel dari id 1 dan kondisi progres 2 mode naik maka new_id_value adalah id 3, Jika data Trebel dari id 1 dan progres 2 mode turun maka new_id_value adalah id 2, Jika data Trebel dari id 2 dan progres 2 mode naik maka new_id_value adalah id 1, Jika data Trebel dari id 2 dan progres 2 mode turun maka new_id_value adalah id 3. Jika data Trebel dari id 3 dan progres 2 mode naik maka new_id_value adalah id 2, Jika data Trebel dari id 3 dan progres 2 mode turun maka new_id_value adalah id 1.
Kemudian Jika progres 3, data Trebel dari id 1 dan kondisi progres 3 mode naik maka new_id_value adalah id 2, Jika data Trebel dari id 1 dan progres 3 mode turun maka new_id_value adalah id 3, Jika data Trebel dari id 2 dan progres 3 mode naik maka new_id_value adalah id 3, Jika data Trebel dari id 2 dan progres 3 mode turun maka new_id_value adalah id 1, Jika data Trebel dari id 3 dan progres 3 mode naik maka new_id_value adalah id 1, Jika data Trebel dari id 3 dan progres 3 mode turun maka new_id_value adalah id 2.
Saya akan memperbaiki kode Anda agar sesuai dengan logika yang Anda inginkan untuk pengambilan `new_id_value` berdasarkan progres dan mode. Berikut adalah perbaikan kodenya:
### Perbaikan Logika untuk Pemilihan `new_id_value`:
1. Jika **progres 2**:
- **mode naik**:
- ID 1 -> ID 3
- ID 2 -> ID 1
- ID 3 -> ID 2
- **mode turun**:
- ID 1 -> ID 2
- ID 2 -> ID 3
- ID 3 -> ID 1
2. Jika **progres 3**:
- **mode naik**:
- ID 1 -> ID 2
- ID 2 -> ID 3
- ID 3 -> ID 1
- **mode turun**:
- ID 1 -> ID 3
- ID 2 -> ID 1
- ID 3 -> ID 2
Berikut adalah kode yang telah diperbaiki:
```python
# Pengaturan tambahan berdasarkan progres dan mode
if progres == 1:
if mode == "naik" or mode == "turun":
# Tidak ada penyesuaian tambahan
pass
elif progres == 2:
new_id_value = ambil_new_id_value(id, progres, mode)
if mode == "naik":
trebel_1 = adjust_id_trebel_progres2_naik_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang)
elif mode == "turun":
trebel_1 = adjust_id_trebel_progres2_turun_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang)
trebel_2 = adjust_id_trebel_progres2_turun_value(trebel_2, ambil_data_trebel(new_id_value, 'Trebel_2'), pengurang)
elif progres == 3:
new_id_value = ambil_new_id_value(id, progres, mode)
if mode == "naik":
trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang)
elif mode == "turun":
trebel_1 = adjust_id_trebel_progres3_turun_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang)
trebel_2 = adjust_id_trebel_progres3_turun_value(trebel_2, ambil_data_trebel(new_id_value, 'Trebel_2'), pengurang)
# Fungsi untuk mengambil ID target berdasarkan progres dan mode
def ambil_new_id_value(id, progres, mode):
if progres == 2:
if mode == "naik":
if id == 1:
return 3
elif id == 2:
return 1
elif id == 3:
return 2
elif mode == "turun":
if id == 1:
return 2
elif id == 2:
return 3
elif id == 3:
return 1
elif progres == 3:
if mode == "naik":
if id == 1:
return 2
elif id == 2:
return 3
elif id == 3:
return 1
elif mode == "turun":
if id == 1:
return 3
elif id == 2:
return 1
elif id == 3:
return 2
# Fungsi untuk mengambil data Trebel dari ID yang berbeda
def ambil_data_trebel(target_id, kolom):
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
query = f"""
SELECT {kolom}
FROM Gn_Biru
WHERE ID = ?
"""
cursor.execute(query, (target_id,))
data = cursor.fetchone()
conn.close()
return data[0]
# Fungsi adjust untuk berbagai progres dan mode
def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
```
### Penjelasan Perbaikan:
1. Saya menambahkan fungsi `ambil_new_id_value()` yang akan memilih `new_id_value` berdasarkan logika yang telah Anda tentukan untuk progres 2 dan 3 serta mode naik dan turun.
2. Saya mengubah pemanggilan `ambil_data_trebel()` agar menggunakan `new_id_value` yang sesuai dengan kondisi `id`, `progres`, dan `mode`.
3. Fungsi-fungsi `adjust_id_trebel_*` tetap digunakan untuk memodifikasi nilai `trebel` sesuai aturan yang Anda berikan.
Apa arti dari penulisan kode berikut:
if progres == 3:
new_id_value = ambil_new_id_value(id, progres, mode)
if mode == "naik":
trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(id, new_id_value, 'Trebel_1'), pengurang)
Kode berikut memiliki tujuan untuk memodifikasi nilai **trebel_1** berdasarkan **progres** (dalam hal ini progres 3) dan **mode** (dalam hal ini mode "naik"). Berikut adalah penjelasan setiap bagian dari kode:
1. **`if progres == 3:`**
- Kondisi ini mengecek apakah nilai **progres** sama dengan 3. Jika benar, blok kode di bawahnya akan dijalankan.
2. **`new_id_value = ambil_new_id_value(id, progres, mode)`**
- Fungsi **`ambil_new_id_value()`** digunakan untuk mengambil nilai **new_id_value** yang sesuai berdasarkan **id**, **progres**, dan **mode**. Ini digunakan untuk menentukan ID baru yang akan digunakan dalam pengambilan data Trebel.
3. **`if mode == "naik":`**
- Mengecek apakah **mode** adalah "naik". Jika benar, blok kode di bawah ini dijalankan. Dalam kasus ini, kode bertujuan memproses data untuk mode naik.
4. **`trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(id, new_id_value, 'Trebel_1'), pengurang)`**
- **`ambil_data_trebel(id, new_id_value, 'Trebel_1')`** mengambil data **Trebel_1** dari tabel berdasarkan **id** dan **new_id_value**.
- Fungsi **`adjust_id_trebel_progres3_naik_value()`** kemudian dipanggil untuk menyesuaikan nilai **trebel_1** dengan data yang diambil, mengurangi beberapa nilai sesuai dengan aturan yang telah ditentukan (misalnya, pengurangan digit angka), serta nilai **pengurang** yang disediakan.
Secara keseluruhan, kode ini digunakan untuk mengambil data **Trebel_1** dari database berdasarkan **id** dan **new_id_value**, kemudian memodifikasi (mengatur) nilai tersebut jika kondisi **progres == 3** dan **mode == "naik"**.
Nilai pengurang yang dimaksud di sini apakah nilai pengurang pada fungsi adjust_value(value, pengurang) ataukah pada salah satu dari fungsi adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang, atau adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang), atau adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang), atau adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang)
Nilai **pengurang** yang dimaksud dalam konteks kode tersebut merujuk pada **pengurang** yang digunakan dalam fungsi **adjust_id_trebel_progres3_naik_value()** atau fungsi-fungsi serupa, seperti **adjust_id_trebel_progres2_naik_value()**, **adjust_id_trebel_progres2_turun_value()**, **adjust_id_trebel_progres3_naik_value()**, dan **adjust_id_trebel_progres3_turun_value()**.
Fungsi-fungsi ini menggunakan **pengurang** untuk mengurangi nilai dari karakter angka pertama pada **trebel_value** atau **new_id_value**. Dalam hal ini, **pengurang** merupakan parameter yang dimasukkan ke dalam fungsi-fungsi tersebut untuk menentukan seberapa besar angka pertama dari nilai **trebel_value** harus dikurangi.
Dengan kata lain, **pengurang** di sini adalah parameter yang dikirim ke fungsi **adjust_id_trebel_progres3_naik_value()**, bukan dari fungsi **adjust_value(value, pengurang)** (kecuali jika **adjust_value()** juga digunakan di dalam salah satu dari fungsi-fungsi tersebut).
Jadi, dalam kode:
```python
trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(id, new_id_value, 'Trebel_1'), pengurang)
```
nilai **pengurang** yang digunakan adalah parameter yang dikirim ke **adjust_id_trebel_progres3_naik_value()**.
Bagaimana dengan pengaturan pengurangan digit kedua dan digit seterusnya, apakah sudah diatur
Ya, pengaturan untuk **pengurangan digit kedua dan seterusnya** sudah diatur di dalam fungsi-fungsi penyesuaian seperti **adjust_id_trebel_progres2_naik_value()**, **adjust_id_trebel_progres2_turun_value()**, **adjust_id_trebel_progres3_naik_value()**, dan **adjust_id_trebel_progres3_turun_value()**. Pada fungsi-fungsi ini, setelah melakukan pengurangan pada digit pertama, digit kedua dan seterusnya juga diproses.
Berikut adalah logika yang mengatur pengurangan untuk digit kedua dan seterusnya pada contoh fungsi:
### Contoh pada fungsi **adjust_id_trebel_progres2_naik_value()**:
```python
def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
# Pengurangan untuk digit pertama
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
# Pengaturan pengurangan untuk digit kedua dan seterusnya
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
# Menggabungkan digit pertama dan digit kedua hingga terakhir
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
```
### Analisis:
- **Digit pertama** dari **trebel_value** dikurangi dengan **pengurang** yang diberikan sebagai parameter.
- **Digit kedua dan seterusnya** dari **new_id_value** (bukan **trebel_value**) diambil dan setiap karakter dikurangi dengan nilai 2. Ini diatur dengan logika **''.join(str(int(char) - 2) for char in new_id_value[1:])**. Pengurangan ini diterapkan ke semua karakter digit setelah karakter pertama.
### Pengaturan untuk digit kedua dan seterusnya:
1. **Digit pertama**: Selalu diproses dengan **pengurang** yang dikirimkan ke fungsi (berbeda untuk tiap progres dan mode).
2. **Digit kedua dan seterusnya**: Diatur dengan pengurangan tetap (misalnya, -2 atau -3) tergantung pada progres dan mode. Pada contoh fungsi di atas, pengurangan **-2** diterapkan untuk digit kedua dan seterusnya, yang bisa berbeda untuk progres lainnya.
### Variasi untuk fungsi lainnya:
Fungsi seperti **adjust_id_trebel_progres3_naik_value()** dan **adjust_id_trebel_progres3_turun_value()** juga mengikuti pola yang sama, hanya perbedaan ada pada nilai pengurang untuk digit kedua dan seterusnya, seperti **-3** pada progres 3.
Jika ingin pengaturan lain untuk digit kedua dan seterusnya, Anda bisa mengubah angka dalam logika ini:
```python
''.join(str(int(char) - 2) for char in new_id_value[1:])
```
Menjadi pengurang sesuai kebutuhan, misalnya -3 atau lainnya.
Pada kode berikut ini:
if progres == 3:
new_id_value = ambil_new_id_value(id, progres, mode)
if mode == "naik":
trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang)
Pada bagian kode mana yang menyatakan pengaturan digit kedua dan seterusnya
Pada kode berikut:
```python
if progres == 3:
new_id_value = ambil_new_id_value(id, progres, mode)
if mode == "naik":
trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang)
```
Pengaturan untuk **digit kedua dan seterusnya** dilakukan di dalam fungsi **adjust_id_trebel_progres3_naik_value()**, bukan pada bagian kode di atas. Berikut adalah penjelasannya:
### Letak pengaturan digit kedua dan seterusnya:
Pengaturan untuk digit kedua dan seterusnya dapat dilihat dalam fungsi **adjust_id_trebel_progres3_naik_value()**, seperti ini:
```python
def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
# Pengaturan untuk digit pertama
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
# Pengaturan untuk digit kedua dan seterusnya
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
# Menggabungkan digit pertama dan digit kedua hingga terakhir
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
```
### Analisis:
- **Digit pertama** dari **trebel_value** dikurangi dengan **pengurang** yang diberikan (contohnya pada kode progres 3, pengurangnya bisa -3).
- **Digit kedua dan seterusnya** dari **new_id_value** dikurangi dengan nilai **3** dalam fungsi ini. Pengaturan ini berada pada bagian berikut:
```python
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])
```
Artinya, untuk **setiap digit kedua dan seterusnya** dari **new_id_value**, fungsi akan mengambil setiap digit, menguranginya dengan **3**, dan kemudian menggabungkannya kembali menjadi satu string.
### Kesimpulan:
Pengaturan **digit kedua dan seterusnya** tidak diatur pada kode **if progres == 3** atau saat memanggil fungsi **adjust_id_trebel_progres3_naik_value()**, melainkan diatur di dalam fungsi **adjust_id_trebel_progres3_naik_value()** itu sendiri, khususnya pada bagian yang menangani pengurangan digit kedua dan seterusnya:
```python
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])
```
Apakah penulisan kode:
trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1, pengurang=2))
bisa dilakukan pada kode: if progres == 3:
new_id_value = ambil_new_id_value(id, progres, mode)
if mode == "naik":
trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang=2)
Apa bedanya dengan penulisan kode yang ini:
trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang=2)
Penulisan kode berikut:
```python
trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang=2)
```
mengandung kesalahan sintaks karena Python tidak memungkinkan penulisan **keyword argument** (seperti `pengurang=2`) di dalam pemanggilan fungsi yang sudah menjadi parameter fungsi lainnya.
Mari kita lihat lebih jelas perbedaannya dan kenapa kode yang pertama tidak valid.
### 1. Penulisan yang salah (tidak valid):
```python
trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang=2)
```
Di sini, kita memiliki pemanggilan fungsi:
```python
adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang=2)
```
Perhatikan bahwa **`pengurang=2`** berada di dalam pemanggilan fungsi **`adjust_id_trebel_progres3_naik_value`**, tetapi nilai tersebut harus dilewatkan melalui parameter. Karena **`adjust_id_trebel_progres3_naik_value`** memerlukan tiga argumen positional, tidak ada cara langsung untuk menambahkan **`pengurang=2`** di dalam pemanggilan ini. Python tidak memperbolehkan kita untuk meletakkan **keyword argument** di posisi seperti ini.
### 2. Penulisan yang benar:
Jika Anda ingin memberikan nilai **`pengurang`** dengan **nilai 2**, penulisan kode harus seperti ini:
```python
trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), 2)
```
Atau, jika fungsi mendukung **keyword argument**, penulisannya harus seperti ini:
```python
trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang=2)
```
Ini memberikan nilai **2** ke parameter **pengurang** dengan jelas dan tanpa kesalahan.
### Kesimpulan:
- **Penulisan pertama salah** karena mencoba meletakkan **keyword argument** (yaitu **`pengurang=2`**) di tempat yang tidak diperbolehkan oleh Python.
- **Penulisan kedua benar** asalkan fungsi mendukung **keyword argument** atau **pengurang** adalah argumen positional yang ditempatkan pada urutan ketiga.
Jika fungsi **`adjust_id_trebel_progres3_naik_value()`** mendukung **keyword argument**, maka penulisan yang benar adalah:
```python
trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang=2)
```
Jika tidak, gunakan penulisan:
```python
trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), 2)
```
Kalau penulisan kode yang ini:
trebel_1 = adjust_id_trebel_progres2_naik_value((trebel_1, new_id_value, 2), ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang=1)
Penulisan kode ini:
```python
trebel_1 = adjust_id_trebel_progres2_naik_value((trebel_1, new_id_value, 2), ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang=1)
```
mengandung beberapa kesalahan dan tidak akan berfungsi seperti yang diharapkan.
### Penjelasan Kesalahan:
1. **Kesalahan dalam Penggunaan Tuple:**
- Bagian `(trebel_1, new_id_value, 2)` membuat **tuple**. Tuple ini digunakan sebagai **argumen pertama** untuk fungsi `adjust_id_trebel_progres2_naik_value`.
- Jika fungsi **`adjust_id_trebel_progres2_naik_value`** tidak mengharapkan sebuah tuple, maka ini akan menyebabkan kesalahan, karena ia mengharapkan argumen individual, bukan dalam bentuk tuple. Kecuali memang fungsi tersebut ditulis untuk menerima tuple, maka penulisan seperti ini tidak benar.
2. **Penulisan `pengurang=1`:**
- Sama seperti kasus sebelumnya, **`pengurang=1`** ditulis sebagai **keyword argument**, yang berarti nilai ini diberikan secara spesifik ke parameter **`pengurang`**.
- Jika fungsi **`adjust_id_trebel_progres2_naik_value`** mendukung **keyword arguments**, ini tidak akan menjadi masalah. Namun jika tidak, ini akan menyebabkan kesalahan.
3. **Argumen Berlebihan:**
- Jika **`adjust_id_trebel_progres2_naik_value`** hanya mengharapkan dua atau tiga argumen, menambahkan tuple dan keyword argument bisa menyebabkan kesalahan **"too many arguments"**, karena Python menganggap Anda mengirimkan terlalu banyak parameter untuk fungsi tersebut.
### Penulisan yang Benar:
Jika **`adjust_id_trebel_progres2_naik_value`** diharapkan menerima argumen **`trebel_1`, `new_id_value`, dan `pengurang`**, maka penulisan yang benar adalah:
```python
trebel_1 = adjust_id_trebel_progres2_naik_value(trebel_1, new_id_value, 2, pengurang=1)
```
Atau, jika tidak mendukung **keyword arguments** untuk **`pengurang`**, maka harus ditulis seperti ini:
```python
trebel_1 = adjust_id_trebel_progres2_naik_value(trebel_1, new_id_value, 2, 1)
```
### Kesimpulan:
Penulisan kode yang Anda tunjukkan salah karena penggunaan tuple `(trebel_1, new_id_value, 2)` tidak sesuai jika fungsi tidak mengharapkan tuple. Selain itu, penulisan keyword argument **`pengurang=1`** juga perlu disesuaikan dengan apakah fungsi tersebut mendukung keyword argument atau tidak.
Okelah, melakukan CRUD pada data tabel Gn_Biru sudah selesai. Jadi kode keseluruhan untuk CRUD data gn_biru adalah menjadi berikut ini:
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import sqlite3
root = tk.Tk()
root.title("Pilihan Nada")
root.geometry("600x400")
# Buat frame_top di dalam inner_frame
frame_top = tk.Frame(root)
frame_top.pack(pady=10)
frame_top.grid_columnconfigure(0, minsize=-20)
# Fungsi untuk menampilkan messagebox dan memvalidasi input level_gn
def validate_level_gn():
try:
level_gn = int(entry_level_gn.get())
if level_gn in [1, 4, 7, 10]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
elif level_gn in [2, 5, 8, 11]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
elif level_gn in [3, 6, 9, 12]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
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')
# 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)
# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada
def pilih_nada():
try:
level_gn_selected = int(entry_level_gn.get())
id_selected = int(entry_id.get())
progres_selected = int(progres_var.get())
mode_selected = mode_var.get().lower()
# Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected
result = level_gn(id_selected, progres_selected, mode_selected, level_gn_selected)
# Tampilkan data ke dalam entry
entry_bass_1.delete(0, tk.END)
entry_bass_1.insert(0, result["Bass_1"])
entry_trebel_1.delete(0, tk.END)
entry_trebel_1.insert(0, result["Trebel_1"])
entry_bass_2.delete(0, tk.END)
entry_bass_2.insert(0, result["Bass_2"])
entry_trebel_2.delete(0, tk.END)
entry_trebel_2.insert(0, result["Trebel_2"])
entry_bass_3.delete(0, tk.END)
entry_bass_3.insert(0, result["Bass_3"])
except Exception as e:
print("Error:", e)
# Fungsi untuk mengambil data dari database dan mengatur trebel/bass sesuai progres dan mode
def level_gn(id, progres, mode, level_gn_selected):
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Query untuk pengambilan data dari tabel Gn_Biru
query = """
SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3
FROM Gn_Biru
WHERE ID = ?
"""
cursor.execute(query, (id,))
data = cursor.fetchone()
bass_1, trebel_1, bass_2, trebel_2, bass_3 = data
# Fungsi untuk mengurangi setiap digit pada bass dan trebel
def adjust_value(value, pengurang):
adjusted_value = ''.join(str(max(-9, int(digit) - pengurang)) if digit.isdigit() else digit for digit in value)
return adjusted_value
# Fungsi untuk menerapkan pengurangan tambahan berdasarkan progres
def apply_progres_adjustment(value, progres):
if progres == 2:
return adjust_value(value, 1)
elif progres == 3:
return adjust_value(value, 2)
return value
# Pengurangan pada Bass dan Trebel tergantung pada Level Gn dan Progres
def level_gn(id, progres, mode, level_gn_selected):
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Query untuk pengambilan data dari tabel Gn_Biru
query = """
SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3
FROM Gn_Biru
WHERE ID = ?
"""
cursor.execute(query, (id,))
data = cursor.fetchone()
bass_1, trebel_1, bass_2, trebel_2, bass_3 = data
# Tentukan pengurang berdasarkan level_gn
if level_gn_selected in [1, 2, 3]:
pengurang = 0
elif level_gn_selected in [4, 5, 6]:
pengurang = 1
elif level_gn_selected in [7, 8, 9]:
pengurang = 2
elif level_gn_selected in [10, 11, 12]:
pengurang = 3
# Sesuaikan nilai Bass dan Trebel dengan pengurang level_gn
bass_1 = adjust_value(bass_1, pengurang)
trebel_1 = adjust_value(trebel_1, pengurang)
bass_2 = adjust_value(bass_2, pengurang)
trebel_2 = adjust_value(trebel_2, pengurang)
bass_3 = adjust_value(bass_3, pengurang)
# Terapkan pengurangan tambahan berdasarkan progres
trebel_1 = apply_progres_adjustment(trebel_1, progres)
trebel_2 = apply_progres_adjustment(trebel_2, progres)
conn.close()
# Return hasil
result = {
"Bass_1": bass_1,
"Trebel_1": trebel_1,
"Bass_2": bass_2,
"Trebel_2": trebel_2,
"Bass_3": bass_3
}
return result
# Pengaturan tambahan berdasarkan progres dan mode
if progres == 1:
if mode == "naik" or mode == "turun":
# Tidak ada penyesuaian tambahan
pass
elif progres == 2:
new_id_value = ambil_new_id_value(id, progres, mode)
if mode == "naik":
trebel_1 = adjust_id_trebel_progres2_naik_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang=1)
elif mode == "turun":
trebel_1 = adjust_id_trebel_progres2_turun_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang=1)
trebel_2 = adjust_id_trebel_progres2_turun_value(trebel_2, ambil_data_trebel(new_id_value, 'Trebel_2'), pengurang=1)
elif progres == 3:
new_id_value = ambil_new_id_value(id, progres, mode)
if mode == "naik":
trebel_1 = adjust_id_trebel_progres3_naik_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang=2)
elif mode == "turun":
trebel_1 = adjust_id_trebel_progres3_turun_value(trebel_1, ambil_data_trebel(new_id_value, 'Trebel_1'), pengurang)
trebel_2 = adjust_id_trebel_progres3_turun_value(trebel_2, ambil_data_trebel(new_id_value, 'Trebel_2'), pengurang=2)
# Fungsi untuk mengambil ID target berdasarkan progres dan mode
def ambil_new_id_value(id, progres, mode):
if progres == 2:
if mode == "naik":
if id == 1:
return 3
elif id == 2:
return 1
elif id == 3:
return 2
elif mode == "turun":
if id == 1:
return 2
elif id == 2:
return 3
elif id == 3:
return 1
elif progres == 3:
if mode == "naik":
if id == 1:
return 2
elif id == 2:
return 3
elif id == 3:
return 1
elif mode == "turun":
if id == 1:
return 3
elif id == 2:
return 1
elif id == 3:
return 2
# Fungsi untuk mengambil data Trebel dari ID yang berbeda
def ambil_data_trebel(id, target_id, kolom):
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
query = f"""
SELECT {kolom}
FROM Gn_Biru
WHERE ID = ?
"""
cursor.execute(query, (target_id,))
data = cursor.fetchone()
conn.close()
return data[0]
# Fungsi adjust untuk berbagai progres dan mode
def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
# 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)
# Letakkan entry dan combobox di bawah
label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")
label_level_gn_selected.grid(row=1, column=0, padx=0, pady=7)
entry_level_gn = tk.Entry(frame_top)
entry_level_gn.grid(row=1, column=1, padx=0, pady=7)
label_id_selected = tk.Label(frame_top, text="ID:")
label_id_selected.grid(row=2, column=0, padx=0, pady=7)
entry_id = tk.Entry(frame_top)
entry_id.grid(row=2, column=1, padx=0, pady=7)
label_progres = tk.Label(frame_top, text="Progres:")
label_progres.grid(row=3, column=0, padx=0, pady=7)
progres_var = tk.StringVar()
progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)
progres_combobox['values'] = (1, 2, 3)
progres_combobox.grid(row=3, column=1, padx=0, pady=7)
label_mode = tk.Label(frame_top, text="Mode:")
label_mode.grid(row=4, column=0, padx=0, pady=7)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])
mode_combobox.grid(row=4, column=1, padx=0, pady=7)
# Frame untuk hasil adaptasi
frame_bottom = tk.Frame(root)
frame_bottom.pack(pady=10)
# Tombol untuk memproses pemilihan nada
button_pilih_nada = tk.Button(frame_bottom, text="Pilih Nada", bg="#158aff", fg="white", command=pilih_nada)
button_pilih_nada.grid(row=5, column=1, padx=5, pady=5)
separator = ttk.Separator(frame_bottom, orient='horizontal')
separator.grid(row=6, column=0, sticky="ew", pady=15)
# Labels dan Entry untuk Bass dan Trebel
gugusan_nada_bass_1_label = tk.Label(frame_bottom, text="Bass_1")
gugusan_nada_bass_1_label.grid(row=7, column=1, padx=5, pady=5)
gugusan_nada_trebel_1_label = tk.Label(frame_bottom, text="Trebel_1")
gugusan_nada_trebel_1_label.grid(row=7, column=2, padx=5, pady=5)
gugusan_nada_bass_2_label = tk.Label(frame_bottom, text="Bass_2")
gugusan_nada_bass_2_label.grid(row=7, column=3, padx=5, pady=5)
gugusan_nada_trebel_2_label = tk.Label(frame_bottom, text="Trebel_2")
gugusan_nada_trebel_2_label.grid(row=7, column=4, padx=5, pady=5)
gugusan_nada_bass_3_label = tk.Label(frame_bottom, text="Bass_3")
gugusan_nada_bass_3_label.grid(row=7, column=5, padx=5, pady=5)
# Entry box untuk Bass dan Trebel
entry_bass_1 = tk.Entry(frame_bottom, bg="white")
entry_bass_1.grid(row=8, column=1, padx=5, pady=5)
entry_trebel_1 = tk.Entry(frame_bottom, bg="white")
entry_trebel_1.grid(row=8, column=2, padx=5, pady=5)
en
try_bass_2 = tk.Entry(frame_bottom, bg="white")
entry_bass_2.grid(row=8, column=3, padx=5, pady=5)
entry_trebel_2 = tk.Entry(frame_bottom, bg="white")
entry_trebel_2.grid(row=8, column=4, padx=5, pady=5)
entry_bass_3 = tk.Entry(frame_bottom, bg="white")
entry_bass_3.grid(row=8, column=5, padx=5, pady=5)
root.mainloop()
Kode yang Anda bagikan tampaknya sudah komprehensif dan mencakup berbagai fungsi CRUD yang dibutuhkan untuk mengelola tabel `Gn_Biru`. Setiap fungsi menangani aspek yang spesifik dari aplikasi, termasuk validasi, pengambilan data dari database, dan pengaturan data sesuai dengan progres dan mode. Berikut ini adalah langkah-langkah penting yang telah diimplementasikan:
### Fitur Utama Kode:
1. **Validasi Input Level_Gn**: Menggunakan `validate_level_gn()` untuk memvalidasi input dan menentukan ID berdasarkan nilai Level_Gn.
2. **Pengambilan Data dari Database**: Fungsi `level_gn()` menangani pengambilan data dari tabel `Gn_Biru` berdasarkan ID dan Level_Gn yang dipilih.
3. **Pengolahan Data Bass dan Trebel**: Ada fungsi-fungsi untuk melakukan penyesuaian pada data Bass dan Trebel berdasarkan Level_Gn, progres, dan mode, serta logika tambahan yang memperhitungkan perbedaan progres (`apply_progres_adjustment()` dan `adjust_value()`).
4. **Logika Progres dan Mode**: Kode ini sudah mencakup logika untuk menangani perubahan data Trebel berdasarkan progres dan mode (naik/turun) dengan menggunakan berbagai fungsi penyesuaian (`adjust_id_trebel_progres2_naik_value()`, `adjust_id_trebel_progres2_turun_value()`, dll.).
### Saran Perbaikan:
1. **Penutupan Koneksi Database**: Pastikan bahwa koneksi ke database selalu ditutup setelah query selesai untuk menghindari kebocoran memori. Ini sudah dilakukan di beberapa bagian, namun perlu diperiksa apakah ada tempat lain yang perlu ditambahkan.
2. **Efisiensi Kode**: Fungsi untuk mengubah nilai Trebel berdasarkan progres dan mode dapat lebih disederhanakan atau digabungkan jika memungkinkan, agar kode lebih mudah dibaca dan dipelihara.
3. **Penanganan Error yang Lebih Baik**: Saat pengambilan data dari database, jika `fetchone()` mengembalikan `None` (data tidak ditemukan), tambahkan pengecekan untuk menghindari kesalahan saat mencoba mengakses hasil query yang kosong.
4. **Antarmuka Pengguna**: Dalam hal UI, pastikan penggunaan `messagebox` digunakan dengan tepat untuk memberikan umpan balik kepada pengguna terkait status input atau hasil proses, serta mempertimbangkan pengalaman pengguna (UX) agar lebih baik.
Jika kode ini sudah berjalan sesuai dengan harapan, Anda bisa melanjutkan pengujian di lingkungan produksi dan memastikan semua fitur CRUD berfungsi dengan baik. Jika ada pertanyaan lebih lanjut atau bagian yang memerlukan penjelasan, saya siap membantu lebih lanjut.
Terakhir, pada kode tersebut tolong tambahkan perlakuan khusus pada data kolom Trebel_2:
Jika progres 2, mode naik, maka data Trebel_2 id 1 akan mengalami pengurangan digit menurut fungsi adjust_value(value, pengurang) dan fungsi apply_progres_adjustment(value, progres), dan jika progres 2, mode turun, maka data Trebel_2 id 3 akan mengalami pengurangan digit menurut fungsi adjust_value(value, pengurang) dan fungsi apply_progres_adjustment(value, progres)
Untuk menambahkan perlakuan khusus pada data kolom `Trebel_2` berdasarkan kondisi progres dan mode yang telah dijelaskan, kita perlu menerapkan dua fungsi, yaitu `adjust_value(value, pengurang)` dan `apply_progres_adjustment(value, progres)`, kemudian melakukan pengurangan digit sesuai dengan kondisinya.
Berikut adalah langkah-langkah yang bisa kamu tambahkan pada kode yang sudah ada:
1. **Buat Fungsi `adjust_value(value, pengurang)` dan `apply_progres_adjustment(value, progres)`**
2. **Modifikasi Perlakuan Khusus untuk `Trebel_2`**
Kode-nya dapat diperluas sebagai berikut:
### 1. Tambahkan Fungsi `adjust_value` dan `apply_progres_adjustment`:
```python
def adjust_value(value, pengurang):
"""Fungsi untuk mengurangi nilai setiap digit angka"""
return ''.join(str(int(char) - pengurang) if char.isdigit() else char for char in value)
def apply_progres_adjustment(value, progres):
"""Fungsi untuk menyesuaikan nilai berdasarkan progres tertentu"""
pengurang = progres # Pengurang bisa berbeda tergantung dari progres
return adjust_value(value, pengurang)
```
### 2. Implementasikan Perlakuan Khusus pada Kolom `Trebel_2`:
Setelah memastikan kedua fungsi di atas bekerja, kita tambahkan logika untuk `Trebel_2` berdasarkan `progres` dan `mode`:
```python
# Contoh penanganan data Trebel_2
if progres == 2:
if mode == 'naik':
# Ambil data Trebel_2 ID 1
trebel_2_id_1 = get_trebel_2_data(id=1) # Asumsikan fungsi ini untuk mengambil data
# Lakukan pengurangan digit sesuai dengan fungsi adjust_value dan apply_progres_adjustment
trebel_2_id_1 = apply_progres_adjustment(trebel_2_id_1, progres)
# Simpan perubahan ke database atau update GUI
update_trebel_2_data(id=1, new_value=trebel_2_id_1)
elif mode == 'turun':
# Ambil data Trebel_2 ID 3
trebel_2_id_3 = get_trebel_2_data(id=3) # Asumsikan fungsi ini untuk mengambil data
# Lakukan pengurangan digit sesuai dengan fungsi adjust_value dan apply_progres_adjustment
trebel_2_id_3 = apply_progres_adjustment(trebel_2_id_3, progres)
# Simpan perubahan ke database atau update GUI
update_trebel_2_data(id=3, new_value=trebel_2_id_3)
```
### Penjelasan:
- **Fungsi `adjust_value(value, pengurang)`** akan mengurangi setiap digit angka dalam `value` sesuai dengan nilai `pengurang`.
- **Fungsi `apply_progres_adjustment(value, progres)`** akan menyesuaikan nilai `value` berdasarkan progres yang diberikan.
- Pada saat `progres == 2`, jika mode adalah `naik`, maka nilai `Trebel_2` pada ID 1 akan diproses, sedangkan jika mode adalah `turun`, maka nilai `Trebel_2` pada ID 3 akan diproses.
Dengan cara ini, kamu dapat memanipulasi data `Trebel_2` sesuai dengan kondisi yang diinginkan. Jangan lupa untuk menambahkan fungsi yang mengelola pengambilan dan penyimpanan data (`get_trebel_2_data` dan `update_trebel_2_data`) sesuai dengan arsitektur aplikasi atau database yang digunakan.
Selesai ..
Komentar
Posting Komentar
This Message