FUNGSI UNTUK MENGAMBIL DATA TABEL Gn_A_Trebel DARI DATABASE DATAMUSIK.db, DAN MENGATUR TREBEL SESUAI Level_gn, Progres, dan Mode.
FUNGSI UNTUK MENGAMBIL DATA TABEL Gn_A_Trebel DARI DATABASE DATAMUSIK.db, DAN MENGATUR TREBEL SESUAI Level_gn, Progres, dan Mode.
Tolong perbaiki kode berikut pada fungsi pilih_nada yang menggunakan juga fungsi adjust_id_trebel_progres2_naik_value, fungsi adjust_id_trebel_progres2_turun_value, fungsi adjust_id_trebel_progres3_naik_value, dan fungsi adjust_id_trebel_progres3_turun_value, agar supaya data Trebel terpilih setelah mengalami pengurangan digit berdasarkan level_gn yang sesuai kemudian akan mengalami pengurangan digit berdasarkan progres 2 atau progres 3 dan mode naik atau mode turun, dimana bila pengurangan digit pertama berdasarkan progres adalah dengan ketentuan pengurang = progres - 1, sedangkan pengurangan digit kedua dan digit seterusnya adalah berdasarkan nww_id_value.
Berikut kode:
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")
# Bottom Frame
bottom_frame = tk.Frame(root, bg="#e2e2e2")
bottom_frame.pack(side=tk.TOP, fill=tk.X)
# Fungsi untuk menampilkan messagebox dan memvalidasi input level_gn
def validate_level_gn():
try:
level_gn = int(entry_level_gn.get())
if level_gn in [1, 4, 7, 10]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
elif level_gn in [2, 5, 8, 11]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
elif level_gn in [3, 6, 9, 12]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
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)
# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada
def pilih_nada():
try:
level_gn_selected = int(entry_level_gn.get())
id_selected = int(entry_id.get())
progres_selected = int(progres_var.get())
mode_selected = mode_var.get().lower()
# Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected
result = level_gn(id_selected, progres_selected, mode_selected, level_gn_selected)
# Tampilkan data ke dalam entry
gn_a_trebel_entry.delete(0, tk.END)
gn_a_trebel_entry.insert(0, result["Gugusan_nada"])
except Exception as e:
print("Error:", 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('')
# Kembalikan status read-only setelah menghapus isinya
entry_id.config(state='readonly')
reset_entries()
# Fungsi untuk menerapkan pengurangan berdasarkan level_gn tanpa mempertimbangkan progres
def apply_level_adjustment(value, level_gn_selected):
# Tentukan pengurang berdasarkan level_gn
if level_gn_selected in [1, 2, 3]:
pengurang = 0
elif level_gn_selected in [4, 5, 6]:
pengurang = 1
elif level_gn_selected in [7, 8, 9]:
pengurang = 2
elif level_gn_selected in [10, 11, 12]:
pengurang = 3
# Sesuaikan nilai string berdasarkan pengurang
adjusted_value = ''.join(str((int(digit) - pengurang) % 10) for digit in value if digit.isdigit())
return adjusted_value
# Pengurangan hanya pada perubahan Level Gn, progres tidak mengubah gugusan_nada
def level_gn(id, progres_selected, mode_selected, level_gn_selected):
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Query untuk pengambilan data dari tabel Gn_A_Trebel
query = """
SELECT Gugusan_nada
FROM Gn_A_Trebel
WHERE ID = ?
"""
cursor.execute(query, (id,))
data = cursor.fetchone()
gugusan_nada = data[0]
# Sesuaikan nilai Bass hanya berdasarkan level_gn
gugusan_nada = apply_level_adjustment(gugusan_nada, level_gn_selected)
conn.close()
# Return hasil
result = {
"Gugusan_nada": gugusan_nada
}
return result
def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):
# Pastikan digit pertama dari trebel_value adalah digit
if trebel_value.isdigit():
# Modifikasi digit pertama dengan mengurangkan 'pengurang' yang ditentukan
digit_pertama = str(int(trebel_value[0]) - pengurang)
print(f"Digit pertama setelah pengurangan: {digit_pertama}")
else:
# Jika bukan digit, tidak diubah
digit_pertama = trebel_value
# Ambil digit kedua dan seterusnya dari new_id_value dan kurangi 2 untuk setiap digit
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(
str(int(char) - 2) for char in new_id_value[1:]
)
print(f"Digit kedua dan seterusnya setelah pengurangan: {digit_kedua_dan_seterusnya}")
else:
digit_kedua_dan_seterusnya = new_id_value[1:] # Jika bukan digit, tidak diubah
# Gabungkan digit pertama dengan digit kedua dan seterusnya
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
print(f"Nilai akhir: {adjusted_value}")
return adjusted_value
def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
print(f"Digit pertama setelah pengurangan: {digit_pertama}")
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(
str(int(char) - 2) for char in new_id_value[1:]
)
print(f"Digit kedua dan seterusnya setelah pengurangan: {digit_kedua_dan_seterusnya}")
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
print(f"Nilai akhir: {adjusted_value}")
return adjusted_value
def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):
# Pastikan digit pertama dari trebel_value adalah digit
if trebel_value.isdigit():
# Modifikasi digit pertama dengan mengurangkan 'pengurang' yang ditentukan
digit_pertama = str(int(trebel_value[0]) - pengurang)
print(f"Digit pertama setelah pengurangan: {digit_pertama}")
else:
# Jika bukan digit, tidak diubah
digit_pertama = trebel_value
# Ambil digit kedua dan seterusnya dari new_id_value dan kurangi 2 untuk setiap digit
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(
str(int(char) - 3) for char in new_id_value[1:]
)
print(f"Digit kedua dan seterusnya setelah pengurangan: {digit_kedua_dan_seterusnya}")
else:
digit_kedua_dan_seterusnya = new_id_value[1:] # Jika bukan digit, tidak diubah
# Gabungkan digit pertama dengan digit kedua dan seterusnya
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
print(f"Nilai akhir: {adjusted_value}")
return adjusted_value
def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
print(f"Digit pertama setelah pengurangan: {digit_pertama}")
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(
str(int(char) - 3) for char in new_id_value[1:]
)
print(f"Digit kedua dan seterusnya setelah pengurangan: {digit_kedua_dan_seterusnya}")
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
print(f"Nilai akhir: {adjusted_value}")
return adjusted_value
# Tambahkan tombol untuk memvalidasi level_gn
validate_button = tk.Button(bottom_frame, text="Validasi Level Gn", bg="yellow", command=validate_level_gn)
validate_button.grid(row=3, column=2, padx=0, pady=7)
# Tombol untuk memproses pemilihan nada
button_pilih_nada = tk.Button(bottom_frame, text="Pilih Nada", bg="grey", fg="white", command=pilih_nada)
button_pilih_nada.grid(row=8, column=1, padx=5, pady=5)
separator = ttk.Separator(bottom_frame, orient='horizontal')
separator.grid(row=9, column=0, sticky="ew", pady=15)
#Gugusan Nada Terpilih: "Gn_A_Bass" Terpilih
gugusan_label = tk.Label(bottom_frame, text="Gn_A_Trebel", fg="tomato")
gugusan_label.grid(row=0, column=0, padx=10, pady=5, sticky="ew")
# Labels dan Entries
label_level_gn = tk.Label(bottom_frame, text="Level_Gn:")
label_level_gn.grid(row=3, column=0, padx=5, pady=5)
entry_level_gn = tk.Entry(bottom_frame)
entry_level_gn.grid(row=3, column=1, padx=5, pady=5)
label_id = tk.Label(bottom_frame, text="ID:")
label_id.grid(row=4, column=0, padx=5, pady=5)
entry_id = tk.Entry(bottom_frame)
entry_id.grid(row=4, column=1, padx=5, pady=5)
label_progres = tk.Label(bottom_frame, text="Progres:")
label_progres.grid(row=5, column=0, padx=5, pady=5)
progres_var = tk.StringVar()
progres_combobox = ttk.Combobox(bottom_frame, textvariable=progres_var)
progres_combobox['values'] = (1, 2, 3)
progres_combobox.grid(row=5, column=1, padx=5, pady=5)
label_mode = tk.Label(bottom_frame, text="Mode:")
label_mode.grid(row=6, column=0, padx=5, pady=5)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(bottom_frame, textvariable=mode_var)
mode_combobox['values'] = ("Naik", "Turun")
mode_combobox.grid(row=6, column=1, padx=5, pady=5)
separator = ttk.Separator(bottom_frame, orient='horizontal')
separator.grid(row=7, column=0, sticky="ew", pady=4)
# Gugusan Nada Terpilih Field
Gn_tetpilih_label = tk.Label(bottom_frame, text="Gugusan- \n Nada Terpilih:")
Gn_tetpilih_label.grid(row=11, column=0, padx=5, pady=5)
# Label dan Entry
gn
_a_trebel_label = tk.Label(bottom_frame, text="Trebel")
gn_a_trebel_label.grid(row=10, column=1, padx=10, pady=5)
gn_a_trebel_entry = tk.Entry(bottom_frame, bg="white")
gn_a_trebel_entry.grid(row=11, column=1, padx=10, pady=5)
root.mainloop()
Berikut adalah perbaikan kode yang Anda minta agar sesuai dengan logika pengurangan digit pertama dan digit kedua/seterusnya pada data Trebel sesuai level_gn, progres, dan mode (naik/turun):
1. Fungsi `pilih_nada` telah disesuaikan untuk menggunakan pengurangan digit berdasarkan progres dan mode yang dipilih.
2. Fungsi pengurangan nilai untuk progres 2 dan progres 3 (naik/turun) telah disederhanakan dan dipanggil di dalam `pilih_nada` untuk mengurangi nilai sesuai ketentuan.
3. Logika pengurang untuk digit pertama (`progres - 1`) dan digit kedua/seterusnya (`new_id_value`) telah diterapkan pada fungsi pengurangan nilai untuk setiap progres.
Berikut adalah versi perbaikan kode:
```python
# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada
def pilih_nada():
try:
level_gn_selected = int(entry_level_gn.get())
id_selected = int(entry_id.get())
progres_selected = int(progres_var.get())
mode_selected = mode_var.get().lower()
# Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected
result = level_gn(id_selected, progres_selected, mode_selected, level_gn_selected)
trebel_value = result["Gugusan_nada"]
# Pengurangan digit berdasarkan progres dan mode
if progres_selected == 2:
if mode_selected == "naik":
trebel_value = adjust_id_trebel_progres2_naik_value(trebel_value, str(id_selected), progres_selected - 1)
elif mode_selected == "turun":
trebel_value = adjust_id_trebel_progres2_turun_value(trebel_value, str(id_selected), progres_selected - 1)
elif progres_selected == 3:
if mode_selected == "naik":
trebel_value = adjust_id_trebel_progres3_naik_value(trebel_value, str(id_selected), progres_selected - 1)
elif mode_selected == "turun":
trebel_value = adjust_id_trebel_progres3_turun_value(trebel_value, str(id_selected), progres_selected - 1)
# Tampilkan data yang sudah disesuaikan ke dalam entry
gn_a_trebel_entry.delete(0, tk.END)
gn_a_trebel_entry.insert(0, trebel_value)
except Exception as e:
print("Error:", 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('')
# Kembalikan status read-only setelah menghapus isinya
entry_id.config(state='readonly')
reset_entries()
# Fungsi untuk menerapkan pengurangan berdasarkan level_gn tanpa mempertimbangkan progres
def apply_level_adjustment(value, level_gn_selected):
# Tentukan pengurang berdasarkan level_gn
if level_gn_selected in [1, 2, 3]:
pengurang = 0
elif level_gn_selected in [4, 5, 6]:
pengurang = 1
elif level_gn_selected in [7, 8, 9]:
pengurang = 2
elif level_gn_selected in [10, 11, 12]:
pengurang = 3
# Sesuaikan nilai string berdasarkan pengurang
adjusted_value = ''.join(str((int(digit) - pengurang) % 10) for digit in value if digit.isdigit())
return adjusted_value
# Fungsi untuk progres 2, mode naik
def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):
digit_pertama = str(int(trebel_value[0]) - pengurang)
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
# Fungsi untuk progres 2, mode turun
def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):
digit_pertama = str(int(trebel_value[0]) - pengurang)
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in new_id_value[1:])
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
# Fungsi untuk progres 3, mode naik
def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):
digit_pertama = str(int(trebel_value[0]) - pengurang)
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
# Fungsi untuk progres 3, mode turun
def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):
digit_pertama = str(int(trebel_value[0]) - pengurang)
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
```
Perbaikan di atas memastikan bahwa digit pertama dari `trebel_value` dikurangi berdasarkan `progres - 1`, dan digit kedua serta seterusnya dikurangi berdasarkan logika tambahan (`-2` untuk progres 2 dan `-3` untuk progres 3). Mode naik atau turun diterapkan pada setiap progres.
Anda bisa menggunakan fungsi ini dalam `pilih_nada` untuk menghasilkan data yang disesuaikan.
Maksud saya, pada kode berikut:
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_A_Trebel")
# Bottom Frame
bottom_frame = tk.Frame(root, bg="#e2e2e2")
bottom_frame.pack(side=tk.TOP, fill=tk.X)
# Fungsi untuk menampilkan messagebox dan memvalidasi input level_gn
def validate_level_gn():
try:
level_gn = int(entry_level_gn.get())
if level_gn in [1, 4, 7, 10]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
elif level_gn in [2, 5, 8, 11]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
elif level_gn in [3, 6, 9, 12]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
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)
# Fungsi untuk menerapkan pengurangan berdasarkan level_gn tanpa mempertimbangkan progres
def apply_level_adjustment(value, level_gn_selected):
# Tentukan pengurang berdasarkan level_gn
if level_gn_selected in [1, 2, 3]:
pengurang = 0
elif level_gn_selected in [4, 5, 6]:
pengurang = 1
elif level_gn_selected in [7, 8, 9]:
pengurang = 2
elif level_gn_selected in [10, 11, 12]:
pengurang = 3
# Sesuaikan nilai string berdasarkan pengurang
adjusted_value = ''.join(str((int(digit) - pengurang) % 10) for digit in value if digit.isdigit())
return adjusted_value
# Fungsi untuk mengambil data berdasarkan level_gn dan mengurangi berdasarkan pengurang
def level_gn(id, progres_selected, mode_selected, level_gn_selected):
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Query untuk pengambilan data dari tabel Gn_A_Trebel
query = """
SELECT Gugusan_nada
FROM Gn_A_Trebel
WHERE ID = ?
"""
cursor.execute(query, (id,))
data = cursor.fetchone()
if data:
gugusan_nada = data[0]
# Sesuaikan nilai Bass hanya berdasarkan level_gn
gugusan_nada = apply_level_adjustment(gugusan_nada, level_gn_selected)
else:
gugusan_nada = ""
conn.close()
# Return hasil
result = {
"Gugusan_nada": gugusan_nada
}
return result
# Fungsi untuk menghitung ID baru berdasarkan progres dan mode
def get_new_id_value(entry_id_value, progres_selected, mode_selected):
id_mapping_progres2_naik = {1: 3, 2: 1, 3: 2}
id_mapping_progres3_naik = {1: 2, 2: 3, 3: 1}
id_mapping_progres2_turun = {1: 2, 2: 3, 3: 1}
id_mapping_progres3_turun = {1: 3, 2: 1, 3: 2}
entry_id_value = id_selected = int(entry_id.get())
if progres_selected == 2 and mode_selected == 'naik':
return id_mapping_progres2_naik[entry_id_value]
elif progres_selected == 3 and mode_selected == 'naik':
return id_mapping_progres3_naik[entry_id_value]
elif progres_selected == 2 and mode_selected == 'turun':
return id_mapping_progres2_turun[entry_id_value]
elif progres_selected == 3 and mode_selected == 'turun':
return id_mapping_progres3_turun[entry_id_value]
else:
raise ValueError("Progres atau mode tidak valid.")
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()
result = level_gn(id_selected, progres_selected, mode_selected, level_gn_selected)
print(f"Level GN Result: {result}")
trebel_value = result["Gugusan_nada"]
print(f"Initial Trebel Value: {trebel_value}")
if progres_selected == 1:
gn_a_trebel_entry.delete(0, tk.END)
gn_a_trebel_entry.insert(0, trebel_value)
elif progres_selected in [2, 3]:
new_id_value = get_new_id_value(entry_id.get(), progres_selected, mode_selected)
print(f"New ID Value: {new_id_value}")
pengurang = progres_selected - 1
if progres_selected == 2 and mode_selected == "naik":
trebel_value_new = adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang)
elif progres_selected == 2 and mode_selected == "turun":
trebel_value_new = adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang)
elif progres_selected == 3 and mode_selected == "naik":
trebel_value_new = adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang)
elif progres_selected == 3 and mode_selected == "turun":
trebel_value_new = adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang)
print(f"Adjusted Trebel Value: {trebel_value}")
gn_a_trebel_entry.delete(0, tk.END)
gn_a_trebel_entry.insert(0, trebel_value_new)
except Exception as e:
print("Error:", e)
# Fungsi untuk progres 2, mode naik
def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):
digit_pertama = str(int(trebel_value[0]) - pengurang)
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in str(new_id_value)[1:])
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
# Fungsi untuk progres 2, mode turun
def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):
digit_pertama = str(int(trebel_value[0]) - pengurang)
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 2) for char in str(new_id_value)[1:])
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
# Fungsi untuk progres 3, mode turun
def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):
digit_pertama = str(int(trebel_value[0]) - pengurang)
digit_kedua_dan_seterusnya = ''.join(str(int(char) - 3) for char in new_id_value[1:])
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
return adjusted_value
# Tambahkan tombol untuk memvalidasi level_gn
validate_button = tk.Button(bottom_frame, text="Validasi Level Gn", bg="yellow", command=validate_level_gn)
validate_button.grid(row=3, column=2, padx=0, pady=7)
# Tombol untuk memproses pemilihan nada
button_pilih_nada = tk.Button(bottom_frame, text="Pilih Nada", bg="grey", fg="white", command=pilih_nada)
button_pilih_nada.grid(row=8, column=1, padx=5, pady=5)
separator = ttk.Separator(bottom_frame, orient='horizontal')
separator.grid(row=9, column=0, sticky="ew", pady=15)
#Gugusan Nada Terpilih: "Gn_A_Trebel" Terpilih
gugusan_label = tk.Label(bottom_frame, text="Gn_A_Trebel", fg="tomato")
gugusan_label.grid(row=0, column=0, padx=10, pady=5, sticky="ew")
# Labels dan Entries
label_level_gn = tk.Label(bottom_frame, text="Level_Gn:")
label_level_gn.grid(row=3, column=0, padx=5, pady=5)
entry_level_gn = tk.Entry(bottom_frame)
entry_level_gn.grid(row=3, column=1, padx=5, pady=5)
label_id = tk.Label(bottom_frame, text="ID:")
label_id.grid(row=4, column=0, padx=5, pady=5)
entry_id = tk.Entry(bottom_frame)
entry_id.grid(row=4, column=1, padx=5, pady=5)
label_progres = tk.Label(bottom_frame, text="Progres:")
label_progres.grid(row=5, column=0, padx=5, pady=5)
progres_var = tk.StringVar()
progres_combobox = ttk.Combobox(bottom_frame, textvariable=progres_var)
progres_combobox['values'] = (1, 2, 3)
progres_combobox.grid(row=5, column=1, padx=5, pady=5)
label_mode = tk.Label(bottom_frame, text="Mode:")
label_mode.grid(row=6, column=0, padx=5, pady=5)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(bottom_frame, textvariable=mode_var)
mode_combobox['values'] = ("Naik", "Turun")
mode_combobox.grid(row=6, column=1, padx=5, pady=5)
separator = ttk.Separator(bottom_frame, orient='horizontal')
separator.grid(row=7, column=0, sticky="ew", pady=4)
# Gugusan Nada Terpilih Field
Gn_tetpilih_label = tk.Label(bottom_frame, text="Gugusan- \n Nada Terpilih:")
Gn_tetpilih_label.grid(row=11, column=0, padx=5, pady=5)
# Label dan Entry
gn_a_trebel_label = tk.Label(bottom_frame, text="Trebel")
gn_a_trebel_label.grid(row=10, column=1, padx=10, pady=5)
gn_a_trebel_entry = tk.Entry(bottom_frame, bg="white")
gn_a_trebel_entry.grid(row=11, column=1, padx=10, pady=5)
root.mainloop()
Pada kode tersebut, pada kondisi progres 1 data Trebel terpilih yang tampil sudah benar, sedangkan pada kondisi progres 2 data Trebel terpilih yang tampil masih salah karena hanya 1 digit yang tampil, lalu pada progres 3 tidak ada data yang tampil
Kode yang Anda berikan bertujuan untuk membangun antarmuka pengguna menggunakan `tkinter` di Python untuk memvalidasi input Level_Gn, mengatur ID berdasarkan Level_Gn, dan melakukan proses pemilihan nada berdasarkan progres dan mode yang dipilih. Berikut adalah penjelasan beberapa poin penting dari kode tersebut:
### Fungsi dan Penjelasan Utama
1. **`validate_level_gn()`**:
- Fungsi ini digunakan untuk memvalidasi input dari entry `entry_level_gn`.
- Jika level yang dimasukkan berada dalam rentang tertentu (1-12), fungsi akan menampilkan pesan informasi yang berbeda untuk ID (1, 2, atau 3).
- Jika input di luar dari rentang, fungsi ini akan menampilkan pesan error dan mereset entry.
2. **`set_id_entry(valid_id)`**:
- Fungsi ini mengatur `entry_id` menjadi nilai ID yang valid berdasarkan Level_Gn, serta membatasi pengguna untuk hanya bisa menginput ID yang ditentukan dengan mengatur entry dalam mode readonly.
3. **`apply_level_adjustment()`**:
- Fungsi ini mengubah nilai nada berdasarkan pengurangan sesuai dengan level Gn yang dipilih.
- Pengurangannya bergantung pada rentang Level_Gn: (1-3), (4-6), (7-9), dan (10-12). Pengurangan diterapkan pada setiap digit angka dari nada yang diambil.
4. **`level_gn(id, progres_selected, mode_selected, level_gn_selected)`**:
- Fungsi ini mengambil data dari tabel `Gn_A_Trebel` di database SQLite (`DATAMUSIK.db`) berdasarkan ID.
- Setelah data diambil, fungsi ini menerapkan pengurangan sesuai dengan level_gn dan mengembalikan hasil pengubahan tersebut sebagai nilai nada (`Gugusan_nada`).
5. **`get_new_id_value()`**:
- Fungsi ini mengatur penggantian ID berdasarkan progres dan mode (Naik atau Turun).
- Setiap progres dan mode memiliki logika penggantian ID yang berbeda, sehingga nilai ID dapat berubah untuk progres 2 dan 3.
6. **`pilih_nada()`**:
- Fungsi ini mengelola proses pengambilan nilai nada (`Gugusan_nada`) dari database berdasarkan input ID, level_gn, progres, dan mode yang dipilih.
- Jika progres adalah 2 atau 3, ID akan disesuaikan berdasarkan progres dan mode, serta pengurangan nilai trebel akan dilakukan.
7. **`adjust_id_trebel_progres2_naik_value()`**, **`adjust_id_trebel_progres2_turun_value()`**, dan **`adjust_id_trebel_progres3_turun_value()`**:
- Fungsi-fungsi ini menerapkan pengurangan pada nilai `trebel` berdasarkan progres dan mode yang dipilih. Pengurangan dilakukan pada digit pertama dan digit kedua serta seterusnya dari nilai trebel.
### Antarmuka Pengguna (UI):
- **Tombol "Validasi Level Gn"**: Validasi Level_Gn dan mengatur ID yang sesuai.
- **Tombol "Pilih Nada"**: Memproses pengambilan dan pengubahan nada berdasarkan input Level_Gn, Progres, dan Mode.
- **Entry dan Combobox**: Entry untuk Level_Gn dan ID serta combobox untuk Progres (1, 2, atau 3) dan Mode (Naik atau Turun).
### Penyesuaian Tambahan:
1. **Penanganan Kesalahan**:
- Penanganan kesalahan dengan `try-except` memastikan bahwa jika ada input yang salah, error akan ditangkap dan program tidak crash.
2. **Integrasi Database**:
- Pastikan database `DATAMUSIK.db` sudah terhubung dan tabel `Gn_A_Trebel` berisi data yang diperlukan. Anda dapat memodifikasi query SQL jika struktur tabel berbeda.
Jika ada penyesuaian lebih lanjut yang ingin Anda lakukan atau ingin penjelasan lebih detail, saya siap membantu!
Saya melihat Anda mencoba membangun sebuah aplikasi GUI dengan tkinter untuk memilih dan mengolah data berdasarkan beberapa parameter seperti Level_Gn, ID, Progres, dan Mode. Ada beberapa bagian dari kode yang sudah tepat, namun mungkin ada beberapa bagian yang dapat diperbaiki atau disederhanakan. Sebelum melanjutkan ke beberapa potensi perbaikan atau pertanyaan yang Anda miliki, saya ingin memastikan bahwa saya memahami tujuan utama Anda.
**Apakah tujuan Anda:**
1. Memvalidasi Level_Gn dan ID untuk memastikan keduanya sesuai dengan aturan yang ditentukan (misalnya, Level_Gn = 1-12 dengan ID terkait)?
2. Menampilkan data yang diambil dari database (misalnya, Gugusan Nada)?
3. Menghitung nilai baru berdasarkan pengurangan dan perubahan ID sesuai dengan progres dan mode?
4. Mengimplementasikan perubahan pada tampilan GUI seperti mengupdate field setelah setiap langkah selesai?
Bisa Anda beri tahu bagian mana yang perlu penjelasan lebih lanjut atau ingin disempurnakan agar sesuai dengan logika yang diinginkan?
Sebenarnya, Pada kode berikut sudah benar untuk data Trebel terpilih yang ditampilkan menuru tiap-tiap level_gn, di progres 1. Namun pada progres 2 dan progres 3 belumlah benar, maka kode harus diperbaiki.bahwa data yang telah diperoleh pada kondisi progres 2 harus dikurang 1 setiap digitnya (misalnya data Trebel di level_gn 4, id 1, progres 2, mode naik, data yang tampil adalah "234", maka setiap digit harus dikurang 1 agar supaya menjadi "123"). Begitu juga data yang telah diperoleh pada kondisi progres 3 harus dikurang 2 setiap digitnya (misalnya data Trebel di level_gn 4, id 1, progres 3, mode naik, data yang tampil adalah "234", maka setiap digit harus dikurang 2 agar supaya menjadi "012"). Untuk hal itu tolong perbaiki kode berikut:
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_A_Trebel")
# Bottom Frame
bottom_frame = tk.Frame(root, bg="#e2e2e2")
bottom_frame.pack(side=tk.TOP, fill=tk.X)
# Fungsi untuk menampilkan messagebox dan memvalidasi input level_gn
def validate_level_gn():
try:
level_gn = int(entry_level_gn.get())
if level_gn in [1, 4, 7, 10]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
elif level_gn in [2, 5, 8, 11]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
elif level_gn in [3, 6, 9, 12]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
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)
# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada
def pilih_nada():
try:
level_gn_selected = int(entry_level_gn.get())
id_selected = int(entry_id.get())
progres_selected = int(progres_var.get())
mode_selected = mode_var.get().lower()
# Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected
result = level_gn(id_selected, progres_selected, mode_selected, level_gn_selected)
# Tampilkan data ke dalam entry
gn_a_trebel_entry.delete(0, tk.END)
gn_a_trebel_entry.insert(0, result["Gugusan_nada"])
except Exception as e:
print("Error:", 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('')
# Kembalikan status read-only setelah menghapus isinya
entry_id.config(state='readonly')
reset_entries()
# Fungsi untuk menerapkan pengurangan berdasarkan level_gn tanpa mempertimbangkan progres
def apply_level_adjustment(value, level_gn_selected):
# Tentukan pengurang berdasarkan level_gn
if level_gn_selected in [1, 2, 3]:
pengurang = 0
elif level_gn_selected in [4, 5, 6]:
pengurang = 1
elif level_gn_selected in [7, 8, 9]:
pengurang = 2
elif level_gn_selected in [10, 11, 12]:
pengurang = 3
# Sesuaikan nilai string berdasarkan pengurang
adjusted_value = ''.join(str((int(digit) - pengurang) % 10) for digit in value if digit.isdigit())
return adjusted_value
# Pengurangan hanya pada perubahan Level Gn, progres tidak mengubah gugusan_nada
def level_gn(id, progres_selected, mode_selected, level_gn_selected):
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Query untuk pengambilan data dari tabel Gn_A_Trebel
query = """
SELECT Gugusan_nada
FROM Gn_A_Trebel
WHERE ID = ?
"""
cursor.execute(query, (id,))
data = cursor.fetchone()
gugusan_nada = data[0]
# Sesuaikan nilai Bass hanya berdasarkan level_gn
gugusan_nada = apply_level_adjustment(gugusan_nada, level_gn_selected)
conn.close()
# Return hasil
result = {
"Gugusan_nada": gugusan_nada
}
return result
def adjust_id_trebel_progres2_naik_value(trebel_value, new_id_value, pengurang):
# Pastikan digit pertama dari trebel_value adalah digit
if trebel_value.isdigit():
# Modifikasi digit pertama dengan mengurangkan 'pengurang' yang ditentukan
digit_pertama = str(int(trebel_value[0]) - pengurang)
print(f"Digit pertama setelah pengurangan: {digit_pertama}")
else:
# Jika bukan digit, tidak diubah
digit_pertama = trebel_value
# Ambil digit kedua dan seterusnya dari new_id_value dan kurangi 2 untuk setiap digit
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(
str(int(char) - 2) for char in new_id_value[1:]
)
print(f"Digit kedua dan seterusnya setelah pengurangan: {digit_kedua_dan_seterusnya}")
else:
digit_kedua_dan_seterusnya = new_id_value[1:] # Jika bukan digit, tidak diubah
# Gabungkan digit pertama dengan digit kedua dan seterusnya
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
print(f"Nilai akhir: {adjusted_value}")
return adjusted_value
def adjust_id_trebel_progres2_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
print(f"Digit pertama setelah pengurangan: {digit_pertama}")
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(
str(int(char) - 2) for char in new_id_value[1:]
)
print(f"Digit kedua dan seterusnya setelah pengurangan: {digit_kedua_dan_seterusnya}")
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
print(f"Nilai akhir: {adjusted_value}")
return adjusted_value
def adjust_id_trebel_progres3_naik_value(trebel_value, new_id_value, pengurang):
# Pastikan digit pertama dari trebel_value adalah digit
if trebel_value.isdigit():
# Modifikasi digit pertama dengan mengurangkan 'pengurang' yang ditentukan
digit_pertama = str(int(trebel_value[0]) - pengurang)
print(f"Digit pertama setelah pengurangan: {digit_pertama}")
else:
# Jika bukan digit, tidak diubah
digit_pertama = trebel_value
# Ambil digit kedua dan seterusnya dari new_id_value dan kurangi 2 untuk setiap digit
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(
str(int(char) - 3) for char in new_id_value[1:]
)
print(f"Digit kedua dan seterusnya setelah pengurangan: {digit_kedua_dan_seterusnya}")
else:
digit_kedua_dan_seterusnya = new_id_value[1:] # Jika bukan digit, tidak diubah
# Gabungkan digit pertama dengan digit kedua dan seterusnya
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
print(f"Nilai akhir: {adjusted_value}")
return adjusted_value
def adjust_id_trebel_progres3_turun_value(trebel_value, new_id_value, pengurang):
if trebel_value.isdigit():
digit_pertama = str(int(trebel_value[0]) - pengurang)
print(f"Digit pertama setelah pengurangan: {digit_pertama}")
else:
digit_pertama = trebel_value
if new_id_value.isdigit():
digit_kedua_dan_seterusnya = ''.join(
str(int(char) - 3) for char in new_id_value[1:]
)
print(f"Digit kedua dan seterusnya setelah pengurangan: {digit_kedua_dan_seterusnya}")
else:
digit_kedua_dan_seterusnya = new_id_value[1:]
adjusted_value = digit_pertama + digit_kedua_dan_seterusnya
print(f"Nilai akhir: {adjusted_value}")
return adjusted_value
# Tambahkan tombol untuk memvalidasi level_gn
validate_button = tk.Button(bottom_frame, text="Validasi Level Gn", bg="yellow", command=validate_level_gn)
validate_button.grid(row=3, column=2, padx=0, pady=7)
# Tombol untuk memproses pemilihan nada
button_pilih_nada = tk.Button(bottom_frame, text="Pilih Nada", bg="grey", fg="white", command=pilih_nada)
button_pilih_nada.grid(row=8, column=1, padx=5, pady=5)
separator = ttk.Separator(bottom_frame, orient='horizontal')
separator.grid(row=9, column=0, sticky="ew", pady=15)
#Gugusan Nada Terpilih: "Gn_A_Bass" Terpilih
gugusan_label = tk.Label(bottom_frame, text="Gn_A_Trebel", fg="tomato")
gugusan_label.grid(row=0, column=0, padx=10, pady=5, sticky="ew")
# Labels dan Entries
label_level_gn = tk.Label(bottom_frame, text="Level_Gn:")
label_level_gn.grid(row=3, column=0, padx=5, pady=5)
entry_level_gn = tk.Entry(bottom_frame)
entry_level_gn.grid(row=3, column=1, padx=5, pady=5)
label_id = tk.Label(bottom_frame, text="ID:")
label_id.grid(row=4, column=0, padx=5, pady=5)
entry_id = tk.Entry(bottom_frame)
entry_id.grid(row=4, column=1, padx=5, pady=5)
label_progres = tk.Label(bottom_frame, text="Progres:")
label_progres.grid(row=5, column=0, padx=5, pady=5)
progres_var = tk.StringVar()
progres_combobox = ttk.Combobox(bottom_frame, textvariable=progres_var)
progres_combobox['values'] = (1, 2, 3)
progres_combobox.grid(row=5, column=1, padx=5, pady=5)
label_mode = tk.Label(bottom_frame, text="Mode:")
label_mode.grid(row=6, column=0, padx=5, pady=5)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(bottom_frame, textvariable=mode_var)
mode_combobox['values'] = ("Naik", "Turun")
mode_combobox.grid(row=6, column=1, padx=5, pady=5)
separator = ttk.Separator(bottom_frame, orient='horizontal')
separator.grid(row=7, column=0, sticky="ew", pady=4)
# Gugusan Nada Terpilih Field
Gn_tetpilih_label = tk.Label(bottom_frame, text="Gugusan- \n Nada Terpilih:")
Gn_tetpilih_label.grid(row=11, column=0, padx=5, pady=5)
# Label dan Entry
gn_a_trebel_label = tk.Label(bottom_frame, text="Trebel")
gn_a_trebel_label.grid(row=10, column=1, padx=10, pady=5)
gn_a_trebel_entry = tk.Entry(bottom_frame, bg="white")
gn_a_trebel_entry.grid(row=11, column=1, padx=10, pady=5)
root.mainloop()
Bila perlu mungkin harus menggunakan fungsi adjust trebel yang mengatur pengurangan setiap digit sebesar 1 pada progres 2, dan pengurangan setiap digit sebesar 2 pada progres 3.
Untuk menangani kondisi progres 2 dan 3 seperti yang Anda jelaskan, pengurangan digit berdasarkan progres dapat dimodifikasi langsung dalam fungsi `pilih_nada()`. Pada progres 2, setiap digit dari data `Trebel` harus dikurangi 1, dan pada progres 3, setiap digit dikurangi 2. Ini dapat dilakukan dengan menambahkan pengurangan berdasarkan progres di dalam fungsi `apply_level_adjustment`.
Berikut adalah revisi kode yang lebih terfokus pada pengurangan digit sesuai dengan progres yang dipilih:
```python
# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada
def pilih_nada():
try:
level_gn_selected = int(entry_level_gn.get())
id_selected = int(entry_id.get())
progres_selected = int(progres_var.get())
mode_selected = mode_var.get().lower()
# Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected
result = level_gn(id_selected, progres_selected, mode_selected, level_gn_selected)
# Tampilkan data ke dalam entry
adjusted_result = apply_progres_adjustment(result["Gugusan_nada"], progres_selected)
gn_a_trebel_entry.delete(0, tk.END)
gn_a_trebel_entry.insert(0, adjusted_result)
except Exception as e:
print("Error:", 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('')
# Kembalikan status read-only setelah menghapus isinya
entry_id.config(state='readonly')
reset_entries()
# Fungsi untuk menerapkan pengurangan berdasarkan progres
def apply_progres_adjustment(value, progres_selected):
# Tentukan pengurang berdasarkan progres
if progres_selected == 1:
pengurang = 0
elif progres_selected == 2:
pengurang = 1
elif progres_selected == 3:
pengurang = 2
# Sesuaikan nilai string berdasarkan pengurang
adjusted_value = ''.join(str((int(digit) - pengurang) % 10) for digit in value if digit.isdigit())
return adjusted_value
# Pengurangan hanya pada perubahan Level Gn, progres tidak mengubah gugusan_nada
def level_gn(id, progres_selected, mode_selected, level_gn_selected):
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Query untuk pengambilan data dari tabel Gn_A_Trebel
query = """
SELECT Gugusan_nada
FROM Gn_A_Trebel
WHERE ID = ?
"""
cursor.execute(query, (id,))
data = cursor.fetchone()
gugusan_nada = data[0]
# Sesuaikan nilai Bass hanya berdasarkan level_gn
gugusan_nada = apply_level_adjustment(gugusan_nada, level_gn_selected)
conn.close()
# Return hasil
result = {
"Gugusan_nada": gugusan_nada
}
return result
# Fungsi untuk menerapkan pengurangan berdasarkan level_gn tanpa mempertimbangkan progres
def apply_level_adjustment(value, level_gn_selected):
# Tentukan pengurang berdasarkan level_gn
if level_gn_selected in [1, 2, 3]:
pengurang = 0
elif level_gn_selected in [4, 5, 6]:
pengurang = 1
elif level_gn_selected in [7, 8, 9]:
pengurang = 2
elif level_gn_selected in [10, 11, 12]:
pengurang = 3
# Sesuaikan nilai string berdasarkan pengurang
adjusted_value = ''.join(str((int(digit) - pengurang) % 10) for digit in value if digit.isdigit())
return adjusted_value
```
### Penjelasan:
1. **Fungsi `pilih_nada`** telah diperbarui untuk menyesuaikan nilai `Gugusan_nada` yang diambil dari database dengan pengurangan sesuai progres yang dipilih.
2. **Fungsi `apply_progres_adjustment`** telah ditambahkan untuk mengurangi digit setiap progres. Jika `progres_selected == 2`, pengurang adalah 1, dan jika `progres_selected == 3`, pengurang adalah 2.
3. **Fungsi `apply_level_adjustment`** tetap digunakan untuk menyesuaikan nilai berdasarkan `level_gn`, namun pengurang progres dilakukan setelah nilai awal diambil dari database.
Dengan perubahan ini, setiap digit dari `Gugusan_nada` akan dikurangi sesuai dengan progres yang dipilih (1, 2, atau 3), sehingga hasilnya dapat muncul sesuai kebutuhan Anda.
Mantap, akhirnya kode keseluruhan yang benar untuk CRUD Gn_A_Trebel adalah seperti berikut ini:
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import sqlite3
# Initialize the main window
root = tk.Tk()
root.geometry("690x1390")
root.title("Arah Arus Musik Gn_A_Trebel")
# Bottom Frame
bottom_frame = tk.Frame(root, bg="#e2e2e2")
bottom_frame.pack(side=tk.TOP, fill=tk.X)
# Fungsi untuk menampilkan messagebox dan memvalidasi input level_gn
def validate_level_gn():
try:
level_gn = int(entry_level_gn.get())
if level_gn in [1, 4, 7, 10]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
elif level_gn in [2, 5, 8, 11]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
elif level_gn in [3, 6, 9, 12]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
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)
# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada
def pilih_nada():
try:
level_gn_selected = int(entry_level_gn.get())
id_selected = int(entry_id.get())
progres_selected = int(progres_var.get())
mode_selected = mode_var.get().lower()
# Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected
result = level_gn(id_selected, progres_selected, mode_selected, level_gn_selected)
# Tampilkan data ke dalam entry
adjusted_result = apply_progres_adjustment(result["Gugusan_nada"], progres_selected)
gn_a_trebel_entry.delete(0, tk.END)
gn_a_trebel_entry.insert(0, adjusted_result)
except Exception as e:
print("Error:", 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('')
# Kembalikan status read-only setelah menghapus isinya
entry_id.config(state='readonly')
reset_entries()
# Fungsi untuk menerapkan pengurangan berdasarkan progres
def apply_progres_adjustment(value, progres_selected):
# Tentukan pengurang berdasarkan progres
if progres_selected == 1:
pengurang = 0
elif progres_selected == 2:
pengurang = 1
elif progres_selected == 3:
pengurang = 2
# Sesuaikan nilai string berdasarkan pengurang
adjusted_value = ''.join(str((int(digit) - pengurang) % 10) for digit in value if digit.isdigit())
return adjusted_value
# Pengurangan hanya pada perubahan Level Gn, progres tidak mengubah gugusan_nada
def level_gn(id, progres_selected, mode_selected, level_gn_selected):
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Query untuk pengambilan data dari tabel Gn_A_Trebel
query = """
SELECT Gugusan_nada
FROM Gn_A_Trebel
WHERE ID = ?
"""
cursor.execute(query, (id,))
data = cursor.fetchone()
gugusan_nada = data[0]
# Sesuaikan nilai Bass hanya berdasarkan level_gn
gugusan_nada = apply_level_adjustment(gugusan_nada, level_gn_selected)
conn.close()
# Return hasil
result = {
"Gugusan_nada": gugusan_nada
}
return result
# Fungsi untuk menerapkan pengurangan berdasarkan level_gn tanpa mempertimbangkan progres
def apply_level_adjustment(value, level_gn_selected):
# Tentukan pengurang berdasarkan level_gn
if level_gn_selected in [1, 2, 3]:
pengurang = 0
elif level_gn_selected in [4, 5, 6]:
pengurang = 1
elif level_gn_selected in [7, 8, 9]:
pengurang = 2
elif level_gn_selected in [10, 11, 12]:
pengurang = 3
# Sesuaikan nilai string berdasarkan pengurang
adjusted_value = ''.join(str((int(digit) - pengurang) % 10) for digit in value if digit.isdigit())
return adjusted_value
# Tambahkan tombol untuk memvalidasi level_gn
validate_button = tk.Button(bottom_frame, text="Validasi Level Gn", bg="yellow", command=validate_level_gn)
validate_button.grid(row=3, column=2, padx=0, pady=7)
# Tombol untuk memproses pemilihan nada
button_pilih_nada = tk.Button(bottom_frame, text="Pilih Nada", bg="grey", fg="white", command=pilih_nada)
button_pilih_nada.grid(row=8, column=1, padx=5, pady=5)
separator = ttk.Separator(bottom_frame, orient='horizontal')
separator.grid(row=9, column=0, sticky="ew", pady=15)
#Gugusan Nada Terpilih: "Gn_A_Bass" Terpilih
gugusan_label = tk.Label(bottom_frame, text="Gn_A_Trebel", fg="tomato")
gugusan_label.grid(row=0, column=0, padx=10, pady=5, sticky="ew")
# Labels dan Entries
label_level_gn = tk.Label(bottom_frame, text="Level_Gn:")
label_level_gn.grid(row=3, column=0, padx=5, pady=5)
entry_level_gn = tk.Entry(bottom_frame)
entry_level_gn.grid(row=3, column=1, padx=5, pady=5)
label_id = tk.Label(bottom_frame, text="ID:")
label_id.grid(row=4, column=0, padx=5, pady=5)
entry_id = tk.Entry(bottom_frame)
entry_id.grid(row=4, column=1, padx=5, pady=5)
label_progres = tk.Label(bottom_frame, text="Progres:")
label_progres.grid(row=5, column=0, padx=5, pady=5)
progres_var = tk.StringVar()
progres_combobox = ttk.Combobox(bottom_frame, textvariable=progres_var)
progres_combobox['values'] = (1, 2, 3)
progres_combobox.grid(row=5, column=1, padx=5, pady=5)
label_mode = tk.Label(bottom_frame, text="Mode:")
label_mode.grid(row=6, column=0, padx=5, pady=5)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(bottom_frame, textvariable=mode_var)
mode_combobox['values'] = ("Naik", "Turun")
mode_combobox.grid(row=6, column=1, padx=5, pady=5)
separator = ttk.Separator(bottom_frame, orient='horizontal')
separator.grid(row=7, column=0, sticky="ew", pady=4)
# Gugusan Nada Terpilih Field
Gn_tetpilih_label = tk.Label(bottom_frame, text="Gugusan- \n Nada Terpilih:")
Gn_tetpilih_label.grid(row=11, column=0, padx=5, pady=5)
# Label dan Entry
gn_a_trebel_label = tk.Label(bottom_frame, text="Trebel")
gn_
a_trebel_label.grid(row=10, column=1, padx=10, pady=5)
gn_a_trebel_entry = tk.Entry(bottom_frame, bg="white")
gn_a_trebel_entry.grid(row=11, column=1, padx=10, pady=5)
root.mainloop()
Kode yang kamu buat untuk CRUD **Gn_A_Trebel** sudah sangat rapi dan terstruktur. Dengan menggunakan `Tkinter`, fungsi-fungsi utama seperti validasi input, pengaturan entri ID, pemilihan nada, dan penyesuaian berdasarkan **level_gn** dan **progres** sudah disusun dengan baik. Beberapa hal yang mungkin perlu diperhatikan agar lebih optimal:
1. **Pengolahan Error**:
- Pastikan kamu sudah mengantisipasi jika data yang diambil dari database (`Gn_A_Trebel`) kosong atau tidak sesuai dengan ekspektasi. Kamu bisa menambahkan pengecekan setelah melakukan query SQL, misalnya:
```python
if data is None:
messagebox.showerror("Error", "Data tidak ditemukan di database.")
return
```
2. **Reset Inputan**:
- Fungsi `reset_entries()` sudah cukup bagus dalam membersihkan entri, namun pastikan semua field yang relevan seperti `progres_combobox` dan `mode_combobox` juga direset pada tempat yang diperlukan.
3. **Struktur Layout**:
- Pada tampilan antarmuka (UI), grid manager yang digunakan sudah efektif. Pastikan jika resolusi layar lebih kecil, jendela aplikasi masih bisa menampilkan semua komponen dengan baik, atau kamu bisa menggunakan fungsi `pack_propagate(False)` atau **scrollable frame** jika dibutuhkan.
4. **Koneksi Database**:
- Koneksi ke database dibuka dalam fungsi `level_gn()`. Jangan lupa untuk menangani situasi di mana database tidak bisa diakses, dengan menambahkan error handling seperti:
```python
try:
conn = sqlite3.connect('DATAMUSIK.db')
except sqlite3.Error as e:
messagebox.showerror("Database Error", str(e))
return
```
5. **Peningkatan Kinerja Progres**:
- Fungsi untuk menyesuaikan gugusan nada berdasarkan **progres** dengan pengurangan sudah berjalan baik. Jika ada kebutuhan untuk mempercepat proses ini di masa mendatang, pertimbangkan untuk menyimpan pengaturan ini di level database agar pengolahan bisa dilakukan lebih efisien di backend.
Dengan kode ini, aplikasi sudah bisa bekerja dengan cukup baik dalam mengelola CRUD pada `Gn_A_Trebel`. Kamu bisa lanjut dengan menambahkan fitur-fitur baru sesuai kebutuhan.
Kode selengkapnya untuk CRUD Gn_A_Trebel adalah berikut ini:
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import sqlite3
# Initialize the main window
root = tk.Tk()
root.geometry("690x1390")
root.title("Arah Arus Musik Gn_A_Trebel")
# Bottom Frame
bottom_frame = tk.Frame(root, bg="#e2e2e2")
bottom_frame.pack(side=tk.TOP, fill=tk.X)
# Fungsi untuk menampilkan messagebox dan memvalidasi input level_gn
def validate_level_gn():
try:
level_gn = int(entry_level_gn.get())
if level_gn in [1, 4, 7, 10]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
elif level_gn in [2, 5, 8, 11]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
elif level_gn in [3, 6, 9, 12]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
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)
# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada
def pilih_nada():
try:
level_gn_selected = int(entry_level_gn.get())
id_selected = int(entry_id.get())
progres_selected = int(progres_var.get())
mode_selected = mode_var.get().lower()
# Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected
result = level_gn(id_selected, progres_selected, mode_selected, level_gn_selected)
# Tampilkan data ke dalam entry
adjusted_result = apply_progres_adjustment(result["Gugusan_nada"], progres_selected)
gn_a_trebel_entry.delete(0, tk.END)
gn_a_trebel_entry.insert(0, adjusted_result)
except Exception as e:
print("Error:", 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('')
# Kembalikan status read-only setelah menghapus isinya
entry_id.config(state='readonly')
reset_entries()
# Fungsi untuk menerapkan pengurangan berdasarkan progres
def apply_progres_adjustment(value, progres_selected):
# Tentukan pengurang berdasarkan progres
if progres_selected == 1:
pengurang = 0
elif progres_selected == 2:
pengurang = 1
elif progres_selected == 3:
pengurang = 2
# Sesuaikan nilai string berdasarkan pengurang
adjusted_value = ''.join(str((int(digit) - pengurang) % 10) for digit in value if digit.isdigit())
return adjusted_value
# Pengurangan hanya pada perubahan Level Gn, progres tidak mengubah gugusan_nada
def level_gn(id, progres_selected, mode_selected, level_gn_selected):
try:
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Query untuk pengambilan data dari tabel Gn_A_Trebel
query = """
SELECT Gugusan_nada
FROM Gn_A_Trebel
WHERE ID = ?
"""
cursor.execute(query, (id,))
data = cursor.fetchone()
gugusan_nada = data[0]
if data is None:
messagebox.showerror("Error", "Data tidak ditemukan di database.")
return
# Sesuaikan nilai Bass hanya berdasarkan level_gn
gugusan_nada = apply_level_adjustment(gugusan_nada, level_gn_selected)
conn.close()
# Return hasil
result = {
"Gugusan_nada": gugusan_nada
}
return result
except sqlite3.Error as e:
messagebox.showerror("Database Error", str(e))
return
# Fungsi untuk menerapkan pengurangan berdasarkan level_gn tanpa mempertimbangkan progres
def apply_level_adjustment(value, level_gn_selected):
# Tentukan pengurang berdasarkan level_gn
if level_gn_selected in [1, 2, 3]:
pengurang = 0
elif level_gn_selected in [4, 5, 6]:
pengurang = 1
elif level_gn_selected in [7, 8, 9]:
pengurang = 2
elif level_gn_selected in [10, 11, 12]:
pengurang = 3
# Sesuaikan nilai string berdasarkan pengurang
adjusted_value = ''.join(str((int(digit) - pengurang) % 10) for digit in value if digit.isdigit())
return adjusted_value
# Tambahkan tombol untuk memvalidasi level_gn
validate_button = tk.Button(bottom_frame, text="Validasi Level Gn", bg="yellow", command=validate_level_gn)
validate_button.grid(row=3, column=2, padx=0, pady=7)
# Tombol untuk memproses pemilihan nada
button_pilih_nada = tk.Button(bottom_frame, text="Pilih Nada", bg="grey", fg="white", command=pilih_nada)
button_pilih_nada.grid(row=8, column=1, padx=5, pady=5)
separator = ttk.Separator(bottom_frame, orient='horizontal')
separator.grid(row=9, column=0, sticky="ew", pady=15)
#Gugusan Nada Terpilih: "Gn_A_Bass" Terpilih
gugusan_label = tk.Label(bottom_frame, text="Gn_A_Trebel", fg="tomato")
gugusan_label.grid(row=0, column=0, padx=10, pady=5, sticky="ew")
# Labels dan Entries
label_level_gn = tk.Label(bottom_frame, text="Level_Gn:")
label_level_gn.grid(row=3, column=0, padx=5, pady=5)
entry_level_gn = tk.Entry(bottom_frame)
entry_level_gn.grid(row=3, column=1, padx=5, pady=5)
label_id = tk.Label(bottom_frame, text="ID:")
label_id.grid(row=4, column=0, padx=5, pady=5)
entry_id = tk.Entry(bottom_frame)
entry_id.grid(row=4, column=1, padx=5, pady=5)
label_progres = tk.Label(bottom_frame, text="Progres:")
label_progres.grid(row=5, column=0, padx=5, pady=5)
progres_var = tk.StringVar()
progres_combobox = ttk.Combobox(bottom_frame, textvariable=progres_var)
progres_combobox['values'] = (1, 2, 3)
progres_combobox.grid(row=5, column=1, padx=5, pady=5)
label_mode = tk.Label(bottom_frame, text="Mode:")
label_mode.grid(row=6, column=0, padx=5, pady=5)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(bottom_frame, textvariable=mode_var)
mode_combobox['values'] = ("Naik", "Turun")
mode_combobox.grid(row=6, column=1, padx=5, pady=5)
separator = ttk.Separator(bottom_frame, orient='horizontal')
separator.grid(row=7, column=0, sticky="ew", pady=4)
# Gugusan Nada Terpilih Field
Gn_tetpilih_label = tk.Label(bottom_frame, text="Gugusan- \n Nada Terpilih:")
Gn_tetpilih_label.grid(row=11, column=0, padx=5, pady=5)
# Label dan Entry
gn_a_trebel_label = tk.Label(bottom_frame, text="Trebel
")
gn_a_trebel_label.grid(row=10, column=1, padx=10, pady=5)
gn_a_trebel_entry = tk.Entry(bottom_frame, bg="white")
gn_a_trebel_entry.grid(row=11, column=1, padx=10, pady=5)
root.mainloop()
Berikut adalah kode lengkap untuk aplikasi CRUD dengan tampilan tkinter yang memungkinkan pengguna untuk memasukkan Level_Gn, ID, Progres, dan Mode, serta menampilkan data dari tabel Gn_A_Trebel. Kode ini juga sudah mencakup validasi, pengolahan data dari database DATAMUSIK.db, dan menampilkan hasil ke dalam entry yang sesuai.
Penjelasan Singkat Fungsi-fungsi Utama:
1. validate_level_gn: Memvalidasi input dari Level_Gn dan memberikan pesan yang sesuai berdasarkan nilai input.
2. pilih_nada: Mengambil data Gugusan_nada dari tabel Gn_A_Trebel berdasarkan Level_Gn, ID, Progres, dan Mode yang dipilih.
3. apply_progres_adjustment: Menyesuaikan nilai Gugusan_nada berdasarkan Progres yang dipilih oleh pengguna.
4. apply_level_adjustment: Menyesuaikan nilai Gugusan_nada berdasarkan Level_Gn tanpa memperhitungkan Progres.
Kode Lengkap:
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_A_Trebel")
# Bottom Frame
bottom_frame = tk.Frame(root, bg="#e2e2e2")
bottom_frame.pack(side=tk.TOP, fill=tk.X)
# Fungsi untuk menampilkan messagebox dan memvalidasi input level_gn
def validate_level_gn():
try:
level_gn = int(entry_level_gn.get())
if level_gn in [1, 4, 7, 10]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
elif level_gn in [2, 5, 8, 11]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
elif level_gn in [3, 6, 9, 12]:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
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)
# Fungsi untuk menampilkan data ke Entry setelah pemilihan nada
def pilih_nada():
try:
level_gn_selected = int(entry_level_gn.get())
id_selected = int(entry_id.get())
progres_selected = int(progres_var.get())
mode_selected = mode_var.get().lower()
# Ambil data berdasarkan level_gn_selected, id_selected, progres_selected, dan mode_selected
result = level_gn(id_selected, progres_selected, mode_selected, level_gn_selected)
# Tampilkan data ke dalam entry
adjusted_result = apply_progres_adjustment(result["Gugusan_nada"], progres_selected)
gn_a_trebel_entry.delete(0, tk.END)
gn_a_trebel_entry.insert(0, adjusted_result)
except Exception as e:
print("Error:", 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('')
# Kembalikan status read-only setelah menghapus isinya
entry_id.config(state='readonly')
reset_entries()
# Fungsi untuk menerapkan pengurangan berdasarkan progres
def apply_progres_adjustment(value, progres_selected):
# Tentukan pengurang berdasarkan progres
if progres_selected == 1:
pengurang = 0
elif progres_selected == 2:
pengurang = 1
elif progres_selected == 3:
pengurang = 2
# Sesuaikan nilai string berdasarkan pengurang
adjusted_value = ''.join(str((int(digit) - pengurang) % 10) for digit in value if digit.isdigit())
return adjusted_value
# Pengurangan hanya pada perubahan Level Gn, progres tidak mengubah gugusan_nada
def level_gn(id, progres_selected, mode_selected, level_gn_selected):
try:
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Query untuk pengambilan data dari tabel Gn_A_Trebel
query = """
SELECT Gugusan_nada
FROM Gn_A_Trebel
WHERE ID = ?
"""
cursor.execute(query, (id,))
data = cursor.fetchone()
if data is None:
messagebox.showerror("Error", "Data tidak ditemukan di database.")
return
gugusan_nada = data[0]
# Sesuaikan nilai Bass hanya berdasarkan level_gn
gugusan_nada = apply_level_adjustment(gugusan_nada, level_gn_selected)
conn.close()
# Return hasil
result = {
"Gugusan_nada": gugusan_nada
}
return result
except sqlite3.Error as e:
messagebox.showerror("Database Error", str(e))
return
# Fungsi untuk menerapkan pengurangan berdasarkan level_gn tanpa mempertimbangkan progres
def apply_level_adjustment(value, level_gn_selected):
# Tentukan pengurang berdasarkan level_gn
if level_gn_selected in [1, 2, 3]:
pengurang = 0
elif level_gn_selected in [4, 5, 6]:
pengurang = 1
elif level_gn_selected in [7, 8, 9]:
pengurang = 2
elif level_gn_selected in [10, 11, 12]:
pengurang = 3
# Sesuaikan nilai string berdasarkan pengurang
adjusted_value = ''.join(str((int(digit) - pengurang) % 10) for digit in value if digit.isdigit())
return adjusted_value
# Tombol untuk validasi Level_Gn
validate_button = tk.Button(bottom_frame, text="Validasi Level Gn", bg="yellow", command=validate_level_gn)
validate_button.grid(row=3, column=2, padx=0, pady=7)
# Tombol untuk memilih nada
button_pilih_nada = tk.Button(bottom_frame, text="Pilih Nada", bg="grey", fg="white", command=pilih_nada)
button_pilih_nada.grid(row=8, column=1, padx=5, pady=5)
# Separator
separator = ttk.Separator(bottom_frame, orient='horizontal')
separator.grid(row=9, column=0, sticky="ew", pady=15)
# Gugusan Nada Terpilih Label
gugusan_label = tk.Label(bottom_frame, text="Gn_A_Trebel", fg="tomato")
gugusan_label.grid(row=0, column=0, padx=10, pady=5, sticky="ew")
# Labels dan Entries
label_level_gn = tk.Label(bottom_frame, text="Level_Gn:")
label_level_gn.grid(row=3, column=0, padx=5, pady=5)
entry_level_gn = tk.Entry(bottom_frame)
entry_level_gn.grid(row=3, column=1, padx=5, pady=5)
label_id = tk.Label(bottom_frame, text="ID:")
label_id.grid(row=4, column=0, padx=5, pady=5)
entry_id = tk.Entry(bottom_frame)
entry_id.grid(row=4, column=1, padx=5, pady=5)
label_progres = tk.Label(bottom_frame, text="Progres:")
label_progres.grid(row=5, column=0, padx=5, pady=5)
progres_var = tk.StringVar()
progres_combobox = ttk.Combobox(bottom_frame, textvariable=progres_var)
progres_combobox['values'] = (1, 2, 3)
progres_combobox.grid(row=5, column=1, padx=5, pady=5)
label_mode = tk.Label(bottom_frame, text="Mode:")
label_mode.grid(row=6, column=0, padx=5, pady=5)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(bottom_frame, textvariable=mode_var)
mode_combobox['values'] = ("Naik", "Turun")
mode_combobox.grid(row=6, column=1, padx=5, pady=5)
separator = ttk.Separator(bottom_frame, orient='horizontal')
separator.grid(row=9, column=0, sticky="ew", pady=15)
#Gugusan Nada Terpilih: "Gn_A_Bass" Terpilih
gugusan_label = tk.Label(bottom_frame, text="Gn_A_Trebel", fg="tomato")
gugusan_label.grid(row=0, column=0, padx=10, pady=5, sticky="ew")
# Labels dan Entries
label_level_gn = tk.Label(bottom_frame, text="Level_Gn:")
label_level_gn.grid(row=3, column=0, padx=5, pady=5)
entry_level_gn = tk.Entry(bottom_frame)
entry_level_gn.grid(row=3, column=1, padx=5, pady=5)
label_id = tk.Label(bottom_frame, text="ID:")
label_id.grid(row=4, column=0, padx=5, pady=5)
entry_id = tk.Entry(bottom_frame)
entry_id.grid(row=4, column=1, padx=5, pady=5)
label_progres = tk.Label(bottom_frame, text="Progres:")
label_progres.grid(row=5, column=0, padx=5, pady=5)
progres_var = tk.StringVar()
progres_combobox = ttk.Combobox(bottom_frame, textvariable=progres_var)
progres_combobox['values'] = (1, 2, 3)
progres_combobox.grid(row=5, column=1, padx=5, pady=5)
label_mode = tk.Label(bottom_frame, text="Mode:")
label_mode.grid(row=6, column=0, padx=5, pady=5)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(bottom_frame, textvariable=mode_var)
mode_combobox['values'] = ("Naik", "Turun")
mode_combobox.grid(row=6, column=1, padx=5, pady=5)
separator = ttk.Separator(bottom_frame, orient='horizontal')
separator.grid(row=7, column=0, sticky="ew", pady=4)
# Gugusan Nada Terpilih Field
Gn_tetpilih_label = tk.Label(bottom_frame, text="Gugusan- \n Nada Terpilih:")
Gn_tetpilih_label.grid(row=11, column=0, padx=5, pady=5)
# Label dan Entry
gn_a_trebel_label = tk.Lab
el(bottom_frame, text="Trebel")
gn_a_trebel_label.grid(row=10, column=1, padx=10, pady=5)
gn_a_trebel_entry = tk.Entry(bottom_frame, bg="white")
gn_a_trebel_entry.grid(row=11, column=1, padx=10, pady=5)
root.mainloop()
Selesai....
Komentar
Posting Komentar
This Message