FUNGSI ADJUSTMENT
Tolong perbaiki kode berikut:
# Fungsi untuk menyesuaikan nilai sub trebel berdasarkan progres
def adjust_sub_trebel(sub_trebel_value, adjustment):
adjusted_sub_trebel = ''.join(str(max(0, int(char) - adjustment)) if char.isdigit() else char for char in sub_trebel_value)
return adjusted_sub_trebel def adjust_sub_trebel(sub_trebel_value, adjustment):
adjusted_sub_trebel = ''.join(str(max(0, int(char) - adjustment)) if char.isdigit() else char for char in sub_trebel_value)
return adjusted_sub_trebel
def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_sub_gn_cyan_atas, index_trebel):
if progres_selected == 1:
if mode_selected in ["naik", "turun"]:
return data_sub_gn_cyan_atas[index_trebel]
elif progres_selected == 2:
if mode_selected in ["naik", "turun"]:
entry_sub_trebel.delete(0, tk.END)
entry_sub_trebel.insert(0, adjust_sub_trebel_value(data_sub_gn_cyan_atas[progres_selected - 1], 1))
elif progres_selected == 3:
if mode_selected in ["naik", "turun"]:
entry_sub_trebel.delete(0, tk.END)
entry_sub_trebel.insert(0, adjust_sub_trebel_value(data_sub_gn_cyan_atas[progres_selected - 2], 2))
return None
Untuk progres_selected 2, dan 3 dengan menggunakan fungsi adjust_sub_trebel.
Berikut adalah versi perbaikan dari kode yang Anda berikan:
```python
# Fungsi untuk menyesuaikan nilai sub trebel berdasarkan progres
def adjust_sub_trebel(sub_trebel_value, adjustment):
adjusted_sub_trebel = ''.join(
str(max(0, int(char) - adjustment)) if char.isdigit() else char
for char in sub_trebel_value
)
return adjusted_sub_trebel
# Fungsi untuk memproses data trebel berdasarkan level, progres, dan mode
def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_sub_gn_cyan_atas, index_trebel):
if progres_selected == 1:
if mode_selected in ["naik", "turun"]:
return data_sub_gn_cyan_atas[index_trebel]
elif progres_selected == 2:
if mode_selected in ["naik", "turun"]:
return adjust_sub_trebel(data_sub_gn_cyan_atas[index_trebel], 1)
elif progres_selected == 3:
if mode_selected in ["naik", "turun"]:
return adjust_sub_trebel(data_sub_gn_cyan_atas[index_trebel], 2)
return None
```
### Penjelasan Perbaikan:
1. **`adjust_sub_trebel`:**
- Fungsi ini tidak diubah karena sudah sesuai. Ia akan mengurangi setiap digit numerik dalam string sesuai dengan nilai `adjustment`, dan memastikan tidak ada digit yang kurang dari 0.
2. **`proses_trebel`:**
- Pada progres 1, data dari `data_sub_gn_cyan_atas` akan langsung dikembalikan tanpa modifikasi, sesuai logika yang Anda inginkan.
- Pada progres 2 dan 3, fungsi `adjust_sub_trebel` dipanggil dengan nilai `adjustment` yang sesuai (1 untuk progres 2, dan 2 untuk progres 3).
- Pada kedua progres tersebut, data dari `data_sub_gn_cyan_atas[index_trebel]` diproses dengan `adjust_sub_trebel` sebelum dikembalikan.
3. **Penghapusan Redundansi:**
- Redundansi pada blok `if` dan `elif` untuk progres 2 dan 3 telah dihilangkan dengan langsung mengembalikan hasil dari `adjust_sub_trebel`.
Dengan kode ini, nilai Trebel akan disesuaikan dengan pengurangan yang tepat berdasarkan progres dan mode yang dipilih.
Pada kode tersebut, apakah fungsi adjust_sub_trebel berfungsi untuk mengurangi setiap digit angka sebesar nilai adjustment yang diberikan. Tolong pastikan hasil digit bisa kurang dari 0
Pada kode yang sebelumnya saya berikan, fungsi `adjust_sub_trebel` sudah melakukan pengurangan setiap digit angka sebesar nilai `adjustment` yang diberikan, namun digit tersebut tidak akan kurang dari 0 karena digunakan fungsi `max(0, int(char) - adjustment)` untuk mencegah nilai negatif. Jika Anda menginginkan digit angka dapat menjadi negatif setelah pengurangan, kita bisa menghapus batasan tersebut. Berikut adalah modifikasi kodenya:
```python
# Fungsi untuk menyesuaikan nilai sub trebel berdasarkan progres, memungkinkan hasil digit kurang dari 0
def adjust_sub_trebel(sub_trebel_value, adjustment):
adjusted_sub_trebel = ''.join(
str(int(char) - adjustment) if char.isdigit() else char
for char in sub_trebel_value
)
return adjusted_sub_trebel
```
### Penjelasan Perubahan:
- Pada fungsi `adjust_sub_trebel`, saya menghapus fungsi `max(0, ...)`, sehingga sekarang nilai digit dapat kurang dari 0 jika hasil pengurangannya negatif.
Dengan perubahan ini, setiap digit dalam `sub_trebel_value` akan dikurangi oleh `adjustment`, dan hasilnya bisa menjadi angka negatif jika digit tersebut lebih kecil dari nilai `adjustment`.
# Fungsi untuk menyesuaikan nilai trebel berdasarkan progres
def adjust_trebel(trebel_value, adjustment):
adjusted_trebel = ''.join(
str(max(0, int(char) - adjustment)) if char.isdigit() else char
for char in trebel_value
)
return adjusted_trebel
# Fungsi untuk memproses data trebel berdasarkan level, progres, dan mode
def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel):
if progres_selected == 1:
if mode_selected in ["naik", "turun"]:
return data_gn_cyan_atas[index_trebel]
elif progres_selected == 2:
if mode_selected in ["naik"]:
return adjust_trebel(data_gn_cyan_atas[index_trebel], 1)
if mode_selected in ["turun"]:
return adjust_trebel(data_gn_cyan_atas[index_trebel], 1)
elif progres_selected == 3:
if mode_selected in ["naik"]:
return adjust_trebel(data_gn_cyan_atas[index_trebel], 2)
if mode_selected in ["turun"]:
return adjust_trebel(data_gn_cyan_atas[index_trebel], 2)
return None
Tolong modifikasi kode tersebut untuk pengambilan data Trebel dari kolom Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 dari tabel Gn_Cyan_Atas, dan menampilkannya pada entry_trebel.
Contoh : Bila data kolom Trebel_1 di Trebel_1 id 1 di progres 2 mode Naik, maka data yang ditampilkan adalah data Trebel_1 id 2 yang setiap digit angkanya dikurang 2.
Bila data Trebel_1 id 1 di progres 2 mode Turun, maka data yang ditampilkan adalah data Trebel_1 id 3 yang setiap digit angkanya dikurang 3.
Bila data Trebel_1 id 1 di progres 3 mode Naik, maka data yang ditampilkan adalah data Trebel_1 id 3 yang setiap digit angkanya dikurang 4.
Bila data Trebel_1 id 1 di progres 3 mode Turun, maka data yang ditampilkan adalah data Trebel_1 id 2 yang setiap digit angkanya dikurang 3.
Hal yang di atas berlaku untuk perlakuan yang sama pada data di kolom Trebel_2, Trebel_3, Trebel_4, dan Trebel_5.
Kalau memungkinkan pada kode bisa ditambahkan fungsi adjust_trebel_value, seperti kode berikut:
# Fungsi untuk menyesuaikan nilai sub trebel berdasarkan progres
def adjust_trebel_value(trebel_value, progres):
if trebel_value.isdigit():
# Menyesuaikan nilai dengan mengurangi setiap digit dengan progres
adjusted_value = ''.join(str(int(char) - progres) if char.isdigit() else char for char in trebel_value)
else:
adjusted_value
= trebel_value
return adjusted_value
Untuk memodifikasi kode agar sesuai dengan skenario yang Anda sebutkan, berikut adalah perubahan yang perlu dilakukan. Kode ini akan mengambil data Trebel dari kolom `Trebel_1`, `Trebel_2`, `Trebel_3`, `Trebel_4`, dan `Trebel_5` dari tabel `Gn_Cyan_Atas`, lalu menampilkannya pada `entry_trebel` sesuai dengan progres dan mode yang dipilih, sambil melakukan penyesuaian nilai sesuai dengan progres yang telah ditentukan.
### Modifikasi Kode
```python
# Fungsi untuk menyesuaikan nilai trebel berdasarkan progres, mengurangi nilai setiap digit
def adjust_trebel_value(trebel_value, adjustment):
if trebel_value.isdigit():
adjusted_value = ''.join(str(int(char) - adjustment) for char in trebel_value)
else:
adjusted_value = trebel_value
return adjusted_value
# Fungsi untuk memproses data trebel berdasarkan level, progres, dan mode
def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel):
adjustment = 0
target_index = index_trebel
if progres_selected == 2:
if mode_selected == "naik":
adjustment = 2
target_index = 1 # Pindah ke ID 2
elif mode_selected == "turun":
adjustment = 3
target_index = 2 # Pindah ke ID 3
elif progres_selected == 3:
if mode_selected == "naik":
adjustment = 4
target_index = 2 # Pindah ke ID 3
elif mode_selected == "turun":
adjustment = 3
target_index = 1 # Pindah ke ID 2
# Mengambil nilai trebel dari kolom sesuai dengan target index
trebel_value = data_gn_cyan_atas[target_index][index_trebel]
# Menyesuaikan nilai trebel berdasarkan adjustment
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
return adjusted_trebel
```
### Penjelasan Perubahan:
1. **Fungsi `adjust_trebel_value`**:
- Fungsi ini mengurangi setiap digit dalam nilai trebel dengan `adjustment` yang ditentukan oleh progres yang dipilih.
2. **Fungsi `proses_trebel`**:
- Berdasarkan `progres_selected` dan `mode_selected`, kode akan menetapkan nilai `adjustment` dan `target_index`.
- `target_index` digunakan untuk mengambil data trebel yang sesuai dari data `Gn_Cyan_Atas` (misalnya, pindah ke ID 2 atau 3).
- Nilai `adjustment` akan menentukan seberapa besar pengurangan pada digit nilai trebel.
- Hasil penyesuaian nilai trebel kemudian dikembalikan.
### Penggunaan Pada Entry Field
Misalkan Anda ingin menampilkan nilai yang telah diproses pada `entry_trebel`, Anda dapat menggunakan fungsi `proses_trebel` sebagai berikut:
```python
entry_trebel.delete(0, tk.END)
entry_trebel.insert(0, proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel))
```
### Catatan Tambahan:
- Kode di atas mengasumsikan bahwa `data_gn_cyan_atas` adalah struktur data (misalnya, daftar dua dimensi atau DataFrame) yang menyimpan nilai-nilai dari kolom `Trebel_1`, `Trebel_2`, dll., di mana `index_trebel` mengacu pada kolom yang relevan.
- Pengambilan data dilakukan berdasarkan `target_index`, yang dipilih berdasarkan logika yang Anda jelaskan untuk setiap kombinasi progres dan mode.
Silakan sesuaikan lebih lanjut jika ada detail spesifik dari struktur data atau logika tambahan yang perlu diterapkan.
Tolong modifikasi kode berikut:
# Fungsi untuk menyesuaikan nilai trebel berdasarkan progres, mengurangi nilai setiap digit
def adjust_trebel(trebel_value, adjustment):
if trebel_value.isdigit():
adjusted_value = ''.join(str(int(char) - adjustment) for char in trebel_value)
else:
adjusted_value = trebel_value
return adjusted_value
# Fungsi untuk memproses Trebel berdasarkan level_gn, progres, mode, dan data
def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel):
adjustment = 0
target_id = index_trebel
# Menentukan index_id berdasarkan level_gn_selected
if level_gn_selected in [1, 4, 6, 11]:
index_id = 0
elif level_gn_selected in [2, 7, 9, 12]:
index_id = 1
elif level_gn_selected in [3, 5, 8, 10]:
index_id = 2
else:
messagebox.showerror("Error", "Level Gn tidak valid.")
return
if progres_selected == 1:
if mode_selected in ["naik", "turun"]:
return data_gn_cyan_atas[index_trebel]
if progres_selected == 2:
if mode_selected == "naik":
adjustment = 2
target_id = 1 # Pindah ke ID 2
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif mode_selected == "turun":
adjustment = 3
target_id = 2 # Pindah ke ID 3
entry_trebel.delete(0, tk.END)
entry_trebel.insert(0, proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel))
elif progres_selected == 3:
if mode_selected == "naik":
adjustment = 4
target_id = 2 # Pindah ke ID 3
entry_trebel.delete(0, tk.END)
elif mode_selected == "turun":
adjustment = 3
target_id = 1 # Pindah ke ID 2
entry_trebel.delete(0, tk.END)
# Mengambil nilai trebel dari kolom sesuai dengan target index
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
# Menyesuaikan nilai trebel berdasarkan adjustment
adjusted_trebel = adjust_trebel(trebel_value, adjustment)
return adjusted_trebel
Modifikasi kode tersebut untuk pengambilan setiap data Trebel dari sebuah sel dari kolom Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 dari tabel Gn_Cyan_Atas, dan menampilkannya pada entry_trebel. Contoh : Bila data kolom Trebel_1 di Trebel_1 id 1 di progres 2 mode Naik, maka data yang ditampilkan adalah data Trebel_1 id 2 yang setiap digit angkanya dikurang 2. Bila data Trebel_1 id 1 di progres 2 mode Turun, maka data yang ditampilkan adalah data Trebel_1 id 3 yang setiap digit angkanya dikurang 3. Bila data Trebel_1 id 1 di progres 3 mode Naik, maka data yang ditampilkan adalah data Trebel_1 id 3 yang setiap digit angkanya dikurang 4. Bila data Trebel_1 id 1 di progres 3 mode Turun, maka data yang ditampilkan adalah data Trebel_1 id 2 yang setiap digit angkanya dikurang 3. Hal yang di atas berlaku untuk perlakuan yang sama pada data di kolom Trebel_2, Trebel_3, Trebel_4, dan Trebel_5. Kalau memungkinkan pada kode bisa menggunakan index_id.
Berikut adalah kode yang telah dimodifikasi untuk pengambilan data dari kolom `Trebel_1`, `Trebel_2`, `Trebel_3`, `Trebel_4`, dan `Trebel_5` dari tabel `Gn_Cyan_Atas`, dengan memperhitungkan `progres_selected`, `mode_selected`, dan `level_gn_selected`. Kode ini juga menggunakan `index_id` untuk memilih ID yang tepat berdasarkan `level_gn_selected`.
```python
import tkinter as tk
from tkinter import messagebox
# Fungsi untuk menyesuaikan nilai trebel berdasarkan progres, mengurangi nilai setiap digit
def adjust_trebel(trebel_value, adjustment):
adjusted_value = ''.join(
str(max(0, int(char) - adjustment)) if char.isdigit() else char
for char in trebel_value
)
return adjusted_value
# Fungsi untuk memproses Trebel berdasarkan level_gn, progres, mode, dan data
def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel):
adjustment = 0
target_id = index_trebel
# Menentukan index_id berdasarkan level_gn_selected
if level_gn_selected in [1, 4, 6, 11]:
index_id = 0
elif level_gn_selected in [2, 7, 9, 12]:
index_id = 1
elif level_gn_selected in [3, 5, 8, 10]:
index_id = 2
else:
messagebox.showerror("Error", "Level Gn tidak valid.")
return
if progres_selected == 1:
if mode_selected in ["naik", "turun"]:
return data_gn_cyan_atas[index_id][index_trebel]
elif progres_selected == 2:
if mode_selected == "naik":
adjustment = 2
target_id = 1 # Pindah ke ID 2
elif mode_selected == "turun":
adjustment = 3
target_id = 2 # Pindah ke ID 3
elif progres_selected == 3:
if mode_selected == "naik":
adjustment = 4
target_id = 2 # Pindah ke ID 3
elif mode_selected == "turun":
adjustment = 3
target_id = 1 # Pindah ke ID 2
# Mengambil nilai trebel dari kolom sesuai dengan target ID
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
# Menyesuaikan nilai trebel berdasarkan adjustment
adjusted_trebel = adjust_trebel(trebel_value, adjustment)
return adjusted_trebel
# Penggunaan Pada Entry Field (Misal entry_trebel adalah Entry Widget)
def update_entry_trebel(entry_trebel, level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel):
entry_trebel.delete(0, tk.END)
adjusted_trebel = proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel)
entry_trebel.insert(0, adjusted_trebel)
# Contoh data (Misalnya ini adalah tabel Gn_Cyan_Atas)
data_gn_cyan_atas = [
# Kolom Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5
['123', '234', '345', '456', '567'], # ID 1
['234', '345', '456', '567', '678'], # ID 2
['345', '456', '567', '678', '789'] # ID 3
]
# Contoh penggunaan
root = tk.Tk()
entry_trebel = tk.Entry(root)
entry_trebel.pack()
level_gn_selected = 2
progres_selected = 2
mode_selected = "naik"
index_trebel = 0 # Misalnya Trebel_1
update_entry_trebel(entry_trebel, level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel)
root.mainloop()
```
### Penjelasan:
1. **Index ID**: `index_id` digunakan untuk menentukan ID data yang diambil berdasarkan `level_gn_selected`.
2. **Penyesuaian Nilai**: Fungsi `adjust_trebel` digunakan untuk mengurangi setiap digit dari nilai trebel dengan `adjustment` yang dihitung berdasarkan `progres_selected` dan `mode_selected`.
3. **Proses Data**: Fungsi `proses_trebel` memproses data sesuai dengan aturan yang ditetapkan dan mengembalikan nilai trebel yang telah disesuaikan.
4. **Update Entry Field**: Fungsi `update_entry_trebel` memperbarui `entry_trebel` dengan nilai trebel yang telah diproses.
Jika ada yang perlu disesuaikan atau diperbaiki lagi, silakan beri tahu saya!
Tolong perbaiki kode berikut:
# Fungsi untuk menyesuaikan nilai trebel berdasarkan progres, mengurangi nilai setiap digit
def adjust_trebel(trebel_value, adjustment):
if trebel_value.isdigit():
adjusted_value = ''.join(str(int(char) - adjustment) for char in trebel_value)
else:
adjusted_value = trebel_value
return adjusted_value
# Fungsi untuk memproses Trebel berdasarkan level_gn, progres, mode, dan data
def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel):
adjustment = 0
target_id = 0
# Menentukan index_id berdasarkan level_gn_selected
if level_gn_selected in [1, 4, 6, 11]:
index_id = 0
elif level_gn_selected in [2, 7, 9, 12]:
index_id = 1
elif level_gn_selected in [3, 5, 8, 10]:
index_id = 2
else:
messagebox.showerror("Error", "Level Gn tidak valid.")
return
# Menentukan target_id berdasarkan index_id
if mode_selected == "naik":
if progres_selected == "2":
target_id = index_id + 1
if target_id == "3":
index_id = 0
if progres_selected == "3":
target_id = index_id + 2
if target_id == "3":
index_id = 0
if target_id == "4":
index_id = 1
elif mode_selected == "turun":
if progres_selected == "2":
target_id = index_id - 1
if target_id == "-1":
index_id = 2
if progres_selected == "3":
target_id = index_id - 2
if target_id == "-2":
index_id = 1
if target_id == "-1":
index_id = 2
else:
messagebox.showerror("Error", "Index_id tidak valid.")
return
if progres_selected == 1:
if mode_selected in ["naik", "turun"]:
return data_gn_cyan_atas[index_trebel]
if level_gn_selected == [1, 4, 6, 11]:
index_id = 0
if progres_selected == 2:
if mode_selected == "naik":
adjustment = 2
target_id = 1 # Pindah ke ID 2
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif mode_selected == "turun":
adjustment = 3
target_id = 2 # Pindah ke ID 3
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif progres_selected == 3:
if mode_selected == "naik":
adjustment = 4
target_id = 2 # Pindah ke ID 3
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif mode_selected == "turun":
adjustment = 3
target_id = 1 # Pindah ke ID 2
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
if level_gn_selected == [2, 7, 9, 12]:
index_id = 1
if progres_selected == 2:
if mode_selected == "naik":
adjustment = 2
target_id = 2 # Pindah ke ID 2
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif mode_selected == "turun":
adjustment = 0
target_id = 0 # Pindah ke ID 3
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif progres_selected == 3:
if mode_selected == "naik":
adjustment = 1
target_id = 0 # Pindah ke ID 3
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif mode_selected == "turun":
adjustment = 3
target_id = 2 # Pindah ke ID 2
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
if level_gn_selected == [3, 5, 8, 10]:
index_id = 2
if progres_selected == 2:
if mode_selected == "naik":
adjustment = -1
target_id = 0 # Pindah ke ID 2
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif mode_selected == "turun":
adjustment = 0
target_id = 1 # Pindah ke ID 3
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif progres_selected == 3:
if mode_selected == "naik":
adjustment = 1
target_id = 1 # Pindah ke ID 3
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif mode_selected == "turun":
adjustment = 0
target_id = 0 # Pindah ke ID 2
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
# Mengambil nilai trebel dari kolom sesuai dengan target index
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
# Menyesuaikan nilai trebel berdasarkan adjustment
adjusted_trebel = adjust_trebel(trebel_value, adjustment)
return adjusted_trebel
Agar supaya data yang diambil dari tabel adalah berdasarkan index_id, kemudian data ditampilkan berdasarkan target_id kemudian disesuaikan dengan nilai adjustment
Saya akan membantu memperbaiki kode Anda agar sesuai dengan logika yang Anda inginkan. Berikut adalah beberapa perbaikan dan penjelasan yang dilakukan:
1. Memastikan variabel `index_id` di-set dengan benar berdasarkan `level_gn_selected`.
2. Memperbaiki logika penentuan `target_id` berdasarkan `index_id`, `progres_selected`, dan `mode_selected`.
3. Memastikan nilai `trebel_value` diambil dari `data_gn_cyan_atas` menggunakan `target_id`.
4. Menyesuaikan nilai `trebel_value` menggunakan fungsi `adjust_trebel`.
Berikut adalah kode yang telah diperbaiki:
```python
# Fungsi untuk menyesuaikan nilai trebel berdasarkan progres, mengurangi nilai setiap digit
def adjust_trebel(trebel_value, adjustment):
if trebel_value.isdigit():
adjusted_value = ''.join(str((int(char) - adjustment) % 10) for char in trebel_value)
else:
adjusted_value = trebel_value
return adjusted_value
# Fungsi untuk memproses Trebel berdasarkan level_gn, progres, mode, dan data
def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel):
adjustment = 0
index_id = 0
# Menentukan index_id berdasarkan level_gn_selected
if level_gn_selected in [1, 4, 6, 11]:
index_id = 0
elif level_gn_selected in [2, 7, 9, 12]:
index_id = 1
elif level_gn_selected in [3, 5, 8, 10]:
index_id = 2
else:
messagebox.showerror("Error", "Level Gn tidak valid.")
return
# Menentukan target_id berdasarkan index_id, progres_selected, dan mode_selected
if mode_selected == "naik":
if progres_selected == "2":
target_id = (index_id + 1) % 3
elif progres_selected == "3":
target_id = (index_id + 2) % 3
elif mode_selected == "turun":
if progres_selected == "2":
target_id = (index_id - 1) % 3
elif progres_selected == "3":
target_id = (index_id - 2) % 3
else:
messagebox.showerror("Error", "Mode tidak valid.")
return
# Menentukan nilai adjustment berdasarkan level_gn_selected, progres_selected, dan mode_selected
if progres_selected == "1":
adjustment = 0 # Adjustment tidak diperlukan untuk progres 1
elif progres_selected == "2":
if mode_selected == "naik":
adjustment = 2 if level_gn_selected in [1, 4, 6, 11] else 1
elif mode_selected == "turun":
adjustment = 3 if level_gn_selected in [1, 4, 6, 11] else 0
elif progres_selected == "3":
if mode_selected == "naik":
adjustment = 4 if level_gn_selected in [1, 4, 6, 11] else 1
elif mode_selected == "turun":
adjustment = 3 if level_gn_selected in [1, 4, 6, 11] else 0
# Mengambil nilai trebel dari data_gn_cyan_atas berdasarkan target_id dan index_trebel
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
# Menyesuaikan nilai trebel berdasarkan adjustment
adjusted_trebel = adjust_trebel(trebel_value, adjustment)
return adjusted_trebel
```
### Penjelasan:
1. **Fungsi `adjust_trebel`:** Kode ini memastikan bahwa setiap digit dalam `trebel_value` dikurangi dengan `adjustment` dan hasilnya tetap berada dalam rentang 0-9.
2. **Logika Penentuan `target_id`:** Saya menggunakan operator modulus (`%`) untuk memastikan bahwa `target_id` tetap dalam rentang yang valid (0, 1, 2).
3. **Pengambilan dan Penyesuaian Nilai `trebel`:** Data `trebel_value` diambil dari `data_gn_cyan_atas` berdasarkan `target_id` dan kemudian disesuaikan dengan `adjustment`.
Silakan uji kode ini untuk memastikan bahwa fungsi `proses_trebel` berjalan sesuai dengan logika yang Anda inginkan. Jika ada yang perlu disesuaikan lebih lanjut, saya siap membantu.
Tolong perbaiki kode 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")
# Buat frame_top di dalam inner_frame
frame_top = tk.Frame(root)
frame_top.pack(pady=10) # Pengaturan padding agar tidak terlalu dekat dengan elemen lainnya
frame_top.grid_columnconfigure(0, minsize=-20) # Tambahkan kolom negatif (menggeser ke kiri)
# Definisikan entry untuk level_gn dan id, dan combobox di bawah
label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")
label_level_gn_selected.grid(row=1, column=0, padx=0, pady=7)
entry_level_gn = tk.Entry(frame_top)
entry_level_gn.grid(row=1, column=1, padx=0, pady=7)
label_id_selected = tk.Label(frame_top, text="ID:")
label_id_selected.grid(row=2, column=0, padx=0, pady=7)
entry_id = tk.Entry(frame_top)
entry_id.grid(row=2, column=1, padx=0, pady=7)
label_progres = tk.Label(frame_top, text="Progres:")
label_progres.grid(row=3, column=0, padx=0, pady=7)
progres_var = tk.StringVar()
progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)
progres_combobox['values'] = (1, 2, 3)
progres_combobox.grid(row=3, column=1, padx=0, pady=7)
label_mode = tk.Label(frame_top, text="Mode:")
label_mode.grid(row=4, column=0, padx=0, pady=7)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])
mode_combobox.grid(row=4, column=1, padx=0, pady=7)
label_nada = tk.Label(frame_top, text="Nada:")
label_nada.grid(row=5, column=0, padx=0, pady=5)
nada_var = tk.StringVar()
nada_combobox = ttk.Combobox(frame_top, textvariable=nada_var)
nada_combobox['values'] = ("Bass", "Trebel")
nada_combobox.grid(row=5, column=1, padx=0, pady=5)
def update_combobox_trebel(event):
# Hapus opsi yang ada sebelumnya
combobox_trebel.set('')
combobox_trebel['values'] = []
# Cek nilai yang dipilih pada combobox_nada
nada_selected = nada_combobox.get()
if nada_selected == "Trebel":
# Jika Trebel dipilih, tambahkan opsi untuk combobox_trebel
combobox_trebel['values'] = ["Trebel_1", "Trebel_2", "Trebel_3", "Trebel_4", "Trebel_5"]
trebel_var = tk.StringVar()
combobox_trebel.grid(row=6, column=1, padx=10, pady=10) # Menampilkan combobox_trebel
else:
combobox_trebel.grid_remove() # Sembunyikan combobox_trebel jika bukan Trebel yang dipilih
# Label untuk combobox Trebel
label_trebel = ttk.Label(frame_top, text="Pilih Trebel:")
label_trebel.grid(row=6, column=0, padx=10, pady=10)
# Combobox Trebel (Kosongkan awalnya)
combobox_trebel = ttk.Combobox(frame_top, state="readonly")
combobox_trebel.grid(row=6, column=1, padx=10, pady=10)
combobox_trebel.grid_remove() # Sembunyikan combobox_trebel saat awal
# Tambahkan callback pada perubahan nilai di combobox_nada
nada_combobox.bind("<<ComboboxSelected>>", update_combobox_trebel)
# Fungsi untuk mengambil data Gn_Cyan_Atas dari database berdasarkan ID
def get_data_gn_cyan_atas_from_db(id_selected):
conn = sqlite3.connect("DATAMUSIK.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))
data = cursor.fetchone()
conn.close()
return data
# Fungsi untuk mengambil data Sub_Gn_Cyan_Bawah dari database berdasarkan Sub_ID
def get_data_sub_gn_cyan_atas_from_db(sub_id_selected):
conn = sqlite3.connect("DATAMUSIK.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (sub_id_selected,))
data = cursor.fetchone()
conn.close()
return data
# Fungsi untuk menampilkan messagebox dan memvalidasi input level_gn
def validate_level_gn():
try:
level_gn = int(entry_level_gn.get())
if level_gn == 1:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
elif level_gn == 2:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
elif level_gn == 3:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
elif level_gn == 4:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
elif level_gn == 5:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
elif level_gn == 6:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
elif level_gn == 7:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
elif level_gn == 8:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
elif level_gn == 9:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
elif level_gn == 10:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
elif level_gn == 11:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
elif level_gn == 12:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
else:
messagebox.showerror("Error", "Masukkan input yang benar.\nInput Level Gn adalah 1 hingga 12")
reset_entries()
except ValueError:
messagebox.showerror("Error", "Input harus berupa angka.")
reset_entries()
# Fungsi untuk mengatur entry ID dan mencegah input selain ID yang valid
def set_id_entry(valid_id):
entry_id.delete(0, tk.END)
entry_id.insert(0, valid_id)
entry_id.config(state='readonly') # Membatasi input hanya pada ID yang valid
# Fungsi untuk mereset entries jika input level_gn tidak valid
def reset_entries():
entry_level_gn.delete(0, tk.END)
entry_id.config(state='normal')
entry_id.delete(0, tk.END)
# Tambahkan tombol untuk memvalidasi level_gn
validate_button = tk.Button(frame_top, text="Validasi Level Gn", bg="yellow", command=validate_level_gn)
validate_button.grid(row=1, column=2, padx=0, pady=7)
# Fungsi untuk memilih nada berdasarkan parameter yang dipilih oleh pengguna
def pilih_nada():
try:
level_gn_selected = int(entry_level_gn.get())
id_selected = int(entry_id.get())
progres_selected = int(progres_var.get())
mode_selected = mode_var.get().lower()
nada_selected = nada_var.get().lower()
trebel_selected = combobox_trebel.get().lower() if nada_selected == "trebel" else None
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))
data_gn_cyan_atas = cursor.fetchone()
cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (1,))
data_sub_gn_cyan_atas = cursor.fetchone()
conn.close()
if data_gn_cyan_atas or data_sub_gn_cyan_atas:
if nada_selected == "trebel" and trebel_selected:
index_trebel = int(trebel_selected.split('_')[1]) - 1
# Proses data trebel (definisikan fungsi proses_trebel)
trebel_value = proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel)
sub_trebel_value = proses_trebel(level_gn_selected, progres_selected, mode_selected, data_sub_gn_cyan_atas, index_trebel)
if trebel_value is not None and sub_trebel_value is not None:
entry_trebel.delete(0, tk.END)
entry_trebel.insert(0, ''.join(trebel_value))
entry_sub_trebel.delete(0, tk.END)
entry_sub_trebel.insert(0, ''.join(sub_trebel_value))
messagebox.showinfo("Info Trebel", f"Trebel Value: {''.join(trebel_value)}\nSub Trebel Value: {''.join(sub_trebel_value)}")
else:
messagebox.showerror("Error", "Nilai Trebel tidak ditemukan atau tidak valid.")
else:
messagebox.showerror("Error", "Data tidak ditemukan untuk ID yang dipilih.")
except ValueError:
messagebox.showerror("Error", "Pastikan semua input valid dan benar.")
# Fungsi untuk menyesuaikan nilai trebel berdasarkan progres, mengurangi nilai setiap digit
def adjust_trebel(trebel_value, adjustment):
if trebel_value.isdigit():
adjusted_value = ''.join(str(int(char) - adjustment) for char in trebel_value)
else:
adjusted_value = trebel_value
return adjusted_value
# Fungsi untuk memproses Trebel berdasarkan level_gn, progres, mode, dan data
def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel):
adjustment = 0
target_id = 0
# Menentukan index_id berdasarkan level_gn_selected
if level_gn_selected in [1, 4, 6, 11]:
index_id = 0
elif level_gn_selected in [2, 7, 9, 12]:
index_id = 1
elif level_gn_selected in [3, 5, 8, 10]:
index_id = 2
else:
messagebox.showerror("Error", "Level Gn tidak valid.")
return
# Menentukan target_id berdasarkan index_id, progres_selected, dan mode_selected
if mode_selected == "naik":
if progres_selected == "2":
target_id = (index_id + 1) % 3
elif progres_selected == "3":
target_id = (index_id + 2) % 3
elif mode_selected == "turun":
if progres_selected == "2":
target_id = (index_id - 1) % 3
elif progres_selected == "3":
target_id = (index_id - 2) % 3
else:
messagebox.showerror("Error", "Mode tidak valid.")
return
if progres_selected == 1:
if mode_selected in ["naik", "turun"]:
return data_gn_cyan_atas[index_trebel]
if level_gn_selected == [1, 4, 6, 11]:
index_id = 0
if progres_selected == 2:
if mode_selected == "naik":
adjustment = 2
target_id = 1 # Pindah ke ID 2
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif mode_selected == "turun":
adjustment = 3
target_id = 2 # Pindah ke ID 3
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif progres_selected == 3:
if mode_selected == "naik":
adjustment = 4
target_id = 2 # Pindah ke ID 3
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif mode_selected == "turun":
adjustment = 3
target_id = 1 # Pindah ke ID 2
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
if level_gn_selected == [2, 7, 9, 12]:
index_id = 1
if progres_selected == 2:
if mode_selected == "naik":
adjustment = 2
target_id = 2 # Pindah ke ID 2
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif mode_selected == "turun":
adjustment = 0
target_id = 0 # Pindah ke ID 3
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif progres_selected == 3:
if mode_selected == "naik":
adjustment = 1
target_id = 0 # Pindah ke ID 3
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif mode_selected == "turun":
adjustment = 3
target_id = 2 # Pindah ke ID 2
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
if level_gn_selected == [3, 5, 8, 10]:
index_id = 2
if progres_selected == 2:
if mode_selected == "naik":
adjustment = -1
target_id = 0 # Pindah ke ID 2
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif mode_selected == "turun":
adjustment = 0
target_id = 1 # Pindah ke ID 3
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif progres_selected == 3:
if mode_selected == "naik":
adjustment = 1
target_id = 1 # Pindah ke ID 3
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
elif mode_selected == "turun":
adjustment = 0
target_id = 0 # Pindah ke ID 2
entry_trebel.delete(0, tk.END)
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
adjusted_trebel = adjust_trebel_value(trebel_value, adjustment)
# Mengambil nilai trebel dari kolom sesuai dengan target index
trebel_value = data_gn_cyan_atas[target_id][index_trebel]
# Menyesuaikan nilai trebel berdasarkan adjustment
adjusted_trebel = adjust_trebel(trebel_value, adjustment)
return adjusted_trebel
def adjust_sub_trebel(sub_trebel_value, adjustment):
adjusted_sub_trebel = ''.join(
str(int(char) - adjustment) if char.isdigit() else char
for char in sub_trebel_value
)
return adjusted_sub_trebel
def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_sub_gn_cyan_atas, index_trebel):
if progres_selected == 1:
if mode_selected in ["naik", "turun"]:
return data_sub_gn_cyan_atas[index_trebel]
elif progres_selected == 2:
if mode_selected in ["naik", "turun"]:
return adjust_sub_trebel(data_sub_gn_cyan_atas[index_trebel], 1)
elif progres_selected == 3:
if mode_selected in ["naik", "turun"]:
return adjust_sub_trebel(data_sub_gn_cyan_atas[index_trebel], 2)
return None
#label dan entry
label_trebel_gn_cyan_atas = tk.Label(frame_top, text="Trebel Gn_Cyan_Atas:")
label_trebel_gn_cyan_atas.grid(row=10, column=0, padx=0, pady=7)
entry_trebel = tk.Entry(frame_top)
entry_trebel.grid(row=10, column=1, padx=0, pady=7)
label_trebel_sub_gn_cyan_atas = tk.Label(frame_top, text="Sub Trebel Gn_Cyan_Atas:")
label_trebel_sub_gn_cyan_atas.grid(row=11, column=0, padx=0, pady=7)
entry_sub_trebel = tk.Entry(frame_top)
entry_sub_trebel.grid(row=11, column=1, padx=0, pady=7)
separator = ttk.Separator(frame_top, orient='horizontal')
separator.grid(row=7, column=0, sticky="ew", pady=15)
# Tombol untuk menjalankan fungsi pilih_nada
button_pilih_nada = tk.Button(frame_top, text="Pilih Nada", bg="lightgreen", command=pilih_nada)
button_pilih_nada.grid(row=8, column=1, padx=0, pady=7)
separator = ttk.Separator(frame_top, orient='horizontal')
separator.grid(row=9, column=0, sticky="ew", pady=15)
root.mainloop()
Agar supaya data Trebel terpilih diambil berdasarkan index_id yang sesuai, lalu ditampilkan berdasarkan target_id yang sesuai, kemudian disesuaikan dengan nilai adjustment
Berikut adalah kode yang telah diperbaiki dan disesuaikan agar lebih baik dan fungsional:
```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")
# Buat frame_top di dalam inner_frame
frame_top = tk.Frame(root)
frame_top.pack(pady=10) # Pengaturan padding agar tidak terlalu dekat dengan elemen lainnya
# Definisikan entry untuk level_gn dan id, dan combobox di bawah
label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")
label_level_gn_selected.grid(row=1, column=0, padx=5, pady=7)
entry_level_gn = tk.Entry(frame_top)
entry_level_gn.grid(row=1, column=1, padx=5, pady=7)
label_id_selected = tk.Label(frame_top, text="ID:")
label_id_selected.grid(row=2, column=0, padx=5, pady=7)
entry_id = tk.Entry(frame_top)
entry_id.grid(row=2, column=1, padx=5, pady=7)
label_progres = tk.Label(frame_top, text="Progres:")
label_progres.grid(row=3, column=0, padx=5, pady=7)
progres_var = tk.StringVar()
progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)
progres_combobox['values'] = (1, 2, 3)
progres_combobox.grid(row=3, column=1, padx=5, pady=7)
label_mode = tk.Label(frame_top, text="Mode:")
label_mode.grid(row=4, column=0, padx=5, pady=7)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])
mode_combobox.grid(row=4, column=1, padx=5, pady=7)
label_nada = tk.Label(frame_top, text="Nada:")
label_nada.grid(row=5, column=0, padx=5, pady=5)
nada_var = tk.StringVar()
nada_combobox = ttk.Combobox(frame_top, textvariable=nada_var)
nada_combobox['values'] = ("Bass", "Trebel")
nada_combobox.grid(row=5, column=1, padx=5, pady=5)
def update_combobox_trebel(event):
# Hapus opsi yang ada sebelumnya
combobox_trebel.set('')
combobox_trebel['values'] = []
# Cek nilai yang dipilih pada combobox_nada
nada_selected = nada_combobox.get()
if nada_selected == "Trebel":
# Jika Trebel dipilih, tambahkan opsi untuk combobox_trebel
combobox_trebel['values'] = ["Trebel_1", "Trebel_2", "Trebel_3", "Trebel_4", "Trebel_5"]
combobox_trebel.grid(row=6, column=1, padx=10, pady=10) # Menampilkan combobox_trebel
else:
combobox_trebel.grid_remove() # Sembunyikan combobox_trebel jika bukan Trebel yang dipilih
# Label untuk combobox Trebel
label_trebel = ttk.Label(frame_top, text="Pilih Trebel:")
label_trebel.grid(row=6, column=0, padx=10, pady=10)
# Combobox Trebel (Kosongkan awalnya)
combobox_trebel = ttk.Combobox(frame_top, state="readonly")
combobox_trebel.grid(row=6, column=1, padx=10, pady=10)
combobox_trebel.grid_remove() # Sembunyikan combobox_trebel saat awal
# Tambahkan callback pada perubahan nilai di combobox_nada
nada_combobox.bind("<<ComboboxSelected>>", update_combobox_trebel)
# Fungsi untuk mengambil data Gn_Cyan_Atas dari database berdasarkan ID
def get_data_gn_cyan_atas_from_db(id_selected):
conn = sqlite3.connect("DATAMUSIK.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))
data = cursor.fetchone()
conn.close()
return data
# Fungsi untuk mengambil data Sub_Gn_Cyan_Bawah dari database berdasarkan Sub_ID
def get_data_sub_gn_cyan_atas_from_db(sub_id_selected):
conn = sqlite3.connect("DATAMUSIK.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (sub_id_selected,))
data = cursor.fetchone()
conn.close()
return data
# Fungsi untuk menampilkan messagebox dan memvalidasi input level_gn
def validate_level_gn():
try:
level_gn = int(entry_level_gn.get())
if 1 <= level_gn <= 12:
id_mapping = {1: 1, 2: 2, 3: 3, 4: 1, 5: 3, 6: 1, 7: 2, 8: 3, 9: 2, 10: 3, 11: 1, 12: 2}
valid_id = id_mapping.get(level_gn)
messagebox.showinfo("Info", f"Lanjut dengan memasukkan input ID = {valid_id}")
set_id_entry(valid_id)
else:
messagebox.showerror("Error", "Masukkan input yang benar.\nInput Level Gn adalah 1 hingga 12")
reset_entries()
except ValueError:
messagebox.showerror("Error", "Input harus berupa angka.")
reset_entries()
# Fungsi untuk mengatur entry ID dan mencegah input selain ID yang valid
def set_id_entry(valid_id):
entry_id.delete(0, tk.END)
entry_id.insert(0, valid_id)
entry_id.config(state='readonly') # Membatasi input hanya pada ID yang valid
# Fungsi untuk mereset entries jika input level_gn tidak valid
def reset_entries():
entry_level_gn.delete(0, tk.END)
entry_id.config(state='normal')
entry_id.delete(0, tk.END)
# Tambahkan tombol untuk memvalidasi level_gn
validate_button = tk.Button(frame_top, text="Validasi Level Gn", bg="yellow", command=validate_level_gn)
validate_button.grid(row=1, column=2, padx=5, pady=7)
# Fungsi untuk memilih nada berdasarkan parameter yang dipilih oleh pengguna
def pilih_nada():
try:
level_gn_selected = int(entry_level_gn.get())
id_selected = int(entry_id.get())
progres_selected = int(progres_var.get())
mode_selected = mode_var.get().lower()
nada_selected = nada_var.get().lower()
trebel_selected = combobox_trebel.get().lower() if nada_selected == "trebel" else None
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))
data_gn_cyan_atas = cursor.fetchone()
cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (1,))
data_sub_gn_cyan_atas = cursor.fetchone()
conn.close()
if data_gn_cyan_atas and data_sub_gn_cyan_atas:
if nada_selected == "trebel" and trebel_selected:
index_trebel = int(trebel_selected.split('_')[1]) - 1
# Proses data trebel
trebel_value = adjust_trebel(data_gn_cyan_atas[index_trebel], progres_selected, mode_selected)
sub_trebel_value = adjust_trebel(data_sub_gn_cyan_atas[index_trebel], progres_selected, mode_selected)
if trebel_value and sub_trebel_value:
entry_trebel.delete(0, tk.END)
entry_trebel.insert(0, ''.join(trebel_value))
entry_sub_trebel.delete(0, tk.END)
entry_sub_trebel.insert(0, ''.join(sub_trebel_value))
messagebox.showinfo("Info Trebel", f"Trebel Value: {''.join(trebel_value)}\nSub Trebel Value: {''.join(sub_trebel_value)}")
else:
messagebox.showerror("Error", "Nilai Trebel tidak ditemukan atau tidak valid.")
else:
messagebox.showerror("Error", "Data tidak ditemukan untuk ID yang dipilih.")
else:
messagebox.showerror("Error", "Pastikan semua input valid dan benar.")
except ValueError:
messagebox.showerror("Error", "Pastikan semua input valid dan benar.")
# Fungsi untuk menyesuaikan nilai trebel berdasarkan progres, mengurangi nilai setiap digit
def adjust_trebel(trebel
Komentar
Posting Komentar
This Message