FUNGSI UNTUK MENGAMBIL DATA TABEL Gn_A_Bass DARI DATABASE DATAMUSIK.db, DAN MENGATUR BASS SESUAI Level_gn, Progres, dan Mode
FUNGSI UNTUK MENGAMBIL DATA TABEL Gn_A_Bass DARI DATABASE DATAMUSIK.db, DAN MENGATUR BASS SESUAI Level_gn, Progres, dan Mode.
Apa arti dari penulisan kode berikut ini:
def adjust_value(value, pengurang):
adjusted_value = ''.join(str(max(-9, int(digit) - pengurang)) if digit.isdigit() else digit for digit in value)
return adjusted_value
Kode tersebut merupakan sebuah fungsi Python bernama `adjust_value` yang melakukan penyesuaian pada setiap digit angka dalam sebuah string berdasarkan nilai pengurang yang diberikan. Berikut penjelasan rinci dari setiap bagian:
### 1. **Definisi Fungsi**
```python
def adjust_value(value, pengurang):
```
Fungsi ini menerima dua argumen:
- `value`: Sebuah string yang mengandung karakter-karakter, termasuk digit angka.
- `pengurang`: Sebuah bilangan bulat yang akan dikurangi dari setiap digit angka dalam `value`.
### 2. **Proses Penyesuaian**
```python
adjusted_value = ''.join(
str(max(-9, int(digit) - pengurang)) if digit.isdigit() else digit
for digit in value
)
```
Bagian ini menggunakan list comprehension untuk menghasilkan sebuah string baru (`adjusted_value`) berdasarkan karakter-karakter dalam `value`.
- `digit.isdigit()`: Mengecek apakah setiap karakter `digit` dalam string `value` adalah angka.
- Jika `digit` adalah angka, maka `digit` diubah menjadi integer dengan `int(digit)`, lalu dikurangi dengan `pengurang` (`int(digit) - pengurang`).
- Fungsi `max(-9, int(digit) - pengurang)` memastikan bahwa hasil pengurangan tidak lebih kecil dari -9.
- Setelah pengurangan, angka yang sudah disesuaikan dikonversi kembali menjadi string menggunakan `str()`.
- Jika karakter bukan angka, maka karakter tersebut tetap dibiarkan tanpa perubahan (`else digit`).
### 3. **Mengembalikan Hasil**
```python
return adjusted_value
```
Fungsi ini mengembalikan string hasil dari penyesuaian nilai yang telah dilakukan sebelumnya.
### Contoh:
Jika `value` adalah `"123abc"` dan `pengurang` adalah `1`, maka:
- Angka `1` dikurangi `1` menjadi `0`.
- Angka `2` dikurangi `1` menjadi `1`.
- Angka `3` dikurangi `1` menjadi `2`.
- Huruf `a`, `b`, dan `c` tidak berubah.
Sehingga, fungsi akan menghasilkan string `"012abc"`.
### Kesimpulan
Fungsi ini melakukan operasi pada setiap digit angka dalam string, menguranginya dengan nilai tertentu, dan memastikan bahwa hasil pengurangan tidak kurang dari -9.
Untuk CRUD_Gn_A_Bass pada kode berikut, mengapa pengurang digit hanya pada digit terakhir saja.
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')
# 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_bass_entry.delete(0, tk.END)
gn_a_bass_entry.insert(0, result["Gugusan_nada"])
except Exception as e:
print("Error:", e)
# Fungsi untuk mengurangi setiap digit pada bass dan trebel
def adjust_value(value, pengurang):
adjusted_value = ''.join(str(max(-9, int(digit) - pengurang)) if digit.isdigit() else digit for digit in value)
return adjusted_value
# Fungsi untuk menerapkan pengurangan tambahan berdasarkan progres
def apply_progres_adjustment(value, progres_selected):
if progres_selected == 1:
return adjust_value(value, 0)
elif progres_selected == 2:
return adjust_value(value, 1)
elif progres_selected == 3:
return adjust_value(value, 2)
return value
# Pengurangan pada Bass dan Trebel tergantung pada Level Gn dan Progres
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_Bass
query = """
SELECT Gugusan_nada
FROM Gn_A_Bass
WHERE ID = ?
"""
cursor.execute(query, (id,))
data = cursor.fetchone()
gugusan_nada = data
# Tentukan pengurang berdasarkan level_gn
if level_gn_selected in [1, 2, 3]:
pengurang = 0
elif level_gn_selected in [4, 5, 6]:
pengurang = 1
elif level_gn_selected in [7, 8, 9]:
pengurang = 2
elif level_gn_selected in [10, 11, 12]:
pengurang = 3
# Sesuaikan nilai Bass dan Trebel dengan pengurang level_gn
gugusan_nada = adjust_value(gugusan_nada, pengurang)
conn.close()
# Return hasil
result = {
"Gugusan_nada": gugusan_nada
}
return result
# 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_Bass", 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_bass_label = tk.Label(bottom_frame, text="Bass")
gn_a_bass_label
.grid(row=10, column=1, padx=10, pady=5)
gn_a_bass_entry = tk.Entry(bottom_frame, bg="white")
gn_a_bass_entry.grid(row=11, column=1, padx=10, pady=5)
root.mainloop()
Dalam kode yang Anda berikan, pengurangan digit hanya pada digit terakhir dalam konteks `Gn_A_Bass` diatur melalui fungsi `adjust_value()`. Mari kita analisis mengapa ini terjadi.
### Fungsi `adjust_value()`
```python
def adjust_value(value, pengurang):
adjusted_value = ''.join(str(max(-9, int(digit) - pengurang)) if digit.isdigit() else digit for digit in value)
return adjusted_value
```
Fungsi ini bekerja dengan mengurangi setiap **digit** angka dalam string `value` sesuai dengan nilai `pengurang`. Jika karakter bukan angka, karakter tersebut tidak berubah.
Pada kode yang digunakan untuk pengurangan digit hanya pada digit terakhir, dapat disebabkan oleh:
1. **Karakter terakhir adalah digit yang valid**:
Fungsi ini melakukan iterasi melalui setiap karakter dalam string. Apabila string `value` yang dimasukkan hanya memiliki satu digit angka, maka hanya satu digit tersebut yang akan dikurangi.
2. **Hanya digit terakhir yang diproses sebagai angka**:
Jika input `gugusan_nada` (yang berasal dari hasil query database) mengandung string dengan kombinasi angka dan karakter non-digit (seperti huruf atau simbol), maka fungsi `adjust_value()` hanya akan mengurangi karakter yang berupa angka. Sebagai contoh, jika string `gugusan_nada` adalah `'123a'`, maka pengurangan hanya akan dilakukan pada angka-angka `1`, `2`, dan `3`.
### Pengurangan Tergantung pada `Level_Gn`
Pengurangan tersebut juga diatur oleh logika di bagian berikut ini:
```python
# 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
```
Pengurang untuk setiap digit diatur berdasarkan `level_gn_selected`. Semakin tinggi levelnya, pengurangnya semakin besar (dari 0 hingga 3).
### Kenapa Pengurang Hanya pada Digit Terakhir?
Alasan utamanya mungkin terletak pada **struktur data `gugusan_nada` yang diambil dari database**. Jika data yang diambil hanya terdiri dari satu digit atau hanya ada satu angka pada digit terakhir dalam string yang diperoleh dari database, maka hanya angka itu yang akan mengalami pengurangan. Misalnya, jika nilai dari database adalah `'A12B'`, maka pengurangan hanya akan diterapkan pada digit `2`.
### Kesimpulan
Pengurangan hanya terjadi pada digit terakhir karena:
1. Struktur data dari database (misalnya, hanya satu digit pada akhir string).
2. Penggunaan fungsi `adjust_value()` yang hanya mengurangi karakter angka dan mengabaikan karakter non-digit.
Jika Anda ingin menerapkan pengurangan pada setiap digit dalam string `gugusan_nada`, pastikan data yang diperoleh dari database mengandung lebih dari satu digit angka atau revisi logika pengurangannya untuk menjangkau seluruh angka dalam string.
Tolong modifikasi kode tersebut agar supaya menerapkan pengurangan digit pada setiap digit dalam data kolom gugusan_nada pada tabel Gn_A_Bass
Untuk menerapkan pengurangan pada setiap digit dari data di kolom `gugusan_nada` pada tabel `Gn_A_Bass`, kita perlu memodifikasi fungsi `adjust_value` agar melakukan pengurangan pada setiap digit. Pada versi yang ada, fungsi tersebut hanya mengurangi digit terakhir saja. Modifikasi ini akan memastikan bahwa setiap digit dalam string angka dari `gugusan_nada` akan dikurangi sesuai dengan level atau progres yang dipilih.
Berikut adalah modifikasi kode yang dilakukan pada fungsi `adjust_value` agar mengurangi setiap digit dalam string angka, bukan hanya digit terakhir:
```python
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')
# 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_bass_entry.delete(0, tk.END)
gn_a_bass_entry.insert(0, result["Gugusan_nada"])
except Exception as e:
print("Error:", e)
# Fungsi untuk mengurangi setiap digit pada bass dan trebel
def adjust_value(value, pengurang):
adjusted_value = ''.join(str((int(digit) - pengurang) % 10) if digit.isdigit() else digit for digit in value)
return adjusted_value
# Fungsi untuk menerapkan pengurangan tambahan berdasarkan progres
def apply_progres_adjustment(value, progres_selected):
if progres_selected == 1:
return adjust_value(value, 0)
elif progres_selected == 2:
return adjust_value(value, 1)
elif progres_selected == 3:
return adjust_value(value, 2)
return value
# Pengurangan pada Bass dan Trebel tergantung pada Level Gn dan Progres
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_Bass
query = """
SELECT Gugusan_nada
FROM Gn_A_Bass
WHERE ID = ?
"""
cursor.execute(query, (id,))
data = cursor.fetchone()
gugusan_nada = data[0]
# Tentukan pengurang berdasarkan level_gn
if level_gn_selected in [1, 2, 3]:
pengurang = 0
elif level_gn_selected in [4, 5, 6]:
pengurang = 1
elif level_gn_selected in [7, 8, 9]:
pengurang = 2
elif level_gn_selected in [10, 11, 12]:
pengurang = 3
# Sesuaikan nilai Bass dan Trebel dengan pengurang level_gn
gugusan_nada = adjust_value(gugusan_nada, pengurang)
conn.close()
# Return hasil
result = {
"Gugusan_nada": gugusan_nada
}
return result
# 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_Bass", 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_bass_label = tk.Label(bottom_frame, text="Bass")
gn_a_bass_label.grid(row=10, column=1, padx=10, pady=5)
gn_a_bass_entry = tk.Entry(bottom_frame, bg="white")
gn_a_bass_entry.grid(row=11, column=1, padx=10, pady=5)
root.mainloop()
```
### Penjelasan Perubahan:
1. **Fungsi `adjust_value`**:
- Setiap digit angka dalam string `gugusan_nada` akan diambil dan dikurangi sesuai dengan nilai pengurang.
- Pengurangan digit dilakukan dengan cara mengambil setiap karakter dari string dan memeriksa apakah itu angka. Jika ya, maka dikurangi dengan `pengurang`, dan jika bukan angka, karakter tetap tidak diubah.
- Hasil pengurangan kemudian diambil menggunakan operator modulo (`% 10`) untuk memastikan bahwa digit tidak menjadi negatif, tetapi kembali ke angka dalam rentang 0-9.
Kode ini memastikan setiap digit dalam string `gugusan_nada` dikurangi, bukan hanya digit terakhir.
Maksud saya, Tolong modifikasi kode tersebut agar supaya menerapkan pengurangan digit pada setiap angka digit (bukan digit) dalam data kolom gugusan_nada pada tabel Gn_A_Bass. Misalnya data "234", jika progres 2 maka akan mengalami pengurangan 1 pada setiap angka digit menjadi "123" (angka 2 - 1 = 1, 3 - 1 = 2, dan 4 - 1 = 3), jika progres 3 maka akan mengalami pengurangan 2 pada setiap angka digit menjadi "012" (angka 2 - 2 = 0, 3 - 2 = 1, dan 4 - 2 = 2).
Baik, untuk memahami lebih jelas maksud Anda, yang diinginkan adalah mengurangi **setiap angka dalam data `gugusan_nada`** dengan nilai tertentu berdasarkan progres yang dipilih. Jadi, jika terdapat angka "234", dan progres yang dipilih adalah 2, maka setiap angka akan dikurangi dengan 1 sehingga menjadi "123". Jika progres 3, setiap angka akan dikurangi 2 sehingga menjadi "012", dan seterusnya.
Untuk mewujudkan hal ini, berikut adalah modifikasi kode yang melakukan pengurangan pada setiap angka digit dalam `gugusan_nada` berdasarkan nilai progres yang dipilih:
### Kode yang telah dimodifikasi:
```python
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')
# 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_bass_entry.delete(0, tk.END)
gn_a_bass_entry.insert(0, result["Gugusan_nada"])
except Exception as e:
print("Error:", e)
# Fungsi untuk mengurangi setiap angka digit pada string
def adjust_value(value, pengurang):
adjusted_value = ''.join(str((int(digit) - pengurang) % 10) for digit in value if digit.isdigit())
return adjusted_value
# Fungsi untuk menerapkan pengurangan tambahan berdasarkan progres
def apply_progres_adjustment(value, progres_selected):
if progres_selected == 1:
return adjust_value(value, 0)
elif progres_selected == 2:
return adjust_value(value, 1)
elif progres_selected == 3:
return adjust_value(value, 2)
return value
# Pengurangan pada Bass dan Trebel tergantung pada Level Gn dan Progres
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_Bass
query = """
SELECT Gugusan_nada
FROM Gn_A_Bass
WHERE ID = ?
"""
cursor.execute(query, (id,))
data = cursor.fetchone()
gugusan_nada = data[0]
# Tentukan pengurang berdasarkan progres
pengurang = progres_selected
# Sesuaikan nilai Bass dan Trebel dengan pengurang progres
gugusan_nada = adjust_value(gugusan_nada, pengurang)
conn.close()
# Return hasil
result = {
"Gugusan_nada": gugusan_nada
}
return result
# 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_Bass", 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_bass_label = tk.Label(bottom_frame, text="Bass")
gn_a_bass_label.grid(row=10, column=1, padx=10, pady=5)
gn_a_bass_entry = tk.Entry(bottom_frame, bg="white")
gn_a_bass_entry.grid(row=11, column=1, padx=10, pady=5)
root.mainloop()
```
### Penjelasan Perubahan:
1. **Fungsi `adjust_value`**:
- Fungsi ini telah dimodifikasi untuk mengurangi **setiap digit angka** dari string `gugusan_nada`.
- Setiap digit angka dalam string diambil, dikurangi dengan nilai `pengurang`, dan hasilnya diatur dalam rentang 0-9 menggunakan modulo 10 untuk menghindari hasil negatif.
- Ini memastikan bahwa setiap angka digit dalam `gugusan_nada` dikurangi sesuai dengan nilai progres yang dipilih.
2. **Penggunaan Fungsi `apply_progres_adjustment`**:
- Fungsi ini diterapkan untuk menentukan pengurangan berdasarkan nilai progres yang dipilih oleh pengguna (misalnya 1, 2, atau 3).
Dengan modifikasi ini, data `gugusan_nada` seperti "234" akan dikurangi sesuai progres. Misalnya, jika progres 2 dipilih, maka hasilnya menjadi "123", atau jika progres 3, hasilnya menjadi "012".
Tolong lanjutkan pada kondisi level_gn yang berubah:
# 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
Berikut adalah kelanjutan dari modifikasi kode dengan tambahan logika berdasarkan nilai `level_gn_selected`, di mana nilai pengurang akan berbeda tergantung pada level yang dipilih. Saya juga menambahkan kondisi di dalam fungsi `level_gn` untuk menentukan pengurang berdasarkan perubahan `level_gn`.
### Modifikasi Kode:
```python
# Fungsi untuk menerapkan pengurangan tambahan berdasarkan progres dan level_gn
def apply_progres_and_level_adjustment(value, progres_selected, 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
# Kombinasikan pengurangan berdasarkan progres
pengurang += progres_selected - 1
# Sesuaikan nilai string berdasarkan pengurang
adjusted_value = ''.join(str((int(digit) - pengurang) % 10) for digit in value if digit.isdigit())
return adjusted_value
# Pengurangan pada Bass dan Trebel tergantung pada Level Gn dan Progres
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_Bass
query = """
SELECT Gugusan_nada
FROM Gn_A_Bass
WHERE ID = ?
"""
cursor.execute(query, (id,))
data = cursor.fetchone()
gugusan_nada = data[0]
# Sesuaikan nilai Bass dengan pengurang yang didapat dari kombinasi level_gn dan progres
gugusan_nada = apply_progres_and_level_adjustment(gugusan_nada, progres_selected, level_gn_selected)
conn.close()
# Return hasil
result = {
"Gugusan_nada": gugusan_nada
}
return result
# 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)
```
### Penjelasan Tambahan:
1. **Fungsi `apply_progres_and_level_adjustment`**:
- Fungsi ini digunakan untuk menentukan **pengurang** berdasarkan `level_gn_selected` dan juga menambahkan pengurangan tambahan berdasarkan nilai `progres_selected`.
- Logika pengurang dari `level_gn_selected` sudah ditambahkan, dengan rincian:
- Jika `level_gn_selected` berada di [1, 2, 3], pengurangnya adalah 0.
- Jika berada di [4, 5, 6], pengurangnya adalah 1, dan seterusnya.
- Pengurangan berdasarkan progres dihitung sebagai tambahan pengurang dari level, yaitu `progres_selected - 1`.
- Setiap digit pada data `gugusan_nada` akan dikurangi sesuai pengurang dan disesuaikan dalam rentang 0–9 dengan modulo 10.
2. **Fungsi `level_gn`**:
- Fungsi ini mengambil data `gugusan_nada` dari database dan kemudian menerapkan pengurangan berdasarkan level dan progres menggunakan fungsi `apply_progres_and_level_adjustment`.
Dengan modifikasi ini, setiap perubahan pada `level_gn` akan diterapkan pada nilai `gugusan_nada` sesuai dengan progres yang dipilih.
Setiap pengurangan angka pada digit hanya terjadi pada perubahan level_gn, berikut:
def apply_progres_and_level_adjustment(value, progres_selected, 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
Sedangkan pengurangan angka pada digit tidak terjadi pada perubahan progres (data Bass di progres 1, atau progres 2, atau progres 3 adalah tetap)
Baik, jadi pengurangan angka hanya terjadi ketika ada perubahan pada `level_gn_selected`, sementara perubahan pada `progres_selected` tidak mempengaruhi pengurangan digit dalam data kolom `gugusan_nada`. Jadi progres hanya berfungsi sebagai penanda atau atribut, dan tidak akan mengubah nilai digit pada data.
Saya akan memodifikasi fungsi sesuai permintaan tersebut.
### Kode yang Dimodifikasi:
```python
# 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_Bass
query = """
SELECT Gugusan_nada
FROM Gn_A_Bass
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
# 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)
```
### Penjelasan Kode:
1. **Fungsi `apply_level_adjustment`**:
- Fungsi ini hanya melakukan pengurangan pada digit berdasarkan **level_gn_selected** tanpa memperhitungkan `progres_selected`. Pengurang ditentukan oleh rentang level Gn yang dipilih.
- Jika `level_gn_selected` di antara [1, 2, 3], maka tidak ada pengurangan (pengurang = 0).
- Untuk level yang lebih tinggi, pengurangan bertambah, yaitu 1 untuk level [4, 5, 6], 2 untuk level [7, 8, 9], dan 3 untuk level [10, 11, 12].
- Setiap digit dalam nilai `gugusan_nada` akan dikurangi sesuai pengurang tersebut dan diubah menjadi format modulo 10 (agar tidak menjadi negatif dan tetap dalam rentang 0-9).
2. **Fungsi `level_gn`**:
- Fungsi ini mengambil data `gugusan_nada` dari database dan menerapkan fungsi `apply_level_adjustment` untuk menyesuaikan data hanya berdasarkan **level_gn_selected**, sedangkan `progres_selected` tidak mengubah nilai digit.
Dengan modifikasi ini, pengurangan angka pada digit hanya akan terjadi saat ada perubahan level Gn, dan nilai pada `progres_selected` tidak akan mempengaruhi nilai dari data Bass.
Mantap. Hasil akhir dari kode untuk file CRUD_Gn_A_Bass.py adalah berikut ini:
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import sqlite3
# Initialize the main window
root = tk.Tk()
root.geometry("690x1390")
root.title("Arah Arus Musik Gn_Cyan_Atas dan Sub_Gn_Cyan_Atas")
# 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')
# 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_bass_entry.delete(0, tk.END)
gn_a_bass_entry.insert(0, result["Gugusan_nada"])
except Exception as e:
print("Error:", e)
# 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_Bass
query = """
SELECT Gugusan_nada
FROM Gn_A_Bass
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
# 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_Bass", 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_bass_label = tk.Label(bottom_frame, text="Bass")
gn_a_bass_label.grid(row=
10, column=1, padx=10, pady=5)
gn_a_bass_entry = tk.Entry(bottom_frame, bg="white")
gn_a_bass_entry.grid(row=11, column=1, padx=10, pady=5)
root.mainloop()
Kode yang kamu buat sudah terstruktur dengan baik, dengan beberapa elemen penting seperti validasi `Level_Gn`, pengaturan ID, dan pengambilan data dari database `Gn_A_Bass`. Logika pengurangan angka berdasarkan level juga sudah diterapkan dengan benar.
Berikut adalah beberapa poin penting dari kode:
1. **Validasi `Level_Gn`**: Fungsi `validate_level_gn` memastikan bahwa input `Level_Gn` sesuai dengan range yang diizinkan (1-12), dan menetapkan ID berdasarkan `Level_Gn`.
2. **Pengambilan dan Penyesuaian Gugusan Nada**: Fungsi `level_gn` mengambil data `Gugusan_nada` dari tabel `Gn_A_Bass` berdasarkan ID dan menyesuaikan nilainya berdasarkan `Level_Gn`, tanpa memperhatikan perubahan progres.
3. **Entry Protection**: Fungsi `set_id_entry` mengunci entry ID setelah ID valid dimasukkan, sehingga pengguna tidak bisa mengubah ID secara manual.
4. **Pengurangan Nilai Berdasarkan Level_Gn**: Fungsi `apply_level_adjustment` melakukan penyesuaian digit-digit angka dalam `Gugusan_nada` dengan pengurangan yang tepat, sesuai dengan level yang dipilih.
Semua ini terintegrasi dengan baik pada elemen antarmuka tkinter untuk memudahkan pengguna dalam memasukkan data dan melihat hasilnya.
Jika ada tambahan atau revisi lain yang dibutuhkan untuk memperluas fungsionalitas, tinggal menyesuaikan kode di atas dengan tambahan fitur yang kamu inginkan!
Pada kode tolong tambahkan fungsi untuk membersihkan dan mereset entry, berikut:
finally:
# Bersihkan atau reset entry dan combobox setelah data dipilih
entry_level_gn.delete(0, 'end')
entry_id.delete(0, 'end')
progres_combobox.set('')
mode_combobox.set('')
Berikut adalah modifikasi kode untuk menambahkan fungsi membersihkan dan mereset entry dan combobox setelah data dipilih. Kode ini ditempatkan di dalam blok `finally` di dalam fungsi `pilih_nada()` agar setelah pemilihan nada, semua field entry akan otomatis direset.
```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
gn_a_bass_entry.delete(0, tk.END)
gn_a_bass_entry.insert(0, result["Gugusan_nada"])
except Exception as e:
print("Error:", e)
finally:
# Bersihkan atau reset entry dan combobox setelah data dipilih
entry_level_gn.delete(0, 'end')
entry_id.delete(0, 'end')
progres_combobox.set('')
mode_combobox.set('')
```
Penjelasan tambahan:
- `entry_level_gn.delete(0, 'end')` membersihkan input pada entry level_gn.
- `entry_id.delete(0, 'end')` membersihkan input pada entry ID.
- `progres_combobox.set('')` mengatur combobox progres agar kembali kosong.
- `mode_combobox.set('')` mengatur combobox mode agar kembali kosong.
Fungsi ini memastikan semua input direset setiap kali pengguna selesai memilih nada.
Inputan di entry_id yang "read only" belum mau kembali kosong
Agar input di `entry_id` yang berstatus "read only" bisa kembali dihapus atau direset, kamu harus mengatur ulang status entry menjadi `normal` sebelum menghapus isinya, dan kemudian bisa mengaturnya kembali menjadi "read only" setelah proses reset selesai.
Berikut adalah modifikasi yang dapat kamu lakukan pada fungsi `reset_entries()` agar `entry_id` dapat kembali kosong meskipun statusnya "read only":
```python
# Fungsi untuk mereset entries jika input level_gn tidak valid
def reset_entries():
entry_level_gn.delete(0, tk.END)
# Mengatur entry_id menjadi normal agar bisa dihapus
entry_id.config(state='normal')
entry_id.delete(0, tk.END)
# Setelah direset, kembalikan entry_id ke mode read only
entry_id.config(state='readonly')
# Reset combobox
progres_combobox.set('')
mode_combobox.set('')
```
Kemudian, tambahkan juga pada blok `finally` di fungsi `pilih_nada()` untuk membersihkan semua input:
```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
gn_a_bass_entry.delete(0, tk.END)
gn_a_bass_entry.insert(0, result["Gugusan_nada"])
except Exception as e:
print("Error:", e)
finally:
# Bersihkan atau reset entry dan combobox setelah data dipilih
entry_level_gn.delete(0, 'end')
entry_id.config(state='normal') # Atur kembali ke normal
entry_id.delete(0, 'end') # Hapus isinya
entry_id.config(state='readonly') # Kembali jadi read only
progres_combobox.set('')
mode_combobox.set('')
```
Dengan demikian, ketika kamu memanggil `reset_entries()` atau membersihkan input di dalam `finally`, entry ID yang berstatus "read only" bisa dihapus dan di-reset dengan benar, lalu kembali menjadi "read only" setelahnya.
Selesai ....
Komentar
Posting Komentar
This Message