FUNGSI UNTUK MENGAMBIL DATA TABEL Gn_Biru DARI DATABASE DATAMUSIK.db, DAN MENGATUR BASS/TREBEL SESUAI Level_gn, Progres, dan Mode. (Part-1)
FUNGSI UNTUK MENGAMBIL DATA TABEL Gn_Biru DARI DATABASE DATAMUSIK.db, DAN MENGATUR BASS/TREBEL SESUAI Level_gn, Progres, dan Mode. (Part-1)
Tolong applikasikan kode berikut:
import sqlite3
def level_gn(id, progres, mode):
# Koneksi ke database
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Template untuk query SQL pengambilan data dari tabel Gn_Biru
query = """
SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3
FROM Gn_Biru
WHERE ID = ?
"""
# Data Bass tetap untuk semua mode dan progres
cursor.execute(query, (id,))
data = cursor.fetchone()
bass_1 = data[0]
bass_2 = data[2]
bass_3 = data[4]
# 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'), 1)
trebel_2 = adjust_id_trebel_progres3_naik_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)
elif mode == "Turun":
trebel_1 = adjust_id_trebel_progres3_turun_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)
trebel_2 = adjust_id_trebel_progres3_turun_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)
# Menutup koneksi database
conn.close()
# Cetak atau return hasil pengambilan data
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]
# Contoh penggunaan fungsi
# result = level_gn(id=1, progres=2, mode="Naik")
# print(result)
Terhadap kode fungsi pilih nada yang berisikan level_gn_selected, id_selected, progres_selected, dan mode_selected, berikut ini:
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()
Berikut adalah integrasi dari fungsi `level_gn` dengan `pilih_nada` untuk menggunakan parameter `level_gn_selected`, `id_selected`, `progres_selected`, dan `mode_selected` yang diambil dari input pengguna:
```python
import sqlite3
def level_gn(id, progres, mode):
# Koneksi ke database
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Template untuk query SQL pengambilan data dari tabel Gn_Biru
query = """
SELECT Bass_1, Trebel_1, Bass_2, Trebel_2, Bass_3
FROM Gn_Biru
WHERE ID = ?
"""
# Data Bass tetap untuk semua mode dan progres
cursor.execute(query, (id,))
data = cursor.fetchone()
bass_1 = data[0]
bass_2 = data[2]
bass_3 = data[4]
# 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'), 1)
trebel_2 = adjust_id_trebel_progres3_naik_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)
elif mode == "turun":
trebel_1 = adjust_id_trebel_progres3_turun_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)
trebel_2 = adjust_id_trebel_progres3_turun_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)
# Menutup koneksi database
conn.close()
# Cetak atau return hasil pengambilan data
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]
# Integrasi ke dalam fungsi pilih_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()
# Memanggil fungsi level_gn dengan parameter dari input pengguna
hasil_nada = level_gn(id_selected, progres_selected, mode_selected)
# Mengisi entry box atau widget tkinter dengan hasil
entry_bass_1.delete(0, 'end')
entry_bass_1.insert(0, hasil_nada['Bass_1'])
entry_trebel_1.delete(0, 'end')
entry_trebel_1.insert(0, hasil_nada['Trebel_1'])
entry_bass_2.delete(0, 'end')
entry_bass_2.insert(0, hasil_nada['Bass_2'])
entry_trebel_2.delete(0, 'end')
entry_trebel_2.insert(0, hasil_nada['Trebel_2'])
entry_bass_3.delete(0, 'end')
entry_bass_3.insert(0, hasil_nada['Bass_3'])
except Exception as e:
print(f"Terjadi kesalahan: {e}")
```
### Penjelasan:
1. **Fungsi `level_gn`**: Mengambil data dari database sesuai `ID`, `progres`, dan `mode`, lalu menghitung nilai bass dan trebel.
2. **Fungsi `pilih_nada`**: Mengambil input dari pengguna (`level_gn_selected`, `id_selected`, `progres_selected`, dan `mode_selected`) lalu memanggil `level_gn`. Hasilnya diisikan ke dalam `entry` yang sesuai di antarmuka tkinter.
Pastikan variabel seperti `entry_bass_1`, `entry_trebel_1`, dan sebagainya sudah terdefinisi dengan benar pada aplikasi tkinter Anda.
Itu dia yang saya maksud, tambahkan kode berikut ini pada kode tersebut agar data yang terpilih ditampilkan pada entry yang sesuai:
# Frame untuk ID dan progres
frame_top = tk.Frame(root)
frame_top.pack(pady=10)
label_level_gn = tk.Label(frame_top, text="Level_Gn:")
label_level_gn.grid(row=0, column=0, padx=5, pady=5)
entry_level_gn = tk.Entry(frame_top)
entry_level_gn.grid(row=0, column=1, padx=5, pady=5)
label_id = tk.Label(frame_top, text="ID:")
label_id.grid(row=1, column=0, padx=5, pady=5)
entry_id = tk.Entry(frame_top)
entry_id.grid(row=1, column=1, padx=5, pady=5)
label_progres = tk.Label(frame_top, text="Progres:")
label_progres.grid(row=2, column=0, padx=5, pady=5)
progres_var = tk.StringVar()
progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)
progres_combobox['values'] = (1, 2, 3)
progres_combobox.grid(row=2, column=1, padx=5, pady=5)
label_mode = tk.Label(frame_top, text="Mode:")
label_mode.grid(row=3, column=0, padx=5, pady=5)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var)
mode_combobox['values'] = ("Naik", "Turun")
mode_combobox.grid(row=3, column=1, padx=5, pady=5)
# 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)
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_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)
Berikut adalah modifikasi kode lengkap yang mengintegrasikan kode pemilihan nada dan menampilkan hasil pemilihan ke dalam entry sesuai yang diminta. Kode yang telah kamu berikan sebelumnya telah dimodifikasi untuk menampilkan hasil data pada `entry_bass_1`, `entry_trebel_1`, `entry_bass_2`, `entry_trebel_2`, dan `entry_bass_3` setelah tombol "Pilih Nada" ditekan.
```python
import tkinter as tk
from tkinter import ttk
import sqlite3
root = tk.Tk()
root.title("Pilihan Nada")
root.geometry("600x400")
# 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)
# 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):
# Koneksi ke database
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 = data[0]
bass_2 = data[2]
bass_3 = data[4]
# 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'), 1)
trebel_2 = adjust_id_trebel_progres3_naik_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)
elif mode == "turun":
trebel_1 = adjust_id_trebel_progres3_turun_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)
trebel_2 = adjust_id_trebel_progres3_turun_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)
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]
# Frame untuk ID dan progres
frame_top = tk.Frame(root)
frame_top.pack(pady=10)
label_level_gn = tk.Label(frame_top, text="Level_Gn:")
label_level_gn.grid(row=0, column=0, padx=5, pady=5)
entry_level_gn = tk.Entry(frame_top)
entry_level_gn.grid(row=0, column=1, padx=5, pady=5)
label_id = tk.Label(frame_top, text="ID:")
label_id.grid(row=1, column=0, padx=5, pady=5)
entry_id = tk.Entry(frame_top)
entry_id.grid(row=1, column=1, padx=5, pady=5)
label_progres = tk.Label(frame_top, text="Progres:")
label_progres.grid(row=2, column=0, padx=5, pady=5)
progres_var = tk.StringVar()
progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)
progres_combobox['values'] = (1, 2, 3)
progres_combobox.grid(row=2, column=1, padx=5, pady=5)
label_mode = tk.Label(frame_top, text="Mode:")
label_mode.grid(row=3, column=0, padx=5, pady=5)
mode_var = tk.StringVar()
mode_combobox
Setelah label_mode.grid() , lanjutkan kodenya hingga selesai
Berikut adalah kode yang dilanjutkan setelah `label_mode.grid()` dengan tambahan frame dan elemen yang sudah disebutkan:
```python
# Frame untuk ID dan progres
frame_top = tk.Frame(root)
frame_top.pack(pady=10)
label_level_gn = tk.Label(frame_top, text="Level_Gn:")
label_level_gn.grid(row=0, column=0, padx=5, pady=5)
entry_level_gn = tk.Entry(frame_top)
entry_level_gn.grid(row=0, column=1, padx=5, pady=5)
label_id = tk.Label(frame_top, text="ID:")
label_id.grid(row=1, column=0, padx=5, pady=5)
entry_id = tk.Entry(frame_top)
entry_id.grid(row=1, column=1, padx=5, pady=5)
label_progres = tk.Label(frame_top, text="Progres:")
label_progres.grid(row=2, column=0, padx=5, pady=5)
progres_var = tk.StringVar()
progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)
progres_combobox['values'] = (1, 2, 3)
progres_combobox.grid(row=2, column=1, padx=5, pady=5)
label_mode = tk.Label(frame_top, text="Mode:")
label_mode.grid(row=3, column=0, padx=5, pady=5)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var)
mode_combobox['values'] = ("Naik", "Turun")
mode_combobox.grid(row=3, column=1, padx=5, pady=5)
# 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)
# Fungsi pilih_nada untuk mengambil dan menampilkan data
def pilih_nada():
# Ambil nilai dari combobox dan entry
id_value = entry_id.get()
level_gn_value = entry_level_gn.get()
progres_value = progres_var.get()
mode_value = mode_var.get()
# Lakukan pemrosesan data atau pemilihan nada sesuai progres, mode, dll.
# Misalkan ambil data dari database atau lakukan kalkulasi untuk nada
# Set hasil ke entry yang sesuai
entry_bass_1.insert(0, "Nada_Bass_1") # Contoh hasil Bass 1
entry_trebel_1.insert(0, "Nada_Trebel_1") # Contoh hasil Trebel 1
entry_bass_2.insert(0, "Nada_Bass_2") # Contoh hasil Bass 2
entry_trebel_2.insert(0, "Nada_Trebel_2") # Contoh hasil Trebel 2
entry_bass_3.insert(0, "Nada_Bass_3") # Contoh hasil Bass 3
```
Kode ini menambahkan elemen-elemen yang diinginkan, yaitu combobox untuk pemilihan progres dan mode, tombol untuk memproses pemilihan nada, serta entry untuk menampilkan hasil nada pada bass dan trebel yang diambil dari hasil kalkulasi atau pengambilan data. Fungsi `pilih_nada` akan dijalankan saat tombol "Pilih Nada" ditekan, dan hasilnya akan dimasukkan ke dalam entry sesuai dengan kolom yang diinginkan.
Kira kira kodenya seperti berikut ini:
import tkinter as tk
from tkinter import ttk
import sqlite3
root = tk.Tk()
root.title("Pilihan Nada")
root.geometry("600x400")
# 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)
# 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):
# Koneksi ke database
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 = data[0]
bass_2 = data[2]
bass_3 = data[4]
# 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]
# Frame untuk ID dan progres
frame_top = tk.Frame(root)
frame_top.pack(pady=10)
# 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()
Namun untuk level_gn yang berbeda perlu ditentukan nilai data terpilih pada setiap level_gn yang berbeda tersebut dimulai dari level_gn 1 hingga level_gn 12 (level_gn ada sebanyak 12) .
Maksud saya, pada tabel gn_biru memiliki level_gn sebanyak 12 yang dimulai dari level_gn 1 hingga level_gn 12. Data yang ada pada tabel gn_biru tersebut bila user memilih salah satu data dari sebuah sel katakanlah user menginput level_gn = 1 maka level_gn 1 itu adalah sebagai level_gn_current, lalu di level_gn berikutnya yaitu level_gn_current +1 maka semua data di setiap digit akan berkurang 1 baik data Bass maupun Trebel, dan seterusnya bila level_gn berikutnya adalah level_gn_current +11 maka semua data di setiap digit akan berkurang 11 baik data Bass maupun Trebel.
Baik, jika yang dimaksud adalah modifikasi data pada tabel `gn_biru` di mana ketika user memilih suatu **level_gn_current**, kemudian pada **level_gn berikutnya** (yaitu level_gn_current + 1, + 2, dst.) setiap digit dari data Bass maupun Trebel akan berkurang sesuai dengan selisih level_gn tersebut, maka kita bisa mendesain fungsi yang melakukan hal tersebut.
Logika yang diterapkan adalah:
1. **Data Level_Gn Current**: Saat user memilih **level_gn_current**, data pada level tersebut tetap.
2. **Level_Gn Berikutnya**: Mulai dari **level_gn_current + 1** hingga **level_gn_current + 11**, setiap digit data di kolom Bass dan Trebel akan dikurangi dengan angka selisih level_gn saat ini dengan level_gn_current.
Berikut adalah contoh kode fungsi yang bisa digunakan untuk melakukan pembaruan data pada level-level yang dimaksud:
### Fungsi untuk Memperbarui Data pada Level_Gn Berikutnya
```python
import sqlite3
def update_gn_biru(level_gn_current):
# Membuka koneksi ke database
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Ambil data dari level_gn_current untuk dijadikan referensi
cursor.execute("SELECT Bass, Trebel FROM gn_biru WHERE Level_Gn = ?", (level_gn_current,))
result = cursor.fetchone()
if result is None:
print(f"Level_Gn {level_gn_current} tidak ditemukan.")
return
bass_current, trebel_current = result
# Loop melalui level berikutnya dari level_gn_current + 1 hingga level_gn_current + 11
for level_offset in range(1, 12):
level_gn_next = level_gn_current + level_offset
# Ambil data Bass dan Trebel dari level_gn berikutnya
cursor.execute("SELECT Bass, Trebel FROM gn_biru WHERE Level_Gn = ?", (level_gn_next,))
result_next = cursor.fetchone()
if result_next is None:
print(f"Level_Gn {level_gn_next} tidak ditemukan.")
continue
bass_next, trebel_next = result_next
# Mengurangi setiap digit di Bass dan Trebel dengan level_offset
bass_next_updated = ''.join(str(int(char) - level_offset) for char in bass_next if char.isdigit())
trebel_next_updated = ''.join(str(int(char) - level_offset) for char in trebel_next if char.isdigit())
# Update data yang sudah diubah pada level_gn berikutnya
cursor.execute("""
UPDATE gn_biru
SET Bass = ?, Trebel = ?
WHERE Level_Gn = ?
""", (bass_next_updated, trebel_next_updated, level_gn_next))
# Commit perubahan dan tutup koneksi
conn.commit()
conn.close()
# Contoh penggunaan fungsi
level_gn_current = 1 # Contoh level_gn_current
update_gn_biru(level_gn_current)
```
### Penjelasan Kode:
1. **Koneksi Database**: Program menghubungkan ke database `DATAMUSIK.db` untuk mengakses tabel `gn_biru`.
2. **Mengambil Data Awal**: Data **Bass** dan **Trebel** dari **level_gn_current** diambil terlebih dahulu sebagai referensi awal.
3. **Looping untuk Level Berikutnya**: Kemudian, dilakukan looping dari level **level_gn_current + 1** hingga **level_gn_current + 11**. Pada setiap iterasi:
- Data dari level tersebut diambil.
- Setiap digit dalam kolom **Bass** dan **Trebel** akan dikurangi dengan angka selisih (yaitu level_gn berikutnya - level_gn_current).
- Setelah data diperbarui, nilai tersebut disimpan kembali ke tabel dengan `UPDATE`.
4. **Commit dan Close**: Setelah seluruh data diperbarui, perubahan disimpan dengan `commit()` dan koneksi ditutup.
### Penyesuaian:
Jika format atau struktur data pada kolom **Bass** dan **Trebel** lebih kompleks (misalnya terdapat karakter non-angka), maka fungsi ini dapat dimodifikasi untuk menangani situasi tersebut.
Apakah logika ini sudah sesuai dengan yang diharapkan, atau perlu ada penyesuaian lebih lanjut?
Tolong applikasikan kode berikut:
import sqlite3
def update_gn_biru(level_gn_current):
# Membuka koneksi ke database
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Ambil data dari level_gn_current untuk dijadikan referensi
cursor.execute("SELECT Bass, Trebel FROM gn_biru WHERE Level_Gn = ?", (level_gn_current,))
result = cursor.fetchone()
if result is None:
print(f"Level_Gn {level_gn_current} tidak ditemukan.")
return
bass_current, trebel_current = result
# Loop melalui level berikutnya dari level_gn_current + 1 hingga level_gn_current + 11
for level_offset in range(1, 12):
level_gn_next = level_gn_current + level_offset
# Ambil data Bass dan Trebel dari level_gn berikutnya
cursor.execute("SELECT Bass, Trebel FROM gn_biru WHERE Level_Gn = ?", (level_gn_next,))
result_next = cursor.fetchone()
if result_next is None:
print(f"Level_Gn {level_gn_next} tidak ditemukan.")
continue
bass_next, trebel_next = result_next
# Mengurangi setiap digit di Bass dan Trebel dengan level_offset
bass_next_updated = ''.join(str(int(char) - level_offset) for char in bass_next if char.isdigit())
trebel_next_updated = ''.join(str(int(char) - level_offset) for char in trebel_next if char.isdigit())
# Update data yang sudah diubah pada level_gn berikutnya
cursor.execute("""
UPDATE gn_biru
SET Bass = ?, Trebel = ?
WHERE Level_Gn = ?
""", (bass_next_updated, trebel_next_updated, level_gn_next))
# Commit perubahan dan tutup koneksi
conn.commit()
conn.close()
# Contoh penggunaan fungsi
level_gn_current = 1 # Contoh level_gn_current
update_gn_biru(level_gn_current)
Terhadap kode yang ini:
import tkinter as tk
from tkinter import ttk
import sqlite3
root = tk.Tk()
root.title("Pilihan Nada")
root.geometry("600x400")
# 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)
# 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):
# Koneksi ke database
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 = data[0]
bass_2 = data[2]
bass_3 = data[4]
# 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]
# Frame untuk ID dan progres
frame_top = tk.Frame(root)
frame_top.pack(pady=10)
# 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()
Agar supaya data yang terpilih baik data Bass maupun data Trebel di setiap level_gn yang berbeda dapat ditampilkan berdasarkan level_gn, id, progres, dan mode, ditampilkan pada entry yang sesuai.
Berikut adalah penggabungan dari kedua bagian kode yang Anda berikan. Saya akan menjelaskan bagaimana kode pembaruan data di database dan tampilan GUI bekerja bersama untuk memungkinkan pengguna memilih `Level_Gn`, `ID`, `Progres`, dan `Mode`, kemudian menampilkan dan memperbarui data `Bass` dan `Trebel` yang relevan.
```python
import tkinter as tk
from tkinter import ttk
import sqlite3
root = tk.Tk()
root.title("Pilihan Nada")
root.geometry("600x400")
# 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)
# 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):
# Koneksi ke database
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 = data[0]
bass_2 = data[2]
bass_3 = data[4]
# Pengaturan Trebel berdasarkan progres dan mode
if progres == 1:
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]
# Frame untuk ID dan progres
frame_top = tk.Frame(root)
frame_top.pack(pady=10)
# 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 menampilkan hasil Bass dan Trebel
frame_bottom = tk.Frame(root)
frame_bottom.pack(pady=20)
# Bass 1
label_bass_1 = tk.Label(frame_bottom, text="Bass 1:")
label_bass_1.grid(row=0, column=0, padx=10, pady=5)
entry_bass_1 = tk.Entry(frame_bottom)
entry_bass_1.grid(row=0, column=1, padx=10, pady=5)
# Trebel 1
label_trebel_1 = tk.Label(frame_bottom, text="Trebel 1:")
label_trebel_1.grid(row=1, column=0, padx=10, pady=5)
entry_trebel_1 = tk.Entry(frame_bottom)
entry_trebel_1.grid(row=1, column=1, padx=10, pady=5)
# Bass 2
label_bass_2 = tk.Label(frame_bottom, text="Bass 2:")
label_bass_2.grid(row=2, column=0, padx=10, pady=5)
entry_bass_2 = tk.Entry(frame_bottom)
entry_bass_2.grid(row=2, column=1, padx=10, pady=5)
# Trebel 2
label_trebel_2 = tk.Label(frame_bottom, text="Trebel 2:")
label_trebel_2.grid(row=3, column=0, padx=10, pady=5)
entry_trebel_2 = tk.Entry(frame_bottom)
entry_trebel_2.grid(row=3, column=1, padx=10, pady=5)
# Bass 3
label_bass_3 = tk.Label(frame_bottom, text="Bass 3:")
label_bass_3.grid(row=4, column=0, padx=10, pady=5)
entry_bass_3 = tk.Entry(frame_bottom)
entry_bass_3.grid(row=4, column=1, padx=10, pady=5)
# Tombol untuk memanggil fungsi pilih_nada
tombol_pilih_nada = tk.Button(root, text="Pilih Nada", bg="blue", fg="white", command=pilih_nada)
tombol_pilih_nada.pack(pady=20)
root.mainloop()
Penjelasan tambahan:
1. Frame Top berisi input Entry untuk ID dan level, serta Combobox untuk progres dan mode.
2. Frame Bottom berisi beberapa Entry untuk menampilkan hasil dari Bass dan Trebel yang diambil dari database setelah pengguna memilih nada.
3. Tombol "Pilih Nada" akan menjalankan fungsi pilih_nada() yang mengambil data dari database dan menampilkan hasilnya pada Entry sesuai dengan logika mode dan progres yang telah dibuat.Dengan pengaturan ini, aplikasi dapat menampilkan dan memanipulasi data Bass dan Trebel sesuai dengan mode, progres, dan level yang dipilih.
Jadi setiap data yang terpilih yaitu bila data Bass yang terpilih di level_gn berikutnya maka data Bass tersebut akan berubah (berkurang) menurut level_gn berikutnya saja, lalu bila data Bass yang terpilih di level_gn current maka data Bass tersebut akan tetap pada setiap progres, dan mode.
Sedangkan setiap data yang terpilih yaitu bila data Trebel yang terpilih di level_gn berikutnya maka data Trebel tersebut akan berubah (berkurang) menurut level_gn berikutnya, progres, dan mode, lalu bila data Trebel yang terpilih di level_gn current maka data Trebel tersebut akan berubah (berkurang) berdasarkan progres, dan mode
.
Berikut adalah penjelasan dari logika yang kamu jelaskan mengenai pengambilan dan perubahan data **Bass** dan **Trebel** pada level_gn, progres, dan mode:
### **Logika untuk Data Bass:**
1. **Level_Gn Current (Saat Ini):**
- Ketika data **Bass** terpilih pada **Level_Gn current**, data **Bass** tersebut **tetap sama** di semua progres dan mode.
- Artinya, tidak ada perubahan pada data Bass untuk level yang sedang aktif di progres manapun, meskipun mode berubah.
2. **Level_Gn Berikutnya:**
- Ketika data **Bass** terpilih pada **Level_Gn berikutnya** (Level setelah current), data **Bass** tersebut akan **berkurang**.
- Pengurangannya hanya berdasarkan **Level_Gn** berikutnya saja, tanpa terpengaruh progres atau mode.
- Jadi, setiap perubahan data Bass hanya terjadi pada perpindahan ke Level_Gn yang baru, dan tidak dipengaruhi oleh progres atau mode.
### **Logika untuk Data Trebel:**
1. **Level_Gn Current (Saat Ini):**
- Ketika data **Trebel** terpilih pada **Level_Gn current**, data **Trebel** tersebut akan **berubah** sesuai dengan **progres dan mode** yang dipilih.
- Artinya, meskipun Level_Gn tidak berubah, data Trebel akan tetap berubah sesuai dengan progres atau mode yang aktif pada saat itu.
2. **Level_Gn Berikutnya:**
- Ketika data **Trebel** terpilih pada **Level_Gn berikutnya**, data **Trebel** akan **berkurang**.
- Pengurangannya didasarkan pada **Level_Gn berikutnya**, serta dipengaruhi oleh **progres** dan **mode**.
- Jadi, selain dipengaruhi oleh Level_Gn yang baru, data Trebel juga akan mengalami perubahan tambahan berdasarkan progres dan mode yang sedang aktif.
### **Ringkasan:**
- **Bass:**
- Tidak berubah pada level_gn current di setiap progres dan mode.
- Berkurang pada level_gn berikutnya tanpa memperhatikan progres dan mode.
- **Trebel:**
- Berubah sesuai progres dan mode pada level_gn current.
- Berkurang pada level_gn berikutnya, dan perubahan ini dipengaruhi juga oleh progres dan mode.
Untuk implementasinya, kita perlu memastikan bahwa logika ini diterapkan saat pengguna berpindah antara level_gn, progres, dan mode yang berbeda. Apakah sudah ada aturan yang lebih spesifik terkait bagaimana data ini berubah, seperti karakter angka yang dikurangi, atau detail lain yang harus diperhatikan?
Pada kode berikut ini:
import tkinter as tk
from tkinter import ttk
import sqlite3
root = tk.Tk()
root.title("Pilihan Nada")
root.geometry("600x400")
def update_gn_biru(level_gn_current):
# Membuka koneksi ke database
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Ambil data dari level_gn_current untuk dijadikan referensi
cursor.execute("SELECT Bass, Trebel FROM gn_biru WHERE Level_Gn = ?", (level_gn_current,))
result = cursor.fetchone()
if result is None:
print(f"Level_Gn {level_gn_current} tidak ditemukan.")
return
bass_current, trebel_current = result
# Loop melalui level berikutnya dari level_gn_current + 1 hingga level_gn_current + 11
for level_offset in range(1, 12):
level_gn_next = level_gn_current + level_offset
# Ambil data Bass dan Trebel dari level_gn berikutnya
cursor.execute("SELECT Bass, Trebel FROM gn_biru WHERE Level_Gn = ?", (level_gn_next,))
result_next = cursor.fetchone()
if result_next is None:
print(f"Level_Gn {level_gn_next} tidak ditemukan.")
continue
bass_next, trebel_next = result_next
# Mengurangi setiap digit di Bass dan Trebel dengan level_offset
bass_next_updated = ''.join(str(int(char) - level_offset) for char in bass_next if char.isdigit())
trebel_next_updated = ''.join(str(int(char) - level_offset) for char in trebel_next if char.isdigit())
# Update data yang sudah diubah pada level_gn berikutnya
cursor.execute("""
UPDATE gn_biru
SET Bass = ?, Trebel = ?
WHERE Level_Gn = ?
""", (bass_next_updated, trebel_next_updated, level_gn_next))
# Commit perubahan dan tutup koneksi
conn.commit()
conn.close()
# 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()
level_offset = int(entry_level_gn_next.get()) - level_gn_selected
# Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected
result = level_gn(id_selected, progres_selected, mode_selected, level_offset)
# 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_offset):
# Koneksi ke database
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()
if data is None:
print(f"Data untuk ID {id} tidak ditemukan.")
return {"Bass_1": "", "Trebel_1": "", "Bass_2": "", "Trebel_2": "", "Bass_3": ""}
bass_1 = data[0]
bass_2 = data[2]
bass_3 = data[4]
# 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'), level_offset)
trebel_2 = adjust_id_trebel_progres2_naik_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), level_offset)
elif mode == "turun":
trebel_1 = adjust_id_trebel_progres2_turun_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), level_offset)
trebel_2 = adjust_id_trebel_progres2_turun_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), level_offset)
elif progres == 3:
if mode == "naik":
trebel_1 = adjust_id_trebel_progres3_naik_value(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), level_offset)
trebel_2 = adjust_id_trebel_progres3_naik_value(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), level_offset)
elif mode == "turun":
trebel_1 = adjust_id_trebel_progres3_turun_value(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), level_offset)
trebel_2 = adjust_id_trebel_progres3_turun_value(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), level_offset)
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
# Frame untuk ID dan progres
frame_top = tk.Frame(root)
frame_top.pack(pady=10)
# 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_level_gn_next = tk.Label(frame_top, text="Level Gn Next:")
label_level_gn_next.grid(row=2, column=0, padx=0, pady=7)
entry_level_gn_next = tk.Entry(frame_top)
entry_level_gn_next.grid(row=2, column=1, padx=0, pady=7)
label_id_selected = tk.Label(frame_top, text="ID:")
label_id_selected.grid(row=3, column=0, padx=0, pady=7)
entry_id = tk.Entry(frame_top)
entry_id.grid(row=3, column=1, padx=0, pady=7)
label_progres = tk.Label(frame_top, text="Progres:")
label_progres.grid(row=4, 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=4, column=1, padx=0, pady=7)
label_mode = tk.Label(frame_top, text="Mode:")
label_mode.grid(row=5, 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=5, column=1, padx=0, pady=7)
# Frame untuk menampilkan hasil Bass dan Trebel
frame_bottom = tk.Frame(root)
frame_bottom.pack(pady=20)
# Bass 1
label_bass_1 = tk.Label(frame_bottom, text="Bass 1:")
label_bass_1.grid(row=0, column=0, padx=10, pady=5)
entry_bass_1 = tk.Entry(frame_bottom)
entry_bass_1.grid(row=0, column=1, padx=10, pady=5)
# Trebel 1
label_trebel_1 = tk.Label(frame_bottom, text="Trebel 1:")
label_trebel_1.grid(row=1, column=0, padx=10, pady=5)
entry_trebel_1 = tk.Entry(frame_bottom)
entry_trebel_1.grid(row=1, column=1, padx=10, pady=5)
# Bass 2
label_bass_2 = tk.Label(frame_bottom, text="Bass 2:")
label_bass_2.grid(row=2, column=0, padx=10, pady=5)
entry_bass_2 = tk.Entry(frame_bottom)
entry_bass_2.grid(row=2, column=1, padx=10, pady=5)
# Trebel 2
label_trebel_2 = tk.Label(frame_bottom, text="Trebel 2:")
label_trebel_2.grid(row=3, column=0, padx=10, pady=5)
entry_trebel_2 = tk.Entry(frame_bottom)
entry_trebel_2.grid(row=3, column=1, padx=10, pady=5)
# Bass 3
label_bass_3 = tk.Label(frame_bottom, text="Bass 3:")
label_bass_3.grid(row=4, column=0, padx=10, pady=5)
entry_bass_3 = tk.Entry(frame_bottom)
entry_bass_3.grid(row=4, column=1, padx=10, pady=5)
# Tombol Pilih Nada
btn_pilih_nada = tk.Button(root, text="Pilih Nada", command=pilih_nada)
btn_pilih_nada.pack(pady=10)
# Menjalankan aplikasi
root.mainloop()
Ketika user telah selesai menginput di salah satu level_gn dan ia akan lanjut menginput di level_gn berikutnya, maka apakah cukup hanya satu buah entry saja yaitu entry_level_gn untuk lanjut ke level_gn berikutnya, atau harus ada 2 buah entry level_gn seperti level_gn_current dan level_gn_next, di mana data yang terpilih baik data Bass maupun data Trebel di setiap level_gn yang berbeda dapat ditampilkan berdasarkan level_gn, id, progres, dan mode, ditampilkan pada entry yang sesuai. Pada tabel gn_biru memiliki level_gn sebanyak 12 yang dimulai dari level_gn 1 hingga level_gn 12. Data yang ada pada tabel gn_biru tersebut bila user memilih salah satu data dari sebuah sel katakanlah user menginput level_gn = 1 maka level_gn 1 itu adalah sebagai level_gn_current, lalu di level_gn berikutnya yaitu level_gn_current +1 maka semua data di setiap digit akan berkurang 1 baik data Bass maupun Trebel, dan seterusnya hingga bila level_gn berikutnya adalah level_gn_current +11 maka semua data di setiap digit akan berkurang 11 baik data Bass maupun Trebel.
Modifikasi data pada tabel `gn_biru` di mana ketika user memilih suatu **level_gn_current**, kemudian pada **level_gn berikutnya** (yaitu level_gn_current + 1, + 2, dst.) setiap digit dari data Bass maupun Trebel akan berkurang sesuai dengan selisih level_gn tersebut,
Pada kasus ini, penggunaan satu atau dua `Entry` untuk mengelola level_gn sangat bergantung pada alur logika aplikasi yang ingin diimplementasikan. Saya akan memberikan dua skenario umum:
### 1. Menggunakan **Satu Entry (entry_level_gn)**
Jika tujuannya adalah hanya untuk memproses satu level_gn pada satu waktu, maka menggunakan satu `Entry` untuk level_gn sudah cukup. Misalnya, saat pengguna mengisi `entry_level_gn` dengan sebuah nilai dan kemudian menekan tombol "Pilih Nada", aplikasi akan memproses dan menampilkan data untuk level_gn tersebut (baik Bass maupun Trebel).
Pada skenario ini, jika pengguna ingin memproses level_gn berikutnya, mereka hanya perlu mengganti inputan di `entry_level_gn` secara manual, dan aplikasi akan mengambil data untuk level_gn yang baru diinputkan. Proses ini dilakukan satu per satu, level demi level.
**Keuntungan**:
- Simpler untuk pengguna yang hanya fokus pada satu level_gn saat satu waktu.
- Antarmuka lebih bersih dan sederhana.
**Implementasi:**
```python
level_gn_selected = int(entry_level_gn.get())
# Proses pengambilan data untuk level_gn ini
```
### 2. Menggunakan **Dua Entry (entry_level_gn_current dan entry_level_gn_next)**
Jika tujuan aplikasi adalah untuk membandingkan dua level_gn secara bersamaan atau melakukan tindakan yang melibatkan dua level_gn (misalnya, menghitung perbedaan atau menampilkan data Bass/Trebel dari dua level_gn yang berbeda secara berurutan), maka penggunaan dua `Entry` (current dan next) bisa lebih efektif.
Pada skenario ini, pengguna bisa memasukkan level_gn_current (yang sedang aktif) dan level_gn_next (level yang akan datang). Hal ini memungkinkan aplikasi untuk mengambil data dari kedua level_gn dan menampilkannya sekaligus, sehingga pengguna bisa melihat progresnya atau perubahan antara level-level tersebut.
**Keuntungan**:
- Berguna jika pengguna ingin melakukan perbandingan antara dua level_gn.
- Lebih fleksibel untuk proses yang memerlukan multi-level input (seperti pengurangan level atau perbandingan data).
**Implementasi:**
```python
level_gn_current = int(entry_level_gn_current.get())
level_gn_next = int(entry_level_gn_next.get())
# Proses pengambilan data untuk level_gn_current dan level_gn_next
```
Pada implementasi ini, misalnya Anda akan mengambil data Bass dan Trebel untuk `level_gn_current`, kemudian memperbarui `level_gn_next` berdasarkan offset atau perbedaan tertentu. Kedua level tersebut akan ditampilkan bersamaan di layar.
---
### Pilihan yang Tepat:
Jika pengguna hanya fokus menginput dan melihat data satu level pada satu waktu, maka **cukup menggunakan satu Entry** saja (seperti `entry_level_gn`). Namun, jika pengguna ingin melakukan tindakan yang melibatkan dua level (misalnya, membandingkan data antara level saat ini dan level berikutnya), maka **dua Entry** (`entry_level_gn_current` dan `entry_level_gn_next`) lebih direkomendasikan.
Jadi, pilihan Anda harus menyesuaikan dengan kebutuhan fungsionalitas aplikasi dan bagaimana penggunaannya.
Kalau begitu, kita pakai yang menggunakan satu entry saja yaitu entry_level_gn dari semua level_gn yang ada.
Namun untuk level_gn yang berbeda perlu ditentukan nilai data terpilih pada setiap level_gn yang berbeda tersebut dimulai dari level_gn 1 hingga level_gn 12 (level_gn ada sebanyak 12) .
Maksud saya, pada tabel gn_biru memiliki level_gn sebanyak 12 yang dimulai dari level_gn 1 hingga level_gn 12. Aturan level_gn adalah berikut ini:
1. Level_gn 1 adalah id 1
2. Level gn 2 adalah id 2
3. Level_gn 3 adalah id 3
4. Level_gn 4 adalah id 1 - 1 setiap digit data Bass maupun trebel
5. Level gn 5 adalah id 2 - 1 setiap digit data Bass maupun trebel
6. Level_gn 6 adalah id 3 -1 setiap digit data Bass maupun trebel
7. Level_gn 7 adalah id 1 - 2 setiap digit data Bass maupun trebel
8. Level gn 8 adalah id 2 - 2 setiap digit data Bass maupun trebel
9. Level_gn 9 adalah id 3 - 2 setiap digit data Bass maupun trebel.
10. Level_gn 10 adalah id 1 - 3 setiap digit data Bass maupun trebel
11. Level gn 11 adalah id 2 - 3 setiap digit data Bass maupun trebel
12. Level_gn 12 adalah id 3 - 3 setiap digit data Bass maupun trebel.
Data yang ada pada tabel gn_biru tersebut bila user memilih salah satu data dari sebuah sel katakanlah user menginput level_gn = 1 untuk id 1 maka level_gn 1 itu adalah sebagai level_gn_current, lalu bila di level_gn 4 yaitu level_gn_current + 3 maka semua data id 1 di setiap digit akan berkurang 1 baik data Bass maupun Trebel, lalu bila di level_gn 7 yaitu level_gn_current + 6 maka semua data id 1 di setiap digit akan berkurang 2 baik data Bass maupun Trebel, dan seterusnya bila level_gn berikutnya adalah di level_gn 10 yaitu level_gn_current + 9 maka semua data id 1 di setiap digit akan berkurang 3 baik data Bass maupun Trebel.
Hal yang sama di atas berlaku untuk data di baris id 2 dan id 3.
Baik, kita dapat menerapkan logika untuk setiap perubahan nilai pada tabel `gn_biru` berdasarkan aturan level_gn yang Anda berikan. Secara umum, logika ini mencakup manipulasi data Bass dan Trebel berdasarkan **ID** dan **level_gn_current**, kemudian memodifikasi data tersebut sesuai dengan level_gn yang terkait (mengurangi setiap digit berdasarkan aturan level_gn).
Untuk implementasi ini, kita bisa menggunakan satu entry saja, yaitu `entry_level_gn`, yang memungkinkan user untuk memilih level_gn tertentu. Kemudian, berdasarkan level_gn yang dipilih, kita akan memperbarui data yang ada sesuai aturan.
Berikut langkah-langkah yang bisa diimplementasikan:
### 1. Entry untuk level_gn
Buatlah satu entry di mana user bisa memilih level_gn dari 1 hingga 12.
```python
entry_level_gn = ttk.Combobox(frame, values=list(range(1, 13)), state="readonly")
entry_level_gn.grid(row=1, column=0)
```
### 2. Pengambilan data berdasarkan ID dan level_gn_current
Setelah user memilih level_gn, kita akan mengambil **ID**, dan **data Bass dan Trebel** yang relevan. Misalkan level_gn_current adalah 1, kita ambil data dari ID 1.
```python
def get_data_by_level(level_gn):
# Misalkan data ini adalah contoh dari database atau array
data_bass_trebel = {
1: {'Bass': '1234', 'Trebel': '5678'},
2: {'Bass': '2345', 'Trebel': '6789'},
3: {'Bass': '3456', 'Trebel': '7890'}
}
if level_gn in data_bass_trebel:
return data_bass_trebel[level_gn]
return None
```
### 3. Mengurangi setiap digit pada level_gn tertentu
Berikutnya, kita terapkan pengurangan digit pada Bass dan Trebel sesuai dengan level_gn yang dipilih. Ini dapat dilakukan dengan iterasi pada setiap karakter string Bass dan Trebel.
```python
def reduce_digits(data, reduction):
bass = data['Bass']
trebel = data['Trebel']
reduced_bass = ''.join([str(max(int(digit) - reduction, 0)) for digit in bass])
reduced_trebel = ''.join([str(max(int(digit) - reduction, 0)) for digit in trebel])
return {'Bass': reduced_bass, 'Trebel': reduced_trebel}
```
### 4. Aturan untuk level_gn
Aturan ini akan menentukan berapa banyak pengurangan untuk setiap level_gn. Pengurangan ini diterapkan pada data Bass dan Trebel berdasarkan ID yang dipilih.
```python
def apply_level_gn_logic(level_gn_current):
reduction_map = {
4: 1, 5: 1, 6: 1, # Level_gn 4, 5, 6 -> Kurangi 1
7: 2, 8: 2, 9: 2, # Level_gn 7, 8, 9 -> Kurangi 2
10: 3, 11: 3, 12: 3 # Level_gn 10, 11, 12 -> Kurangi 3
}
# Ambil data berdasarkan level_gn_current
data = get_data_by_level(level_gn_current)
if not data:
return None
modified_data = {}
# Iterasi melalui level_gn untuk menerapkan logika
for level_gn in range(level_gn_current, 13):
if level_gn in reduction_map:
modified_data[level_gn] = reduce_digits(data, reduction_map[level_gn])
return modified_data
```
### 5. Implementasi pada event `Combobox` dan output data
Pada saat user memilih level_gn di `Combobox`, kita terapkan fungsi `apply_level_gn_logic()` untuk memperbarui data dan menampilkannya.
```python
def on_level_gn_selected(event):
level_gn_current = int(entry_level_gn.get())
modified_data = apply_level_gn_logic(level_gn_current)
if modified_data:
# Tampilkan hasil yang dimodifikasi di sini, misalnya dalam bentuk Label atau Text
for level, data in modified_data.items():
print(f"Level_gn {level}: Bass = {data['Bass']}, Trebel = {data['Trebel']}")
else:
print("Data tidak ditemukan.")
entry_level_gn.bind("<<ComboboxSelected>>", on_level_gn_selected)
```
### Penjelasan:
1. **get_data_by_level()**: Fungsi ini mengambil data dari database atau struktur data yang telah ditentukan untuk **Bass** dan **Trebel** berdasarkan **ID**.
2. **reduce_digits()**: Fungsi ini mengurangi setiap digit dari Bass dan Trebel sesuai aturan level_gn.
3. **apply_level_gn_logic()**: Fungsi ini mengaplikasikan aturan untuk level_gn 4 hingga 12, di mana pengurangan digit dilakukan berdasarkan level_gn_current.
4. **on_level_gn_selected()**: Fungsi ini dieksekusi saat user memilih level_gn dari Combobox, dan menampilkan hasil yang telah dimodifikasi.
Dengan pendekatan ini, Anda bisa menampilkan data yang disesuaikan untuk setiap level_gn yang dipilih, serta mengatur aturan pengurangan digit secara otomatis.
Kita perbaiki kembali aturan level-gn yang benar untuk data tabel gn_biru, sebagai berikut:
Pada tabel gn_biru memiliki level_gn sebanyak 12 yang dimulai dari level_gn 1 hingga level_gn 12. Aturan level_gn adalah berikut ini:
1. Level_gn 1 adalah id 3
2. Level gn 2 adalah id 2.
3. Level_gn 3 adalah id 1.
4. Level_gn 4 adalah id 3 - 1 setiap digit data Bass maupun trebel.
5. Level gn 5 adalah id 2 - 1 setiap digit data Bass maupun trebel.
6. Level_gn 6 adalah id 1 -1 setiap digit data Bass maupun trebel.
7. Level_gn 7 adalah id 3 - 2 setiap digit data Bass maupun trebel.
8. Level gn 8 adalah id 2 - 2 setiap digit data Bass maupun trebel.
9. Level_gn 9 adalah id 1 - 2 setiap digit data Bass maupun trebel.
10. Level_gn 10 adalah id 3 - 3 setiap digit data Bass maupun trebel.
11. Level gn 11 adalah id 2 - 3 setiap digit data Bass maupun trebel.
12. Level_gn 12 adalah id 1 - 3 setiap digit data Bass maupun trebel.
Data yang ada pada tabel gn_biru tersebut di baris id 3 untuk level_gn 1, 4, 7, 10, .bila user memilih salah satu data dari sebuah sel katakanlah user menginput level_gn = 1 untuk id 3 maka level_gn 1 itu adalah sebagai level_gn_current, lalu bila di level_gn 4 yaitu level_gn_current + 3 maka semua data id 3 di setiap digit akan berkurang 1 baik data Bass maupun Trebel, lalu bila di level_gn 7 yaitu level_gn_current + 6 maka semua data id 3 di setiap digit akan berkurang 2 baik data Bass maupun Trebel, dan seterusnya bila level_gn berikutnya adalah di level_gn 10 yaitu level_gn_current + 9 maka semua data id 3 di setiap digit akan berkurang 3 baik data Bass maupun Trebel. Hal yang sama di atas berlaku untuk data di baris id 2 untuk level_gn 2, 5, 8, 11, dan baris id 1 untuk level_gn 3, 6, 9, 12.
Baik, sekarang kita akan memperbaiki aturan `level_gn` sesuai dengan logika yang baru pada tabel `gn_biru`. Berikut logika yang akan diterapkan:
### Aturan `level_gn` untuk tabel `gn_biru`:
- Tabel `gn_biru` memiliki 12 `level_gn`.
- `level_gn` 1, 4, 7, 10 menggunakan data dari **ID 3**.
- `level_gn` 2, 5, 8, 11 menggunakan data dari **ID 2**.
- `level_gn` 3, 6, 9, 12 menggunakan data dari **ID 1**.
- Setiap kali `level_gn` naik, data Bass dan Trebel akan dikurangi sesuai aturan:
- **Level_gn 1, 2, 3**: Tidak ada perubahan (data asli dari ID 3, 2, dan 1).
- **Level_gn 4, 5, 6**: Kurangi 1 pada setiap digit data Bass dan Trebel.
- **Level_gn 7, 8, 9**: Kurangi 2 pada setiap digit data Bass dan Trebel.
- **Level_gn 10, 11, 12**: Kurangi 3 pada setiap digit data Bass dan Trebel.
Mari kita terapkan aturan ini dalam kode Python yang sesuai.
### 1. Fungsi untuk mendapatkan data berdasarkan ID
Kita akan membuat fungsi untuk mengambil data Bass dan Trebel berdasarkan **ID** yang sesuai dengan level_gn.
```python
def get_data_by_id(id):
# Contoh data dari tabel gn_biru
data_bass_trebel = {
1: {'Bass': '3456', 'Trebel': '7890'}, # Data ID 1
2: {'Bass': '2345', 'Trebel': '6789'}, # Data ID 2
3: {'Bass': '1234', 'Trebel': '5678'} # Data ID 3
}
return data_bass_trebel.get(id)
```
### 2. Fungsi untuk mengurangi setiap digit Bass dan Trebel
Fungsi ini mengurangi setiap digit dari Bass dan Trebel berdasarkan level_gn yang dipilih.
```python
def reduce_digits(data, reduction):
bass = data['Bass']
trebel = data['Trebel']
# Kurangi setiap digit
reduced_bass = ''.join([str(max(int(digit) - reduction, 0)) for digit in bass])
reduced_trebel = ''.join([str(max(int(digit) - reduction, 0)) for digit in trebel])
return {'Bass': reduced_bass, 'Trebel': reduced_trebel}
```
### 3. Aturan pengurangan digit berdasarkan level_gn
Kita akan menerapkan aturan bahwa setiap digit akan dikurangi pada level_gn tertentu. Pengurangan ini tergantung pada level_gn yang dipilih oleh user.
```python
def apply_level_gn_logic(level_gn):
# Aturan level_gn sesuai dengan ID
level_gn_to_id_map = {
1: 3, 2: 2, 3: 1, # Level_gn 1-3 (ID asli)
4: 3, 5: 2, 6: 1, # Level_gn 4-6 (Kurangi 1)
7: 3, 8: 2, 9: 1, # Level_gn 7-9 (Kurangi 2)
10: 3, 11: 2, 12: 1 # Level_gn 10-12 (Kurangi 3)
}
# Tentukan pengurangan digit berdasarkan level_gn
reduction_map = {
1: 0, 2: 0, 3: 0, # Level_gn 1-3 (tidak ada pengurangan)
4: 1, 5: 1, 6: 1, # Level_gn 4-6 (kurangi 1)
7: 2, 8: 2, 9: 2, # Level_gn 7-9 (kurangi 2)
10: 3, 11: 3, 12: 3 # Level_gn 10-12 (kurangi 3)
}
# Ambil ID berdasarkan level_gn
id = level_gn_to_id_map.get(level_gn)
if id is None:
return None # Jika level_gn tidak valid
# Ambil data dari tabel berdasarkan ID
data = get_data_by_id(id)
# Kurangi data sesuai aturan
reduction = reduction_map.get(level_gn, 0)
modified_data = reduce_digits(data, reduction)
return modified_data
```
### 4. Event handler untuk level_gn yang dipilih oleh user
Ketika user memilih level_gn, data akan dimodifikasi berdasarkan aturan yang sudah ditentukan dan hasilnya ditampilkan.
```python
def on_level_gn_selected(event):
level_gn = int(entry_level_gn.get())
modified_data = apply_level_gn_logic(level_gn)
if modified_data:
# Tampilkan hasil modifikasi
print(f"Level_gn {level_gn}: Bass = {modified_data['Bass']}, Trebel = {modified_data['Trebel']}")
else:
print("Data tidak ditemukan.")
# Entry untuk level_gn dengan event binding
entry_level_gn = ttk.Combobox(frame, values=list(range(1, 13)), state="readonly")
entry_level_gn.grid(row=1, column=0)
entry_level_gn.bind("<<ComboboxSelected>>", on_level_gn_selected)
```
### Contoh Penggunaan
Misalkan user memilih **level_gn 4**:
- ID yang digunakan adalah **ID 3** (sesuai aturan level_gn).
- Setiap digit dari Bass dan Trebel akan berkurang 1.
- Data asli Bass = '1234', Trebel = '5678'.
- Setelah pengurangan 1 pada setiap digit:
- Bass menjadi: '0123'.
- Trebel menjadi: '4567'.
Data ini kemudian ditampilkan kepada user setelah mereka memilih level_gn dari Combobox.
### Kesimpulan:
Dengan menggunakan logika ini, Anda dapat dengan mudah mengelola data dalam tabel `gn_biru` dan melakukan pengurangan digit berdasarkan level_gn yang dipilih oleh user. Setiap level_gn mengikuti aturan yang telah Anda tetapkan dan data akan dimodifikasi sesuai dengan level_gn_current.
Jadi sementara sebelum berlanjut lebih jauh, kita perbaiki dulu kode berikut ini:
import tkinter as tk
from tkinter import ttk
import sqlite3
root = tk.Tk()
root.title("Pilihan Nada")
root.geometry("600x400")
# 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)
# 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):
# Koneksi ke database
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 = data[0]
bass_2 = data[2]
bass_3 = data[4]
# 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]
# Frame untuk ID dan progres
frame_top = tk.Frame(root)
frame_top.pack(pady=10)
# 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()
Pada kode tersebut harus ditambahkan fungsi update_level_gn yang sesuai, dan menambahkan tombol validate_button sebagai validasi level_gn untuk id yang sesuai dengan level-gn yang diinputkan.
It appears that your code is almost complete, but it got cut off at the end. I assume you were working on setting up the entry boxes for displaying the bass and trebel data after the selection is made. Let's finish the missing part and make a few adjustments for clarity and proper functionality:
### Here’s the completed and corrected version of the code:
```python
import tkinter as tk
from tkinter import ttk
import sqlite3
root = tk.Tk()
root.title("Pilihan Nada")
root.geometry("600x400")
# 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)
# 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):
# Koneksi ke database
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 = data[0]
bass_2 = data[2]
bass_3 = data[4]
# 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]
# Frame untuk ID dan progres
frame_top = tk.Frame(root)
frame_top.pack(pady=10)
# 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
Ulangi chat kamu yang terakhir pada kode terakhir yang kamu kirim gunakan bahasa Indonesia saja, because I don't understand in English.
Maksud saya, untuk data tabel gn_biru, kita perbaiki dulu kode berikut ini:
import tkinter as tk
from tkinter import ttk
import sqlite3
root = tk.Tk()
root.title("Pilihan Nada")
root.geometry("600x400")
# 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)
# 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):
# Koneksi ke database
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 = data[0]
bass_2 = data[2]
bass_3 = data[4]
# 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]
# Frame untuk ID dan progres
frame_top = tk.Frame(root)
frame_top.pack(pady=10)
# 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()
Pada kode tersebut harus ditambahkan fungsi update_level_gn yang sesuai, dan menambahkan tombol validate_button sebagai validasi level_gn untuk id yang sesuai dengan level-gn yang diinputkan.
Berikut adalah pembaruan kode yang lebih rapi dan dapat digunakan untuk pengolahan tabel `Gn_Biru` dengan fitur yang diinginkan:
```python
import tkinter as tk
from tkinter import ttk
import sqlite3
root = tk.Tk()
root.title("Pilihan Nada")
root.geometry("600x400")
# 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)
# 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):
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
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 = data[0]
bass_2 = data[2]
bass_3 = data[4]
# 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_trebel_progres2_naik(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 1)
trebel_2 = adjust_trebel_progres2_naik(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 1)
elif mode == "turun":
trebel_1 = adjust_trebel_progres2_turun(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 1)
trebel_2 = adjust_trebel_progres2_turun(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 1)
elif progres == 3:
if mode == "naik":
trebel_1 = adjust_trebel_progres3_naik(data[1], ambil_data_trebel(id, 2, 'Trebel_1'), 2)
trebel_2 = adjust_trebel_progres3_naik(data[3], ambil_data_trebel(id, 2, 'Trebel_2'), 2)
elif mode == "turun":
trebel_1 = adjust_trebel_progres3_turun(data[1], ambil_data_trebel(id, 3, 'Trebel_1'), 2)
trebel_2 = adjust_trebel_progres3_turun(data[3], ambil_data_trebel(id, 3, 'Trebel_2'), 2)
conn.close()
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_trebel_progres2_naik(trebel_value, new_id_value, pengurang):
return adjust_trebel(trebel_value, new_id_value, pengurang, -2)
def adjust_trebel_progres2_turun(trebel_value, new_id_value, pengurang):
return adjust_trebel(trebel_value, new_id_value, pengurang, -2)
def adjust_trebel_progres3_naik(trebel_value, new_id_value, pengurang):
return adjust_trebel(trebel_value, new_id_value, pengurang, -3)
def adjust_trebel_progres3_turun(trebel_value, new_id_value, pengurang):
return adjust_trebel(trebel_value, new_id_value, pengurang, -3)
# Fungsi umum untuk penyesuaian trebel
def adjust_trebel(trebel_value, new_id_value, pengurang, adjustment_value):
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) + adjustment_value) 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
# Fungsi untuk mengambil data Trebel dari ID lain
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]
# Frame untuk ID, level, progres, dan mode
frame_top = tk.Frame(root)
frame_top.pack(pady=10)
label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")
label_level_gn_selected.grid(row=1, column=0, padx=5, pady=7)
entry_level_gn = tk.Entry(frame_top)
entry_level_gn.grid(row=1, column=1, padx=5, pady=7)
label_id_selected = tk.Label(frame_top, text="ID:")
label_id_selected.grid(row=2, column=0, padx=5, pady=7)
entry_id = tk.Entry(frame_top)
entry_id.grid(row=2, column=1, padx=5, pady=7)
label_progres = tk.Label(frame_top, text="Progres:")
label_progres.grid(row=3, column=0, padx=5, pady=7)
progres_var = tk.StringVar()
progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var, values=(1, 2, 3))
progres_combobox.grid(row=3, column=1, padx=5, pady=7)
label_mode = tk.Label(frame_top, text="Mode:")
label_mode.grid(row=4, column=0, padx=5, pady=7)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])
mode_combobox.grid(row=4, column=1, padx=5, pady=7)
# Frame untuk hasil input
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
labels = ["Bass_1", "Trebel_1", "Bass_2", "Trebel_2", "Bass_3"]
entries = []
for i, label in enumerate(labels, start=7):
lbl = tk.Label(frame_bottom, text=label)
lbl.grid(row=7, column=i-6, padx=5, pady=5)
entry = tk.Entry(frame_bottom, bg="white")
entry.grid(row=8, column=i-6, padx=5, pady=5)
entries.append(entry)
entry_bass_1, entry_trebel_1, entry_bass_2, entry_trebel_2, entry_bass_3 = entries
root.mainloop()
```
Perubahan yang telah dilakukan:
1. Membuat fungsi `adjust_trebel()` sebagai fungsi umum yang dipanggil oleh semua progres dan mode untuk menyederhanakan logika pengaturan Trebel.
2. Menyederhan
Lanjutkan hingga selesai
Berikut kelanjutan kode tersebut:
```python
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)
# Fungsi utama untuk menjalankan aplikasi tkinter
root.mainloop()
```
Penjelasan tambahan dari kode yang sudah ditulis:
1. **Frame Top dan Bottom**:
- Frame `frame_top` digunakan untuk input ID, Level_Gn, progres, dan mode yang akan digunakan dalam proses pengambilan data nada.
- Frame `frame_bottom` digunakan untuk menampilkan hasil dari Bass dan Trebel berdasarkan input pengguna pada bagian atas.
2. **Fungsi `level_gn()`**:
- Fungsi ini mengatur logika pengambilan data dari database (`Gn_Biru`) dan melakukan modifikasi pada Trebel berdasarkan progres dan mode yang dipilih.
- Pengambilan nilai Trebel dilakukan dari kolom yang sesuai di database, dan modifikasi nilai dilakukan dengan mengurangi angka tertentu (misalnya 1 atau 2) sesuai dengan progres dan mode.
3. **Fungsi Adjust**:
- Fungsi `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` digunakan untuk melakukan modifikasi terhadap nilai Trebel berdasarkan progres dan mode yang dipilih oleh pengguna.
4. **Pengambilan Data dari Database**:
- Fungsi `ambil_data_trebel()` digunakan untuk mengambil data Trebel dari ID lain (target_id) yang berbeda dari ID yang sedang diproses.
5. **Input dan Output**:
- Pengguna memasukkan ID, Level_Gn, progres, dan mode pada bagian atas.
- Hasil dari proses tersebut (nilai Bass dan Trebel) akan ditampilkan pada entry box di bagian bawah.
Aplikasi ini seharusnya bisa dijalankan untuk menampilkan data berdasarkan input pengguna. Jika ada perubahan pada struktur database atau logika yang perlu diperbaiki lebih lanjut, hal tersebut bisa disesuaikan sesuai kebutuhan.
Bersambung ke:
Komentar
Posting Komentar
This Message