LOGIKA YANG DITERAPKAN PADA DATA Trebel DI TABEL Gn_Cyan_Atas, DAN TABEL Sub_Gn_Cyan_Atas
Pada kode, tolong tambahkan fungsionalitas di setiap lwvel_gn yang diinput oleh user. Bila user menginput di entry_level_gn dan memasukkan angka inputan, dan menginput di entry yang lain, yaitu:
1. Bila user menginput level_gn = 1, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 1". Sehingga user harus menginput di entry_id = 1 (tidak boleh menginput angka yang lain, selain 1).
Lalu diteruskan dan ketika user menginput di entry pilih_trebel, maka selanjutnya logika berlangsung.
2. Bila user menginput level_gn = 2, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 2". Sehingga user harus menginput di entry_id = 2 (tidak boleh menginput angka yang lain, selain 2).
Lalu diteruskan dan ketika user menginput di entry pilih_trebel, maka selanjutnya logika berlangsung.
3. Bila user menginput level_gn = 3, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 3". Sehingga user harus menginput di entry_id = 3 (tidak boleh menginput angka yang lain, selain 3)..
Lalu diteruskan dan ketika user menginput di entry pilih_trebel, maka selanjutnya logika berlangsung.
4. Bila user menginput level_gn = 4, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 1". Sehingga user harus menginput di entry_id = 1 (tidak boleh menginput angka yang lain, selain 1).
Lalu diteruskan dan ketika user menginput di entry pilih_trebel, maka selanjutnya logika berlangsung.
5. Bila user menginput level_gn = 5, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 3". Sehingga user harus menginput di entry_id = 3 (tidak boleh menginput angka yang lain, selain 3).
Lalu diteruskan dan ketika user menginput di entry pilih_trebel, maka selanjutnya logika berlangsung.
6. Bila user menginput level_gn = 6, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 1". Sehingga user harus menginput di entry_id = 1 (tidak boleh menginput angka yang lain, selain 1).
Lalu diteruskan dan ketika user menginput di entry pilih_trebel, maka selanjutnya logika berlangsung.
7. Bila user menginput level_gn = 7, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 2". Sehingga user harus menginput di entry_id = 2 (tidak boleh menginput angka yang lain, selain 2)..
Lalu diteruskan dan ketika user menginput di entry pilih_trebel, maka selanjutnya logika berlangsung.
8. Bila user menginput level_gn = 8, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 3". Sehingga user harus menginput di entry_id = 3 (tidak boleh menginput angka yang lain, selain 3).
Lalu diteruskan dan ketika user menginput di entry pilih_trebel, maka selanjutnya logika berlangsung.
9. Bila user menginput level_gn = 9, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 2". Sehingga user harus menginput di entry_id = 2 (tidak boleh menginput angka yang lain, selain 2).
Lalu diteruskan dan ketika user menginput di entry pilih_trebel, maka selanjutnya logika berlangsung.
10. Bila user menginput level_gn = 10, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 3". Sehingga user harus menginput di entry_id = 3 (tidak boleh menginput angka yang lain, selain 3).
Lalu diteruskan dan ketika user menginput di entry pilih_trebel, maka selanjutnya logika berlangsung.
11. Bila user menginput level_gn = 11, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 1". Sehingga user harus menginput di entry_id = 1 (tidak boleh menginput angka yang lain, selain 1)..
Lalu diteruskan dan ketika user menginput di entry pilih_trebel, maka selanjutnya logika berlangsung.
12. Bila user menginput level_gn = 12, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 2". Sehingga user harus menginput di entry_id = 2 (tidak boleh menginput angka yang lain, selain 2).
Lalu diteruskan dan ketika user menginput di entry pilih_trebel, maka selanjutnya logika berlangsung.
Kemudian jika user menginput level_gn diluar range 1 hingga 12 yaitu bila user menginput level_gn = 0, atau level_gn >= 13, maka tampilkan message_box dengan teks pesan "Masukkan input yang benar. \nInput Level Gn adalah 1 hingga 12".
Catatan: Nada Bass cenderung berubah jika ada perubahan level_gn. Sedangkan nada Trebe kerap kali berubah jika ada perubahan progres.
Berikut ini logika yang diterapkan pada data Trebel di tabel Gn_Cyan_Atas, dan tabel Sub_Gn_Cyan_Atas:
Logika pada data Trebel di tabel Gn_Cyan_Atas:
I. Jika data gugus nada yang terpilih dari kolom Trebel pada Gn_Cyan_Atas:
1a. Jika level_gn = 1, atau level_gn = 4, atau level_gn = 6, atau level_gn = 11 (sesuai dengan level_gn data Bass), dan user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5:
jika progres 1, dan jika mode Naik atau Turun:
maka data dari Trebel_1 id 1 menjadi data Trebel_1 id 1, dan data dari Trebel_2 id 1 menjadi data Trebel_2 id 1, dan data dari Trebel_3 id 1 menjadi data Trebel_3 id 1, dan data dari Trebel_4 id 1 menjadi data Trebel_4 id 1, dan data dari Trebel_5 id 1 menjadi data Trebel_5 id 1,
1b. Jika level_gn = 1, atau level_gn = 4, atau level_gn = 6, atau level_gn = 11 (sesuai dengan level_gn data Bass), dan user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5:
jika progres 2 dan jika mode Naik:
maka data dari Trebel_1 id 1 menjadi data Trebel_1 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_1 id 2.
dan data dari Trebel_2 id 1 menjadi data Trebel_2 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_2 id 2.
dan data dari Trebel_3 id 1 menjadi data Trebel_3 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_3 id 2.
dan data dari Trebel_4 id 1 menjadi data Trebel_4 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_4 id 2.
dan data dari Trebel_5 id 1 menjadi data Trebel_5 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_5 id 2.
jika progres 2 dan jika mode Turun:
maka data dari Trebel_1 id 1 menjadi data Trebel_1 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_1 id 3.
dan data dari Trebel_2 id 1 menjadi data Trebel_2 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_2 id 3.
dan data dari Trebel_3 id 1 menjadi data Trebel_3 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_3 id 3.
dan data dari Trebel_4 id 1 menjadi data Trebel_4 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_4 id 3.
dan data dari Trebel_5 id 1 menjadi data Trebel_5 id 1 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_5 id 3.
1c. Jika level_gn = 1, atau level_gn = 4, atau level_gn = 6, atau level_gn = 11 (sesuai dengan level_gn data Bass), dan user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5:
jika progres 3 dan jika mode Naik:
maka data dari Trebel_1 id 1 menjadi data Trebel_1 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_1 id 3.
dan data dari Trebel_2 id 1 menjadi data Trebel_2 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_2 id 3.
dan data dari Trebel_3 id 1 menjadi data Trebel_3 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_3 id 3.
dan data dari Trebel_4 id 1 menjadi data Trebel_4 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_4 id 3.
dan data dari Trebel_5 id 1 menjadi data Trebel_5 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_5 id 3.
jika progres 3 dan jika mode Turun:
maka data dari Trebel_1 id 1 menjadi data Trebel_1 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_1 id 2.
dan data dari Trebel_2 id 1 menjadi data Trebel_2 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_2 id 2.
dan data dari Trebel_3 id 1 menjadi data Trebel_3 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_3 id 2.
dan data dari Trebel_4 id 1 menjadi data Trebel_4 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_4 id 2.
dan data dari Trebel_5 id 1 menjadi data Trebel_5 id 1 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_5 id 2.
2a. Jika level_gn = 2, atau level_gn = 7, atau level_gn = 9, level_gn = 12 (sesuai dengan level_gn data Bass), dan user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5:
dan jika progres 1 dan jika mode Naik atau Turun:
maka data dari Trebel_1 id 2 menjadi data Trebel_1 id 2, dan data dari Trebel_2 id 2 menjadi data Trebel_2 id 2, dan data dari Trebel_3 id 2 menjadi data Trebel_3 id 2, dan data dari Trebel_4 id 2 menjadi data Trebel_4 id 2, dan data dari Trebel_5 id 2 menjadi data Trebel_5 id 2.
2b. Jika level_gn = 2, atau level_gn = 7, atau level_gn = 9, level_gn = 12 (sesuai dengan level_gn data Bass), dan user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5:
jika progres 2 dan jika mode Naik:
maka data dari Trebel_1 id 2 menjadi data Trebel_1 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_1 id 3.
dan data dari Trebel_2 id 2 menjadi data Trebel_2 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_2 id 3.
dan data dari Trebel_3 id 2 menjadi data Trebel_3 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_3 id 3.
dan data dari Trebel_4 id 2 menjadi data Trebel_4 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_4 id 3.
dan data dari Trebel_5 id 2 menjadi data Trebel_5 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_5 id 3.
jika progres 2 dan jika mode Turun:
maka data dari Trebel_1 id 2 menjadi data Trebel_1 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_1 id 1.
dan data dari Trebel_2 id 2 menjadi data Trebel_2 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_2 id 1.
dan data dari Trebel_3 id 2 menjadi data Trebel_3 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_3 id 1.
dan data dari Trebel_4 id 2 menjadi data Trebel_4 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_4 id 1.
dan data dari Trebel_5 id 2 menjadi data Trebel_5 id 2 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_5 id 1.
2c. Jika level_gn = 2, atau level_gn = 7, atau level_gn = 9, level_gn = 12 (sesuai dengan level_gn data Bass), dan user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5:
jika progres 3 dan jika mode Naik:
maka data dari Trebel_1 id 2 menjadi data Trebel_1 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_1 id 1.
dan data dari Trebel_2 id 2 menjadi data Trebel_2 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_2 id 1.
dan data dari Trebel_3 id 2 menjadi data Trebel_3 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_3 id 1.
dan data dari Trebel_4 id 2 menjadi data Trebel_4 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_4 id 1.
dan data dari Trebel_5 id 2 menjadi data Trebel_5 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_5 id 1.
jika progres 3 dan jika mode Turun:
maka data dari Trebel_1 id 2 menjadi data Trebel_1 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_1 id 3.
dan data dari Trebel_2 id 2 menjadi data Trebel_2 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_2 id 3.
dan data dari Trebel_3 id 2 menjadi data Trebel_3 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_3 id 3.
dan data dari Trebel_4 id 2 menjadi data Trebel_4 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_4 id 3.
dan data dari Trebel_5 id 2 menjadi data Trebel_5 id 2 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_5 id 3.
3a. Jika level_gn = 3, atau level_gn = 5, atau level_gn = 8, level_gn = 10 (sesuai dengan level_gn data Bass), dan user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5:
dan jika progres 1 dan jika mode Naik atau Turun:
maka data dari Trebel_1 id 3 menjadi data Trebel_1 id 3, dan data dari Trebel_2 id 3 menjadi data Trebel_2 id 3, dan data dari Trebel_3 id 3 menjadi data Trebel_3 id 3, dan data dari Trebel_4 id 3 menjadi data Trebel_4 id 3, dan data dari Trebel_5 id 3 menjadi data Trebel_5 id 3,
3b. Jika level_gn = 3, atau level_gn = 5, atau level_gn = 8, level_gn = 10 (sesuai dengan level_gn data Bass), dan user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5:
jika progres 2 dan jika mode Naik:
maka data dari Trebel_1 id 3 menjadi data Trebel_1 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_1 id 1.
dan data dari Trebel_2 id 3 menjadi data Trebel_2 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_2 id 1.
dan data dari Trebel_3 id 3 menjadi data Trebel_3 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_3 id 1.
dan data dari Trebel_4 id 3 menjadi data Trebel_4 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_4 id 1.
dan data dari Trebel_5 id 3 menjadi data Trebel_5 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_5 id 1.
jika progres 2 dan jika mode Turun:
maka data dari Trebel_1 id 3 menjadi data Trebel_1 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_1 id 2.
dan data dari Trebel_2 id 3 menjadi data Trebel_2 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_2 id 2.
dan data dari Trebel_3 id 3 menjadi data Trebel_3 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_3 id 2.
dan data dari Trebel_4 id 3 menjadi data Trebel_4 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_4 id 2.
dan data dari Trebel_5 id 3 menjadi data Trebel_5 id 3 yang digit angka datanya dikurang 1 dan kongruen dengan data Trebel_5 id 2.
3c. Jika level_gn = 3, atau level_gn = 5, atau level_gn = 8, level_gn = 10 (sesuai dengan level_gn data Bass), dan user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5:
jika progres 3 dan jika mode Naik:
maka data dari Trebel_1 id 3 menjadi data Trebel_1 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_1 id 2.
dan data dari Trebel_2 id 3 menjadi data Trebel_2 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_2 id 2.
dan data dari Trebel_3 id 3 menjadi data Trebel_3 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_3 id 2..
dan data dari Trebel_4 id 3 menjadi data Trebel_4 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_4 id 2.
dan data dari Trebel_5 id 3 menjadi data Trebel_5 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_5 id 2.
jika progres 3 dan jika mode Turun:
maka data dari Trebel_1 id 3 menjadi data Trebel_1 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_1 id 1.
dan data dari Trebel_2 id 3 menjadi data Trebel_2 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_2 id 1.
dan data dari Trebel_3 id 3 menjadi data Trebel_3 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_3 id 1.
dan data dari Trebel_4 id 3 menjadi data Trebel_4 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_4 id 1.
dan data dari Trebel_5 id 3 menjadi data Trebel_5 id 3 yang digit angka datanya dikurang 2 dan kongruen dengan data Trebel_5 id 1.
Berikut Contoh data kongruen:
Bila data di kolom Trebel_1 id 1 adalah 4567, data di kolom Trebel_1 id 2 adalah 13243, dan data di kolom Trebel_1 id 3 adalah 1132, maka bila data kolom Trebel_1 id 1 yang mengalami Progres 1 mode Naik atau Turun, maka data Trebel_1 id 1 akan tetap menjadi data: 4567. iBla data kolom Trebel_1 id 1 yang mengalami Progres 2 mode Naik akan menjadi data berikut: 35465 (data kongruen dengan data kolom Trebel_1 id 2). Bila data kolom Trebel_1 id 1 yang mengalami Progres 2 mode Turun akan menjadi data berikut: 3354 (data kongruen dengan data kolom Trebel_1 id 3). Bila data kolom Trebel_1 id 1 yang mengalami Progres 3 mode Naik akan menjadi berikut: 2231 (data kongruen dengan data kolom Trebel_1 id 3). Bila data kolom Trebel_1 id 1 yang mengalami Progres 3 mode Turun akan menjadi 24354 (data kongruen dengan data kolom Trebel_1 id 2).
Logika pada data Trebel di Sub_Gn_Cyan_Atas:
II. Jika data gugus nada yang terpilih dari kolom Trebel pada Sub_Gn_Cyan_Atas:
1a. Jika level_gn = 1, atau level_gn = 2, atau level_gn = 3, atau level_gn = 4, atau level_gn = 5, atau level_gn = 6, atau level_gn = 7, atau level_gn = 8, atau level_gn = 9, atau level_gn = 10, atau level_gn = 11, atau level_gn = 12 (sesuai dengan level_gn data Sub_Bass), dan di entry pilih_trebel user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5:
jika progres 1, dan jika mode Naik atau Turun:
maka data dari Trebel_1 sub_id 1 menjadi data Trebel_1 sub_id 1, dan data dari Trebel_2 sub_id 1 menjadi data Trebel_2 sub_id 1, dan data dari Trebel_3 sub_id 1 menjadi data Trebel_3 sub_id 1, dan data dari Trebel_4 sub_id 1 menjadi data Trebel_4 sub_id 1, dan data dari Trebel_5 sub_id 1 menjadi data Trebel_5 sub_id 1,
jika progres 2 dan jika mode Naik atau Turun:
maka data dari Trebel_1 sub_id 1 menjadi data Trebel_1 sub_id 1 yang digit angka datanya dikurang 1
dan data dari sub_id 1 menjadi data Trebel_2 sub_id 1 yang digit angka datanya dikurang 1.
dan data dari Trebel_3 sub_id 1 menjadi data Trebel_3 sub_id 1 yang digit angka datanya dikurang 1.
dan data dari Trebel_4 sub_id 1 menjadi data Trebel_4 sub_id 1 yang digit angka datanya dikurang 1.
dan data dari Trebel_5 sub_id 1 menjadi data Trebel_5 sub_id 1 yang digit angka datanya dikurang 1.
jika progres 3 dan jika mode Naik atau Turun:
maka data dari Trebel_1 sub_id 1 menjadi data Trebel_1 sub_id 1 yang digit angka datanya dikurang 2.
dan data dari Trebel_2 sub_id 1 menjadi data Trebel_2 sub_id 1 yang digit angka datanya dikurang 2.
dan data dari Trebel_3 sub_id 1 menjadi data Trebel_3 sub_id 1 yang digit angka datanya dikurang 2.
dan data dari Trebel_4 sub_id 1 menjadi data Trebel_4 sub_id 1 yang digit angka datanya dikurang 2.
dan data dari Trebel_5 sub_id 1 menjadi data Trebel_5 sub_id 1 yang digit angka datanya dikurang 2.
Berikut kode yang butuh diperbaiki pada bagian fungsi pilih_nada:
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import sqlite3
# Initialize the main window
root = tk.Tk()
root.geometry("690x1390")
root.title("Arah Arus Musik Gn_Cyan_Atas dan Sub_Gn_Cyan_Atas")
# Buat frame_top di dalam inner_frame
frame_top = tk.Frame(root)
frame_top.pack(pady=10) # Pengaturan padding agar tidak terlalu dekat dengan elemen lainnya
frame_top.grid_columnconfigure(0, minsize=-20) # Tambahkan kolom negatif (menggeser ke kiri)
# Definisikan entry untuk level_gn dan id, dan combobox di bawah
label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")
label_level_gn_selected.grid(row=1, column=0, padx=0, pady=7)
entry_level_gn = tk.Entry(frame_top)
entry_level_gn.grid(row=1, column=1, padx=0, pady=7)
label_id_selected = tk.Label(frame_top, text="ID:")
label_id_selected.grid(row=2, column=0, padx=0, pady=7)
entry_id = tk.Entry(frame_top)
entry_id.grid(row=2, column=1, padx=0, pady=7)
label_progres = tk.Label(frame_top, text="Progres:")
label_progres.grid(row=3, column=0, padx=0, pady=7)
progres_var = tk.StringVar()
progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)
progres_combobox['values'] = (1, 2, 3)
progres_combobox.grid(row=3, column=1, padx=0, pady=7)
label_mode = tk.Label(frame_top, text="Mode:")
label_mode.grid(row=4, column=0, padx=0, pady=7)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])
mode_combobox.grid(row=4, column=1, padx=0, pady=7)
label_nada = tk.Label(frame_top, text="Nada:")
label_nada.grid(row=5, column=0, padx=0, pady=5)
nada_var = tk.StringVar()
nada_combobox = ttk.Combobox(frame_top, textvariable=nada_var)
nada_combobox['values'] = ("Bass", "Trebel")
nada_combobox.grid(row=5, column=1, padx=0, pady=5)
def update_combobox_trebel(event):
# Hapus opsi yang ada sebelumnya
combobox_trebel.set('')
combobox_trebel['values'] = []
# Cek nilai yang dipilih pada combobox_nada
selected_nada = nada_combobox.get()
if selected_nada == "Trebel":
# Jika Trebel dipilih, tambahkan opsi untuk combobox_trebel
combobox_trebel['values'] = ["Trebel_1", "Trebel_2", "Trebel_3", "Trebel_4", "Trebel_5"]
combobox_trebel.grid(row=6, column=1, padx=10, pady=10) # Menampilkan combobox_trebel
else:
combobox_trebel.grid_remove() # Sembunyikan combobox_trebel jika bukan Trebel yang dipilih
# Label untuk combobox Trebel
label_trebel = ttk.Label(frame_top, text="Pilih Trebel:")
label_trebel.grid(row=6, column=0, padx=10, pady=10)
# Combobox Trebel (Kosongkan awalnya)
combobox_trebel = ttk.Combobox(frame_top, state="readonly")
combobox_trebel.grid(row=6, column=1, padx=10, pady=10)
combobox_trebel.grid_remove() # Sembunyikan combobox_trebel saat awal
# Tambahkan callback pada perubahan nilai di combobox_nada
nada_combobox.bind("<<ComboboxSelected>>", update_combobox_trebel)
# Fungsi untuk mengambil data Gn_Cyan_Atas dari database berdasarkan ID
def get_data_gn_cyan_atas_from_db(id_selected):
conn = sqlite3.connect("DATAMUSIK.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))
data = cursor.fetchone()
conn.close()
return data
# Fungsi untuk mengambil data Sub_Gn_Cyan_Bawah dari database berdasarkan Sub_ID
def get_data_sub_gn_cyan_atas_from_db(sub_id_selected):
conn = sqlite3.connect("DATAMUSIK.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (sub_id_selected,))
data = cursor.fetchone()
conn.close()
return data
# Fungsi untuk menampilkan messagebox dan memvalidasi input level_gn
def validate_level_gn():
try:
level_gn = int(entry_level_gn.get())
if level_gn == 1:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
elif level_gn == 2:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
elif level_gn == 3:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
elif level_gn == 4:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
elif level_gn == 5:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
elif level_gn == 6:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
elif level_gn == 7:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
elif level_gn == 8:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
elif level_gn == 9:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
elif level_gn == 10:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
elif level_gn == 11:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
elif level_gn == 12:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
else:
messagebox.showerror("Error", "Masukkan input yang benar.\nInput Level Gn adalah 1 hingga 12")
reset_entries()
except ValueError:
messagebox.showerror("Error", "Input harus berupa angka.")
reset_entries()
# Fungsi untuk mengatur entry ID dan mencegah input selain ID yang valid
def set_id_entry(valid_id):
entry_id.delete(0, tk.END)
entry_id.insert(0, valid_id)
entry_id.config(state='readonly') # Membatasi input hanya pada ID yang valid
# Fungsi untuk mereset entries jika input level_gn tidak valid
def reset_entries():
entry_level_gn.delete(0, tk.END)
entry_id.config(state='normal')
entry_id.delete(0, tk.END)
# Tambahkan tombol untuk memvalidasi level_gn
validate_button = tk.Button(frame_top, text="Validasi Level Gn", bg="yellow", command=validate_level_gn)
validate_button.grid(row=1, column=2, padx=0, pady=7)
# Fungsi untuk memilih nada Bass, dan Sub Bass
def pilih_nada():
try:
level_gn_selected = int(entry_level_gn.get())
id_selected = int(entry_id.get())
progres_selected = int(progres_var.get())
mode_selected = mode_var.get().lower()
nada_selected = nada_var.get().lower()
conn = sqlite3.connect("DATAMUSIK.db")
cursor = conn.cursor()
# Mengambil data dari tabel Gn_Cyan_Atas berdasarkan ID dan kolom
cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))
data_gn_cyan_atas = cursor.fetchone()
# Mengambil data dari tabel Sub_Gn_Cyan_Atas berdasarkan Sub_ID dan kolom
cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (1,))
data_sub_gn_cyan_atas = cursor.fetchone()
conn.close()
# Logika untuk memilih dan menampilkan data Gn_Cyan_Atas
if data_gn_cyan_atas:
if progres_selected == "Progres 1":
pass
elif progres_selected == "Progres 2":
pass
elif progres_selected == "Progres 3":
pass
# Logika untuk memilih dan menampilkan data Sub_Gn_Cyan_Atas
if data_sub_gn_cyan_atas:
if progres_selected == "Progres 1":
pass
elif progres_selected == "Progres 2":
pass
elif progres_selected == "Progres 3":
pass
except Exception as e:
messagebox.showerror("Error", f"Terjadi kesalahan: {str(e)}")
finally:
# Menghapus status read-only sementara
entry_id.config(state='normal')
# Bersihkan atau reset entry dan combobox setelah tombol pilih_nada ditekan
entry_level_gn.delete(0, 'end')
entry_id.delete(0, 'end')
progres_combobox.set('')
mode_combobox.set('')
nada_combobox.set('')
# Kembalikan status read-only setelah menghapus isinya
entry_id.config(state='readonly')
reset_entries()
# Fungsi untuk menyesuaikan nilai sub bass berdasarkan progres
def adjust_trebel_value(trebel_value, progres):
if trebel_value.isdigit():
# Menyesuaikan nilai dengan mengurangi setiap digit dengan progres
adjusted_value = ''.join(str(int(char) - progres) if char.isdigit() else char for char in trebel_value)
else:
adjusted_value = trebel_value
return adjusted_value
# Fungsi untuk memastikan urutan Level_Gn berdsarkan ID dan kolom
def level_gn(table_name):
try:
level_gn_selected = int(entry_level_gn.get()) # Mendapatkan Level_Gn dari input
# Variabel awal untuk ID, kolom, dan modifikasi angka (hanya digunakan untuk Sub_Gn_Cyan_Atas)
id_selected = None
kolom_selected = None
modifikasi_angka = 0 # Default 0, tidak ada pengurangan
if table_name == 'Gn_Cyan_Atas':
# Logika untuk tabel Gn_Cyan_Atas
if level_gn_selected == 1:
id_selected = 1
kolom_selected = 'Bass_1'
elif level_gn_selected == 4:
id_selected = 1
kolom_selected = 'Bass_2'
elif level_gn_selected == 6:
id_selected = 1
kolom_selected = 'Bass_3'
elif level_gn_selected == 11:
id_selected = 1
kolom_selected = 'Bass_5'
elif level_gn_selected == 2:
id_selected = 2
kolom_selected = 'Bass_1'
elif level_gn_selected == 7:
id_selected = 2
kolom_selected = 'Bass_3'
elif level_gn_selected == 9:
id_selected = 2
kolom_selected = 'Bass_4'
elif level_gn_selected == 12:
id_selected = 2
kolom_selected = 'Bass_5'
elif level_gn_selected == 3:
id_selected = 3
kolom_selected = 'Bass_1'
elif level_gn_selected == 5:
id_selected = 3
kolom_selected = 'Bass_2'
elif level_gn_selected == 8:
id_selected = 3
kolom_selected = 'Bass_3'
elif level_gn_selected == 10:
id_selected = 3
kolom_selected = 'Bass_4'
else:
messagebox.showerror("Error", "Level_Gn harus antara 1 hingga 12.")
return None, None
elif table_name == 'Sub_Gn_Cyan_Atas':
# Logika untuk tabel Sub_Gn_Cyan_Atas
if level_gn_selected == 1:
id_selected = 1
kolom_selected = 'Bass_1'
elif level_gn_selected == 5:
id_selected = 1
kolom_selected = 'Bass_1'
modifikasi_angka = -1
elif level_gn_selected == 9:
id_selected = 1
kolom_selected = 'Bass_1'
modifikasi_angka = -2
elif level_gn_selected == 2:
id_selected = 1
kolom_selected = 'Bass_2'
elif level_gn_selected == 6:
id_selected = 1
kolom_selected = 'Bass_2'
modifikasi_angka = -1
elif level_gn_selected == 10:
id_selected = 1
kolom_selected = 'Bass_2'
modifikasi_angka = -2
elif level_gn_selected == 3:
id_selected = 1
kolom_selected = 'Bass_3'
elif level_gn_selected == 7:
id_selected = 1
kolom_selected = 'Bass_3'
modifikasi_angka = -1
elif level_gn_selected == 11:
id_selected = 1
kolom_selected = 'Bass_3'
modifikasi_angka = -2
elif level_gn_selected == 4:
id_selected = 1
kolom_selected = 'Bass_4'
elif level_gn_selected == 8:
id_selected = 1
kolom_selected = 'Bass_4'
modifikasi_angka = -1
elif level_gn_selected == 12:
id_selected = 1
kolom_selected = 'Bass_4'
modifikasi_angka = -2
else:
messagebox.showerror("Error", "Level_Gn harus antara 1 hingga 12.")
return None, None, None
else:
messagebox.showerror("Error", "Nama tabel tidak valid!")
return None, None, None
# Menyisipkan ID dan kolom yang dipilih ke dalam entry box
entry_id.delete(0, 'end')
entry_id.insert(0, str(id_selected))
entry_kolom.delete(0, 'end')
entry_kolom.insert(0, kolom_selected)
if table_name == 'Gn_Cyan_Atas':
return id_selected, kolom_selected
elif table_name == 'Sub_Gn_Cyan_Atas':
return id_selected, kolom_selected, modifikasi_angka
except ValueError:
messagebox.showerror("Error", "Masukkan nilai Level_Gn yang valid!")
return None, None, None
#label dan entry
label_trebel_gn_cyan_atas = tk.Label(frame_top, text="Trebel Gn_Cyan_Atas:")
label_trebel_gn_cyan_atas.grid(row=10, column=0, padx=0, pady=7)
entry_ttebel = tk.Entry(frame_top)
entry_ttebel.grid(row=10, column=1, padx=0, pady=7)
label_trebel_sub_gn_cyan_atas = tk.Label(frame_top, text="Sub Trebel Gn_Cyan_Atas:")
label_trebel_sub_gn_cyan_atas.grid(row=11, column=0, padx=0, pady=7)
entry_sub_trebel = tk.Entry(frame_top)
entry_sub_trebel.grid(row=11, column=1, padx=0, pady=7)
separator = ttk.Separator(frame_top, orient='horizontal')
separator.grid(row=7, column=0,
sticky="ew", pady=15)
# Tombol untuk menjalankan fungsi pilih_nada
button_pilih_nada = tk.Button(frame_top, text="Pilih Nada", bg="lightgreen", command=pilih_nada)
button_pilih_nada.grid(row=8, column=1, padx=0, pady=7)
separator = ttk.Separator(frame_top, orient='horizontal')
separator.grid(row=9, column=0, sticky="ew", pady=15)
root.mainloop()
Untuk menerapkan logika yang diminta, berikut adalah langkah-langkahnya:
1. **Fungsi untuk Validasi Input Level_Gn**:
- Fungsi ini akan mengecek apakah input pada `entry_level_gn` valid dan menampilkan pesan sesuai dengan level yang dimasukkan.
2. **Validasi Input ID berdasarkan Level_Gn**:
- Setelah Level_Gn diinput, fungsi akan menampilkan pesan untuk meminta user menginput ID yang sesuai dengan Level_Gn tersebut.
- ID yang diinput oleh user harus sesuai dengan ID yang dipersyaratkan untuk Level_Gn tertentu, jika tidak, proses tidak akan dilanjutkan.
3. **Logika pada Pilihan Trebel**:
- Setelah user menginput Level_Gn dan ID dengan benar, logika untuk memilih Trebel dan memodifikasi data berdasarkan progres dan mode akan diterapkan.
- Jika Level_Gn tertentu diinput, logika akan bekerja sesuai dengan spesifikasi yang Anda berikan, termasuk pengurangan digit angka pada data Trebel berdasarkan mode dan progres yang dipilih.
### Kode Implementasi:
Berikut adalah contoh kode yang dapat Anda gunakan untuk mengimplementasikan logika tersebut:
```python
import tkinter as tk
from tkinter import messagebox
def validate_level_gn(entry_level_gn, entry_id):
level_gn = int(entry_level_gn.get())
if level_gn == 1:
expected_id = 1
elif level_gn == 2:
expected_id = 2
elif level_gn == 3:
expected_id = 3
elif level_gn == 4:
expected_id = 1
elif level_gn == 5:
expected_id = 3
elif level_gn == 6:
expected_id = 1
elif level_gn == 7:
expected_id = 2
elif level_gn == 8:
expected_id = 3
elif level_gn == 9:
expected_id = 2
elif level_gn == 10:
expected_id = 3
elif level_gn == 11:
expected_id = 1
elif level_gn == 12:
expected_id = 2
else:
messagebox.showerror("Input Error", "Masukkan input yang benar. \nInput Level Gn adalah 1 hingga 12")
return
messagebox.showinfo("Info", f"Lanjut dengan memasukkan input ID = {expected_id}")
entry_id.delete(0, tk.END)
entry_id.insert(0, str(expected_id))
def validate_id(entry_id, expected_id):
id_value = int(entry_id.get())
if id_value != expected_id:
messagebox.showerror("Input Error", f"ID harus {expected_id}, tidak boleh yang lain.")
entry_id.delete(0, tk.END)
entry_id.insert(0, str(expected_id))
def pilih_trebel(entry_level_gn, entry_id, entry_trebel, progres, mode):
# Logika untuk memilih Trebel berdasarkan Level_Gn, ID, Progres, dan Mode
level_gn = int(entry_level_gn.get())
id_value = int(entry_id.get())
trebel_value = entry_trebel.get()
# Logika yang akan diaplikasikan pada data Trebel
if (level_gn in [1, 4, 6, 11]) and (id_value == 1):
if progres == 1:
# Implementasi logika sesuai deskripsi 1a
pass
elif progres == 2 and mode == 'Naik':
# Implementasi logika sesuai deskripsi 1b Naik
pass
elif progres == 2 and mode == 'Turun':
# Implementasi logika sesuai deskripsi 1b Turun
pass
elif progres == 3 and mode == 'Naik':
# Implementasi logika sesuai deskripsi 1c Naik
pass
elif progres == 3 and mode == 'Turun':
# Implementasi logika sesuai deskripsi 1c Turun
pass
# Tambahkan logika untuk kondisi Level_Gn dan ID lainnya
# Contoh penggunaan dalam tkinter
root = tk.Tk()
entry_level_gn = tk.Entry(root)
entry_id = tk.Entry(root)
entry_trebel = tk.Entry(root)
entry_level_gn.pack()
entry_id.pack()
entry_trebel.pack()
tk.Button(root, text="Validate Level_Gn", command=lambda: validate_level_gn(entry_level_gn, entry_id)).pack()
tk.Button(root, text="Validate ID", command=lambda: validate_id(entry_id, expected_id=int(entry_id.get()))).pack()
tk.Button(root, text="Pilih Trebel", command=lambda: pilih_trebel(entry_level_gn, entry_id, entry_trebel, progres=1, mode='Naik')).pack()
root.mainloop()
```
### Penjelasan:
1. **Fungsi `validate_level_gn`**: Fungsi ini memvalidasi input Level_Gn dan mengarahkan user untuk memasukkan ID yang benar berdasarkan Level_Gn.
2. **Fungsi `validate_id`**: Fungsi ini memastikan bahwa ID yang dimasukkan sesuai dengan yang diharapkan untuk Level_Gn tertentu.
3. **Fungsi `pilih_trebel`**: Fungsi ini mengaplikasikan logika yang sesuai berdasarkan pilihan Level_Gn, ID, Progres, dan Mode yang dipilih oleh user.
4. **Implementasi dalam Tkinter**: Tombol-tombol di Tkinter digunakan untuk memvalidasi input dan menjalankan logika sesuai kebutuhan.
### Catatan:
- Anda perlu menambahkan logika untuk Level_Gn, ID, Progres, dan Mode lainnya di fungsi `pilih_trebel` sesuai dengan kebutuhan.
- Sesuaikan alur logika dan pesan yang ditampilkan sesuai dengan kondisi spesifik dari aplikasi Anda.
Untuk memperbaiki fungsi `pilih_nada` pada kode di atas, berikut beberapa hal yang perlu dilakukan:
1. **Perbaikan Pengambilan Data Progres:**
Saat ini, `progres_selected` diambil sebagai integer dari `progres_var`, tetapi di dalam logika, Anda membandingkan `progres_selected` dengan string seperti "Progres 1", "Progres 2", dan "Progres 3". Anda harus memperbaikinya agar nilai progres diambil sebagai integer dan disesuaikan dengan perbandingan logika yang tepat.
2. **Penyesuaian Logika Pemilihan Data Berdasarkan Progres:**
Anda perlu menyesuaikan logika untuk memilih dan menampilkan data dari tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas` berdasarkan progres yang dipilih. Ini juga termasuk menambahkan fungsi `adjust_trebel_value` untuk mengurangi setiap digit dari data Trebel dengan nilai progres yang sesuai.
3. **Pemisahan Logika untuk Gn_Cyan_Atas dan Sub_Gn_Cyan_Atas:**
Pastikan logika untuk `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas` dipisahkan dengan jelas, dan hasilnya diimplementasikan dengan baik.
Berikut adalah revisi untuk fungsi `pilih_nada`:
```python
def pilih_nada():
try:
level_gn_selected = int(entry_level_gn.get())
id_selected = int(entry_id.get())
progres_selected = int(progres_var.get()) # Mengubah progres menjadi integer
mode_selected = mode_var.get().lower()
nada_selected = nada_var.get().lower()
conn = sqlite3.connect("DATAMUSIK.db")
cursor = conn.cursor()
# Mengambil data dari tabel Gn_Cyan_Atas berdasarkan ID
cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))
data_gn_cyan_atas = cursor.fetchone()
# Mengambil data dari tabel Sub_Gn_Cyan_Atas berdasarkan Sub_ID (dalam hal ini Sub_ID = 1)
cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (1,))
data_sub_gn_cyan_atas = cursor.fetchone()
conn.close()
if data_gn_cyan_atas:
if progres_selected == 1:
# Logika untuk Progres 1 (sesuaikan sesuai kebutuhan)
display_trebel(data_gn_cyan_atas, progres_selected)
elif progres_selected == 2:
# Logika untuk Progres 2 (sesuaikan sesuai kebutuhan)
display_trebel(data_gn_cyan_atas, progres_selected)
elif progres_selected == 3:
# Logika untuk Progres 3 (sesuaikan sesuai kebutuhan)
display_trebel(data_gn_cyan_atas, progres_selected)
if data_sub_gn_cyan_atas:
if progres_selected == 1:
# Logika untuk Progres 1 di Sub_Gn_Cyan_Atas (sesuaikan sesuai kebutuhan)
display_trebel(data_sub_gn_cyan_atas, progres_selected)
elif progres_selected == 2:
# Logika untuk Progres 2 di Sub_Gn_Cyan_Atas (sesuaikan sesuai kebutuhan)
display_trebel(data_sub_gn_cyan_atas, progres_selected)
elif progres_selected == 3:
# Logika untuk Progres 3 di Sub_Gn_Cyan_Atas (sesuaikan sesuai kebutuhan)
display_trebel(data_sub_gn_cyan_atas, progres_selected)
except Exception as e:
messagebox.showerror("Error", f"Terjadi kesalahan: {str(e)}")
finally:
# Menghapus status read-only sementara
entry_id.config(state='normal')
# Bersihkan atau reset entry dan combobox setelah tombol pilih_nada ditekan
entry_level_gn.delete(0, 'end')
entry_id.delete(0, 'end')
progres_combobox.set('')
mode_combobox.set('')
nada_combobox.set('')
# Kembalikan status read-only setelah menghapus isinya
entry_id.config(state='readonly')
reset_entries()
def display_trebel(data_trebel, progres_selected):
for i, trebel_value in enumerate(data_trebel, start=1):
if trebel_value:
adjusted_trebel = adjust_trebel_value(trebel_value, progres_selected)
messagebox.showinfo("Trebel", f"Trebel_{i}: {adjusted_trebel}")
```
### Penjelasan:
- **Perbandingan Progres:**
`progres_selected` kini adalah integer, jadi perbandingan `if progres_selected == 1:` dll., adalah dengan integer.
- **Logika Display Trebel:**
Fungsi `display_trebel()` digunakan untuk menampilkan hasil yang sesuai berdasarkan progres yang dipilih. Ini juga menggunakan fungsi `adjust_trebel_value` untuk mengurangi nilai berdasarkan progres.
- **Penanganan Database:**
Data diambil dari database dan ditampilkan dalam messagebox dengan pengolahan yang diperlukan.
### Langkah Selanjutnya:
1. Sesuaikan logika dalam `display_trebel()` jika diperlukan untuk memenuhi spesifikasi khusus proyek Anda.
2. Uji keseluruhan alur kerja untuk memastikan semua fungsionalitas berjalan sesuai kebutuhan.
Maksud saya, pada kode yang baru kamu berikan ini, tolong tambahkan bagian ini: Bila user memilih Trebel_1, atau Trebel_2, atau Trebel_3, atau Trebel_4, atau Trebel_5, dan tombol pilih_nada ditekan, maka langsung data Trebel terpilih dari tabel Gn_Cyan_Atas ditampilkan pada entry_trebel, dan data Trebel terpilih dari tabel Sub_Gn_Cyan_Atas ditampilkan pada entry_sub_trebel.
Untuk memenuhi permintaan Anda, saya akan memodifikasi fungsi `pilih_nada()` dan `display_trebel()` agar memungkinkan pemilihan Trebel tertentu dan menampilkan data tersebut langsung pada `entry_trebel` dan `entry_sub_trebel` saat tombol `pilih_nada` ditekan.
Berikut adalah versi yang dimodifikasi:
```python
def pilih_nada():
try:
level_gn_selected = int(entry_level_gn.get())
id_selected = int(entry_id.get())
progres_selected = int(progres_var.get()) # Mengubah progres menjadi integer
mode_selected = mode_var.get().lower()
nada_selected = nada_var.get().lower()
conn = sqlite3.connect("DATAMUSIK.db")
cursor = conn.cursor()
# Mengambil data dari tabel Gn_Cyan_Atas berdasarkan ID
cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))
data_gn_cyan_atas = cursor.fetchone()
# Mengambil data dari tabel Sub_Gn_Cyan_Atas berdasarkan Sub_ID (dalam hal ini Sub_ID = 1)
cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (1,))
data_sub_gn_cyan_atas = cursor.fetchone()
conn.close()
if data_gn_cyan_atas and data_sub_gn_cyan_atas:
# Menampilkan data Trebel berdasarkan pilihan user
display_trebel(data_gn_cyan_atas, data_sub_gn_cyan_atas, nada_selected, progres_selected)
except Exception as e:
messagebox.showerror("Error", f"Terjadi kesalahan: {str(e)}")
finally:
# Menghapus status read-only sementara
entry_id.config(state='normal')
# Bersihkan atau reset entry dan combobox setelah tombol pilih_nada ditekan
entry_level_gn.delete(0, 'end')
entry_id.delete(0, 'end')
progres_combobox.set('')
mode_combobox.set('')
nada_combobox.set('')
# Kembalikan status read-only setelah menghapus isinya
entry_id.config(state='readonly')
reset_entries()
def display_trebel(data_gn_cyan_atas, data_sub_gn_cyan_atas, nada_selected, progres_selected):
# Pemetaan antara pilihan nada dan indeks kolom di database
nada_index_map = {
'trebel_1': 0,
'trebel_2': 1,
'trebel_3': 2,
'trebel_4': 3,
'trebel_5': 4
}
if nada_selected in nada_index_map:
index = nada_index_map[nada_selected]
# Mengambil nilai Trebel yang sesuai dari Gn_Cyan_Atas dan Sub_Gn_Cyan_Atas
trebel_value_gn = data_gn_cyan_atas[index]
trebel_value_sub = data_sub_gn_cyan_atas[index]
if trebel_value_gn:
adjusted_trebel_gn = adjust_trebel_value(trebel_value_gn, progres_selected)
entry_trebel.delete(0, tk.END)
entry_trebel.insert(0, adjusted_trebel_gn)
if trebel_value_sub:
adjusted_trebel_sub = adjust_trebel_value(trebel_value_sub, progres_selected)
entry_sub_trebel.delete(0, tk.END)
entry_sub_trebel.insert(0, adjusted_trebel_sub)
else:
messagebox.showerror("Error", f"Pilihan nada '{nada_selected}' tidak valid.")
def adjust_trebel_value(trebel_value, progres_selected):
# Logika penyesuaian Trebel berdasarkan progres (jika ada)
# Misalnya, Anda bisa menyesuaikan berdasarkan progres dengan cara tertentu.
# Saat ini, fungsi ini hanya mengembalikan nilai asli tanpa perubahan.
return trebel_value
```
### Penjelasan Modifikasi:
1. **Mapping Nada ke Indeks Kolom**: Fungsi `display_trebel()` memetakan pilihan nada (`Trebel_1`, `Trebel_2`, dll.) ke indeks yang sesuai pada kolom database (`0` untuk `Trebel_1`, `1` untuk `Trebel_2`, dan seterusnya).
2. **Pengambilan Nilai Trebel**:
- Fungsi mengambil nilai Trebel yang sesuai dari data `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas` berdasarkan nada yang dipilih.
- Nilai tersebut kemudian ditampilkan pada `entry_trebel` dan `entry_sub_trebel`.
3. **Penanganan Progres**: Fungsi `adjust_trebel_value()` saat ini hanya mengembalikan nilai asli tanpa perubahan, tetapi Anda dapat menambahkan logika penyesuaian berdasarkan `progres_selected` jika diperlukan.
4. **Penggunaan Index Map**: Ini memastikan bahwa hanya nada yang valid yang diproses, dan jika nada yang dipilih tidak valid, maka akan ditampilkan pesan error.
Dengan implementasi ini, saat user memilih salah satu Trebel dan menekan tombol `pilih_nada`, data yang sesuai dari `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas` akan langsung ditampilkan pada `entry_trebel` dan `entry_sub_trebel`.
Komentar
Posting Komentar
This Message