ALTERNATIF LAIN UNTUK MENGGANTIKAN CARA KONGRUENSI ANTAR DUA DATA
Mari kita coba alternatif lain untuk mengambil data Trebel terpilih dari tabel Gn_Cyan_Atas dan dari tabel Sub_Gn_Cyan_Atas yang masing_masing memiliki kolom: Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5. Lalu menampilkan data tersebut di entry_trebel dan entry_sub_trebel.
Untuk data dari tabel Gn_Cyan_Atas, ketentuan di setiap data kolom Trebel, berlaku:
1. jika level_gn_selected adalah [1, 4, 6, 11]: untuk id_selected = 1:
1a. Jika progres 1 dan mode Naik, maka jika data kolom Trebel_1 id 1 terpilih akan menjadi data kolom Trebel_1 id 1 (data kolom Trebel_1 id 1 di progres 1 adalah tetap).
1b. Jika progres 2 dan mode Naik, maka jika data kolom Trebel_1 id 1 terpilih akan menjadi data kolom Trebel_1 id 2 kemudian setiap digit (karakter angkanya) dikurang 2.
1c. Jika progres 3 dan mode Naik, maka jika data kolom Trebel_1 id 1 terpilih akan menjadi data kolom Trebel_1 id 3 kemudian setiap digit (karakter angkanya) dikurang 4.
2. Jika level_gn_selected adalah [1, 4, 6, 11] untuk id_selected = 1:
2a. Jika progres 1 dan mode Turun, maka jika data kolom Trebel_1 id 1 terpilih akan menjadi data kolom Trebel_1 id 1 (data terpilih Trebel_1 id 1 di progres 1 adalah tetap).
2b. Jika progres 2 dan mode Turun, maka jika data kolom Trebel_1 id 1 terpilih akan menjadi data kolom Trebel_1 id 3 kemudian setiap digit (karakter angkanya) dikurang 3.
2c. Jika progres 3 dan mode Turun, maka jika data kolom Trebel_1 id 1 menjadi data kolom Trebel_1 id 2 kemudian setiap digit (karakter angkanya) dikurang 3.
3. Jika level_gn_selected adalah [2, 7, 9, 12]: untuk id_selected = 2:
3a. jika progres 1 dan mode Naik, maka jika data kolom Trebel_1 id 2 terpilih akan menjadi data kolom Trebel_1 id 2 (data terpilih Trebel_1 id 2 di progres 1 adalah tetap).
3b. Jika progres 2 dan mode Naik, maka jika data kolom Trebel_1 id 2 terpilih akan menjadi data kolom Trebel_1 id 3 kemudian setiap digit (karakter angka) dikurang 2.
3c. Jika progres 3 dan mode Naik, maka jika data kolom Trebel_1 id 2 terpilih akan menjadi data kolom Trebel_1 id 1 kemudian setiap digit (karakter angka) dikurang 1.
4. Jika level_gn_selected adalah [2, 7, 9, 12]: untuk id_selected = 2:
4a. jika progres 1 dan mode Turun, maka jika data kolom Trebel_1 id 2 terpilih akan menjadi data kolom Trebel_1 id 2 (data terpilih Trebel_1 id 2 di progres 1 adalah tetap).
4b. Jika progres 2 dan mode Turun, maka jika data kolom Trebel_1 id 2 terpilih akan menjadi data kolom Trebel_1 id 1 kemudian setiap digit (karakter angkanya dikurang 0).
4c. Jika progres 3 dan mode Turun, maka jika data kolom Trebel_1 id 2 terpilih akan menjadi data kolom Trebel_1 id 3 kemudian setiap digit (karakter angkanya dikurang 3).
5. . Jika level_gn_selected adalah [3, 5, 8, 10]: untuk id_selected = 3:
5a. Jika progres 1 dan mode Naik, maka jika data kolom Trebel_1 id 3 terpilih akan menjadi data kolom Trebel_1 id 3 (data terpilih Trebel_1 id 3 di progres 1 adalah tetap).
5b. Jika progres 2 dan mode Naik, maka jika data kolom Trebel_1 id 3 terpilih akan menjadi data kolom Trebel_1 id 1, kemudian setiap digit (karakter angka) ditambah 1.
5c. Jika progres 3 dan mode Naik, maka jika data kolom Trebel_1 id 3 terpilih akan menjadi data kolom Trebel_1 id 2, kemudian setiap digit (karakter angka) dikurang 1.
6. Jika level_gn_selected adalah [3, 5, 8, 10]: untuk id_selected = 3:
6a. Jika progres 1 dan mode Turun, maka jika data kolom Trebel_1 id 3 terpilih akan menjadi data kolom Trebel_1 id 3 (data terpilih Trebel_1 id 3 di progres 1 adalah tetap).
6b. Jika progres 2 dan mode Turun, maka jika data kolom Trebel_1 id 3 terpilih akan menjadi data kolom Trebel_1 id 2, kemudian setiap karakter angkanya dikurang 0.
6c. ika progres 3 dan mode Turun, maka jika data kolom Trebel_1 id 3 terpilih akan menjadi data kolom Trebel_1 id 1, kemudian setiap digit (karakter angkanya) dikurang 0.
Hal yang sama di atas juga berlaku untuk data kolom Trebel_2, Trebel_3, Trebel_4, dan Trebel_5, di setiap id.
Untuk data dari tabel Sub_Gn_Cyan_Atas, ketentuan di setiap data kolom Trebel, berlaku:
1. jika level_gn_selected adalah [1, 4, 6, 11]: untuk sub_id_selected = 1:
1a. Jika progres 1 dan mode Naik,, maka jika data kolom Trebel_1 sub_id 1 terpilih akan menjadi data kolom Trebel_1 sub_id 1 (data kolom Trebel_1 sub_id 1 di progres 1 adalah tetap).
1b. Jika progres 2 dan mode Naik, maka jika data kolom Trebel_1 sub_id 1 terpilih akan menjadi data kolom Trebel_1 sub_id 1 kemudian setiap digit (karakter angka) dikurang 1
1c. Jika progres 3 dan mode Naik, maka jika data kolom Trebel_1 sub_id 1 terpilih akan menjadi data kolom Trebel_1 sub_id 1 kemudian setiap digit (karakter angka) dikurang 2.
2. jika level_gn_selected adalah [1, 4, 6, 11]: untuk sub_id_selected = 1:
2a. Jika progres 1 dan mode Turun, maka jika data kolom Trebel_1 sub_id 1 terpilih akan menjadi data kolom Trebel_1 sub_id 1 (data terpilih Trebel_1 sub_id 1 di progres 1 adalah tetap).
2b. Jika progres 2 dan mode Turun, maka jika data kolom Trebel_1 sub_id 1 terpilih akan menjadi data kolom Trebel_1 sub_id 1, kemudian setiap digit (karakter angka dikurang 1).
2c. Jika progres 3 dan mode Turun, maka jika data kolom Trebel_1 sub_id 1 terpilih akan menjadi data kolom Trebel_1 sub_id 1 kemudian setiap digit (karakter angka) dikurang 2.
Hal yang sama di atas juga berlaku untuk data kolom Trebel_2, Trebel_3, Trebel_4, dan Trebel_5, di setiap sub_id..
Dari uraian di atas, tolong buatkan fungsi pilih_nada, dan fungsi proses_trebel yang sesuai atau fungsi adjust_trebel_value
Baik, mari kita implementasikan dua fungsi: `pilih_nada` untuk memilih nilai Trebel yang sesuai dari tabel berdasarkan progres dan mode, dan `adjust_trebel_value` untuk menyesuaikan nilai berdasarkan ketentuan yang telah Anda berikan.
### Fungsi `pilih_nada`
Fungsi ini akan menentukan nilai Trebel yang akan digunakan berdasarkan ID, Progres, dan Mode.
### Fungsi `adjust_trebel_value`
Fungsi ini akan menyesuaikan nilai Trebel yang dipilih sesuai dengan progres dan mode, mengurangi atau menambah digit angka berdasarkan aturan yang diberikan.
```python
def adjust_trebel_value(trebel_value, adjustment):
"""Fungsi untuk menyesuaikan nilai Trebel dengan menambah atau mengurangi setiap digitnya."""
adjusted_value = []
for digit in trebel_value:
if digit.isdigit(): # Pastikan hanya karakter angka yang diubah
adjusted_digit = int(digit) + adjustment
adjusted_value.append(str(adjusted_digit))
else:
adjusted_value.append(digit) # Tetap biarkan karakter non-angka
return ''.join(adjusted_value)
def pilih_nada(trebel_id, progres, mode):
"""
Fungsi untuk memilih nada Trebel berdasarkan ID, Progres, dan Mode.
"""
if trebel_id == 1:
if progres == 1:
return "Trebel_1_ID1"
elif progres == 2:
if mode.lower() == "naik":
return adjust_trebel_value("Trebel_1_ID2", -2)
elif mode.lower() == "turun":
return adjust_trebel_value("Trebel_1_ID3", -3)
elif progres == 3:
if mode.lower() == "naik":
return adjust_trebel_value("Trebel_1_ID3", -4)
elif mode.lower() == "turun":
return adjust_trebel_value("Trebel_1_ID2", -3)
elif trebel_id == 2:
if progres == 1:
return "Trebel_1_ID2"
elif progres == 2:
if mode.lower() == "naik":
return adjust_trebel_value("Trebel_1_ID3", -2)
elif mode.lower() == "turun":
return adjust_trebel_value("Trebel_1_ID1", 0)
elif progres == 3:
if mode.lower() == "naik":
return adjust_trebel_value("Trebel_1_ID1", -1)
elif mode.lower() == "turun":
return adjust_trebel_value("Trebel_1_ID3", -3)
elif trebel_id == 3:
if progres == 1:
return "Trebel_1_ID3"
elif progres == 2:
if mode.lower() == "naik":
return adjust_trebel_value("Trebel_1_ID1", 1)
elif mode.lower() == "turun":
return adjust_trebel_value("Trebel_1_ID2", 0)
elif progres == 3:
if mode.lower() == "naik":
return adjust_trebel_value("Trebel_1_ID2", -1)
elif mode.lower() == "turun":
return adjust_trebel_value("Trebel_1_ID1", 0)
# Tambahkan logika untuk kolom Trebel_2, Trebel_3, Trebel_4, Trebel_5 jika diperlukan.
return None
def proses_trebel(trebel_id1, trebel_id2, trebel_id3, progres, mode):
"""
Fungsi untuk memproses Trebel_ID berdasarkan progres dan mode.
"""
hasil1 = pilih_nada(trebel_id1, progres, mode)
hasil2 = pilih_nada(trebel_id2, progres, mode)
hasil3 = pilih_nada(trebel_id3, progres, mode)
# Simpan hasilnya di entry_trebel atau tampilkan sesuai kebutuhan
return hasil1, hasil2, hasil3
```
### Penjelasan Kode
1. **adjust_trebel_value**: Fungsi ini menyesuaikan nilai digit dari setiap karakter pada string `trebel_value` dengan penyesuaian yang ditentukan (`adjustment`). Hanya karakter angka yang disesuaikan.
2. **pilih_nada**: Fungsi ini memilih nilai Trebel yang tepat berdasarkan `trebel_id`, `progres`, dan `mode`. Nilai yang diambil kemudian disesuaikan menggunakan fungsi `adjust_trebel_value` sesuai dengan aturan yang telah Anda tentukan.
3. **proses_trebel**: Fungsi ini mengatur proses pengambilan dan penyesuaian nilai Trebel untuk tiga ID yang berbeda. Hasil dari setiap pemrosesan disimpan di dalam variabel hasil1, hasil2, dan hasil3, yang kemudian dapat ditampilkan di `entry_trebel` atau digunakan sesuai dengan kebutuhan.
Anda dapat menambahkan lebih banyak logika ke dalam `pilih_nada` jika Anda juga ingin mengelola kolom lain seperti `Trebel_2`, `Trebel_3`, dll. Fungsi ini dirancang untuk memudahkan proses penyesuaian data berdasarkan kondisi yang telah Anda tentukan.
Tolong perbaiki kode berikut karena muncul error':
Exception in Tkinter callback
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/tkinter/__init__.py", line 1948, in __call__
return self.func(*args)
^^^^^^^^^^^^^^^^
File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 126, in pilih_nada
trebel_value = proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 102, in proses_trebel
return adjust_trebel_value(trebel_value, -1 if mode_selected == 'turun' else 1)
^^^^^^^^^^^^^^^^^^^
NameError: name 'adjust_trebel_value' is not defined
Exception in Tkinter callback
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/tkinter/__init__.py", line 1948, in __call__
return self.func(*args)
^^^^^^^^^^^^^^^^
File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 126, in pilih_nada
trebel_value = proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 102, in proses_trebel
return adjust_trebel_value(trebel_value, -1 if mode_selected == 'turun' else 1)
^^^^^^^^^^^^^^^^^^^
NameError: name 'adjust_trebel_value' is not defined
Berikut kodenya:
import tkinter as tk
from tkinter import ttk, 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.grid(row=0, column=0, pady=10)
# 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):
# Reset combobox_trebel
combobox_trebel.grid_remove()
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)
else:
combobox_trebel.grid_remove()
# 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_remove()
# Tambahkan callback pada perubahan nilai di combobox_nada
nada_combobox.bind("<<ComboboxSelected>>", update_combobox_trebel)
def validate_level_gn():
try:
level_gn = int(entry_level_gn.get())
if 1 <= level_gn <= 12:
id_map = {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_map.get(level_gn)
messagebox.showinfo("Info", f"Lanjut dengan memasukkan input ID = {valid_id}")
set_id_entry(valid_id)
else:
raise ValueError("Input Level Gn adalah 1 hingga 12")
except ValueError as e:
messagebox.showerror("Error", str(e))
reset_entries()
def set_id_entry(valid_id):
entry_id.config(state='normal')
entry_id.delete(0, tk.END)
entry_id.insert(0, valid_id)
entry_id.config(state='readonly')
def reset_entries():
entry_level_gn.delete(0, tk.END)
entry_id.config(state='normal')
entry_id.delete(0, tk.END)
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)
def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel):
# Fungsi proses Trebel berdasarkan logika tertentu (logika perlu disesuaikan)
trebel_value = data_gn_cyan_atas[index_trebel]
return adjust_trebel_value(trebel_value, -1 if mode_selected == 'turun' else 1)
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 trebel_selected:
index_trebel = int(trebel_selected.split('_')[1]) - 1
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: {trebel_value}\nSub Trebel Value: {sub_trebel_value}")
else:
messagebox.showerror("Error", "Nilai Trebel tidak ditemukan atau tidak valid.")
else:
messagebox.showerror("Error", "Nilai Trebel tidak ditemukan atau tidak valid.")
except ValueError:
messagebox.showerror("Error", "Input tidak valid.")
#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()
Error yang muncul dalam kode tersebut disebabkan oleh pemanggilan fungsi `adjust_trebel_value`, yang ternyata tidak didefinisikan dalam kode Anda. Untuk mengatasi masalah ini, Anda perlu mendefinisikan fungsi `adjust_trebel_value`. Berikut adalah contoh implementasi untuk fungsi tersebut, yang dapat disesuaikan lebih lanjut sesuai kebutuhan logika program Anda:
```python
def adjust_trebel_value(trebel_value, adjustment):
"""
Fungsi ini akan menyesuaikan nilai Trebel dengan penyesuaian yang diberikan.
Parameter:
- trebel_value: String yang berisi nilai trebel dari database.
- adjustment: Integer yang menunjukkan apakah nilai akan ditambah atau dikurangi.
Output:
- adjusted_trebel: String yang berisi nilai trebel yang telah disesuaikan.
"""
adjusted_trebel = []
# Lakukan penyesuaian untuk setiap karakter angka dalam trebel_value
for char in trebel_value:
if char.isdigit():
adjusted_char = str(int(char) + adjustment)
adjusted_trebel.append(adjusted_char)
else:
adjusted_trebel.append(char)
return ''.join(adjusted_trebel)
# Tambahkan fungsi ini di bagian atas kode sebelum pemanggilan proses_trebel
```
Penjelasan:
1. **adjust_trebel_value**: Fungsi ini menerima dua parameter, yaitu `trebel_value` (string dari nilai trebel) dan `adjustment` (integer yang menentukan penyesuaian, apakah nilai ditambah atau dikurangi).
2. **Logika**: Setiap karakter dalam `trebel_value` diperiksa. Jika karakter tersebut adalah digit (angka), nilai digit akan disesuaikan sesuai `adjustment` (ditambah atau dikurangi). Jika bukan digit, karakter dibiarkan tetap.
Dengan menambahkan fungsi ini ke dalam kode Anda, error terkait `adjust_trebel_value` akan teratasi. Berikut adalah versi terbaru dari kode Anda setelah perbaikan:
```python
def adjust_trebel_value(trebel_value, adjustment):
adjusted_trebel = []
for char in trebel_value:
if char.isdigit():
adjusted_char = str(int(char) + adjustment)
adjusted_trebel.append(adjusted_char)
else:
adjusted_trebel.append(char)
return ''.join(adjusted_trebel)
# Kode yang lain tetap sama...
```
Letakkan fungsi `adjust_trebel_value` ini di bagian atas kode Anda, sebelum `proses_trebel` dipanggil. Setelah itu, jalankan kembali program Anda. Semoga ini membantu menyelesaikan error yang Anda alami!
Tolong perbaiki kode berikut karena muncul pesan error':
Exception in Tkinter callback
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/tkinter/__init__.py", line 1948, in __call__
return self.func(*args)
^^^^^^^^^^^^^^^^
File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 175, in <lambda>
pilih_nada_button = tk.Button(frame_top, text="Pilih Nada", command=lambda: pilih_nada(int(entry_id.get()), int(progres_var.get()), mode_var.get().lower()))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: pilih_nada() takes 0 positional arguments but 3 were given
Exception in Tkinter callback
Traceback (most recent call last):
File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/tkinter/__init__.py", line 1948, in __call__
return self.func(*args)
^^^^^^^^^^^^^^^^
File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 175, in <lambda>
pilih_nada_button = tk.Button(frame_top, text="Pilih Nada", command=lambda: pilih_nada(int(entry_id.get()), int(progres_var.get()), mode_var.get().lower()))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: pilih_nada() takes 0 positional arguments but 3 were given
Berikut kodenya:
import tkinter as tk
from tkinter import ttk, 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.grid(row=0, column=0, pady=10)
# 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):
# Reset combobox_trebel
combobox_trebel.grid_remove()
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)
else:
combobox_trebel.grid_remove()
# 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_remove()
# Tambahkan callback pada perubahan nilai di combobox_nada
nada_combobox.bind("<<ComboboxSelected>>", update_combobox_trebel)
def validate_level_gn():
try:
level_gn = int(entry_level_gn.get())
if 1 <= level_gn <= 12:
id_map = {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_map.get(level_gn)
messagebox.showinfo("Info", f"Lanjut dengan memasukkan input ID = {valid_id}")
set_id_entry(valid_id)
else:
raise ValueError("Input Level Gn adalah 1 hingga 12")
except ValueError as e:
messagebox.showerror("Error", str(e))
reset_entries()
def set_id_entry(valid_id):
entry_id.config(state='normal')
entry_id.delete(0, tk.END)
entry_id.insert(0, valid_id)
entry_id.config(state='readonly')
def reset_entries():
entry_level_gn.delete(0, tk.END)
entry_id.config(state='normal')
entry_id.delete(0, tk.END)
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)
def adjust_trebel_value(trebel_value, adjustment):
"""Fungsi untuk menyesuaikan nilai Trebel dengan menambah atau mengurangi setiap digitnya."""
adjusted_value = []
for digit in trebel_value:
if digit.isdigit(): # Pastikan hanya karakter angka yang diubah
adjusted_digit = int(digit) + adjustment
adjusted_value.append(str(adjusted_digit))
else:
adjusted_value.append(digit) # Tetap biarkan karakter non-angka
return ''.join(adjusted_value)
def pilih_nada():
"""Fungsi untuk memilih nada Trebel berdasarkan ID, Progres, dan Mode."""
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()
# Proses data trebel
if trebel_selected and data_gn_cyan_atas:
index_trebel = int(trebel_selected.split('_')[1]) - 1
trebel_value = data_gn_cyan_atas[index_trebel]
sub_trebel_value = data_sub_gn_cyan_atas[index_trebel]
if progres_selected == 1:
trebel_value_final = adjust_trebel_value(trebel_value, 0)
elif progres_selected == 2:
trebel_value_final = adjust_trebel_value(trebel_value, -2 if mode_selected == "naik" else -3)
elif progres_selected == 3:
trebel_value_final = adjust_trebel_value(trebel_value, -4 if mode_selected == "naik" else -3)
else:
trebel_value_final = None
if trebel_value_final:
entry_trebel.delete(0, tk.END)
entry_trebel.insert(0, trebel_value_final)
# Hanya menampilkan Trebel dari Sub_Gn_Cyan_Atas jika relevan
sub_trebel_final = adjust_trebel_value(sub_trebel_value, -1) if sub_trebel_value else None
entry_sub_trebel.delete(0, tk.END)
entry_sub_trebel.insert(0, sub_trebel_final)
messagebox.showinfo("Info Trebel", f"Trebel Value: {trebel_value_final}\nSub Trebel Value: {sub_trebel_final}")
else:
messagebox.showerror("Error", "Nilai Trebel tidak ditemukan atau tidak valid.")
else:
messagebox.showerror("Error", "Data tidak valid atau Trebel tidak dipilih.")
except ValueError:
messagebox.showerror("Error", "Input tidak valid.")
# Label dan entry untuk menampilkan hasil Trebel
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_sub_trebel_gn_cyan_atas = tk.Label(frame_top, text="Sub Trebel Gn_Cyan_Atas:")
label_sub_trebel_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)
# Tombol untuk memilih nada dan menampilkan nilai Trebel
pilih_nada_button = tk.Button(frame_top, text="Pilih Nada", command=lambda: pilih_nada(int(entry_id.get()), int(progres_var.get()), mode_var.get().lower()))
pilih_nada_button.grid(row=12, column=0, columnspan=2, pady=10)
# Tombol untuk reset entries
reset_button = tk.Button(frame_top, text="Reset", command=reset_entries)
reset_button.grid(row=13, column=0, columnspan=2, pady=10)
# Menjalankan aplikasi
root.mainloop()
Kira kira kodenya seperti berikut:
import tkinter as tk
from tkinter import ttk, 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.grid(row=0, column=0, pady=10)
# 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):
# Reset combobox_trebel
combobox_trebel.grid_remove()
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)
else:
combobox_trebel.grid_remove()
# 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_remove()
# Tambahkan callback pada perubahan nilai di combobox_nada
nada_combobox.bind("<<ComboboxSelected>>", update_combobox_trebel)
def validate_level_gn():
try:
level_gn = int(entry_level_gn.get())
if 1 <= level_gn <= 12:
id_map = {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_map.get(level_gn)
messagebox.showinfo("Info", f"Lanjut dengan memasukkan input ID = {valid_id}")
set_id_entry(valid_id)
else:
raise ValueError("Input Level Gn adalah 1 hingga 12")
except ValueError as e:
messagebox.showerror("Error", str(e))
reset_entries()
def set_id_entry(valid_id):
entry_id.config(state='normal')
entry_id.delete(0, tk.END)
entry_id.insert(0, valid_id)
entry_id.config(state='readonly')
def reset_entries():
entry_level_gn.delete(0, tk.END)
entry_id.config(state='normal')
entry_id.delete(0, tk.END)
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)
def adjust_trebel_value(trebel_value, adjustment):
"""Fungsi untuk menyesuaikan nilai Trebel dengan menambah atau mengurangi setiap digitnya."""
adjusted_value = []
for digit in trebel_value:
if digit.isdigit(): # Pastikan hanya karakter angka yang diubah
adjusted_digit = int(digit) + adjustment
adjusted_value.append(str(adjusted_digit))
else:
adjusted_value.append(digit) # Tetap biarkan karakter non-angka
return ''.join(adjusted_value)
def pilih_nada():
"""Fungsi untuk memilih nada Trebel berdasarkan ID, Progres, dan Mode."""
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()
# Proses data trebel
if trebel_selected and data_gn_cyan_atas:
index_trebel = int(trebel_selected.split('_')[1]) - 1
trebel_value = data_gn_cyan_atas[index_trebel]
sub_trebel_value = data_sub_gn_cyan_atas[index_trebel]
if progres_selected == 1:
trebel_value_final = adjust_trebel_value(trebel_value, 0)
elif progres_selected == 2:
trebel_value_final = adjust_trebel_value(trebel_value, -2 if mode_selected == "naik" else -3)
elif progres_selected == 3:
trebel_value_final = adjust_trebel_value(trebel_value, -4 if mode_selected == "naik" else -3)
else:
trebel_value_final = None
if trebel_value_final:
entry_trebel.delete(0, tk.END)
entry_trebel.insert(0, trebel_value_final)
# Hanya menampilkan Trebel dari Sub_Gn_Cyan_Atas jika relevan
sub_trebel_final = adjust_trebel_value(sub_trebel_value, -1) if sub_trebel_value else None
entry_sub_trebel.delete(0, tk.END)
entry_sub_trebel.insert(0, sub_trebel_final)
messagebox.showinfo("Info Trebel", f"Trebel Value: {trebel_value_final}\nSub Trebel Value: {sub_trebel_final}")
else:
messagebox.showerror("Error", "Nilai Trebel tidak ditemukan atau tidak valid.")
else:
messagebox.showerror("Error", "Data tidak valid atau Trebel tidak dipilih.")
except ValueError:
messagebox.showerror("Error", "Input tidak valid.")
# Label dan entry untuk menampilkan hasil Trebel
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_sub_trebel_gn_cyan_atas = tk.Label(frame_top, text="Sub Trebel Gn_Cyan_Atas:")
label_sub_trebel_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)
# Tombol untuk memilih nada dan menampilkan nilai Trebel
pilih_nada_button = tk.Button(frame_top, text="Pilih Nada", command= pilih_nada)
pilih_nada_button.grid(row=12, column=0, columnspan=2, pady=10)
# Tombol untuk reset entries
reset_button = tk.Button(frame_top, text="Reset", command=reset_entries)
reset_button.grid(row=13, column=0, columnspan=2, pady=10)
# Menjalankan aplikasi
root.mainloop()
Namun pemilihan data Trebel terpilih berdasarkan progres dan mode adalah masih salah. Tolong perbaiki kode agar memenuhi kesesuaian logikaa yang diterapkan berikut ini:
Untuk data dari Gn_Cyan_Atas, ketentuan di setiap kolom Trebel, berlaku:
1. jika data Trebel terpilih dari id 1, maka
1a. Jika progres 1 dan jika mode Naik atau Turun, maka data Trebel_1 id 1 menjadi data Trebel_1 id 1 (data Trebel terpilih di progres 1 adalah tetap).
Jika progres 2 mode Naik, maka data Trebel_1 id 1 menjadi data Trebel_1 id 2 yang setiap karakter angkanya dikurang 2.
Jika progres 3 mode Naik, maka data Trebel_1 id 1 menjadi data Trebel_1 id 3 yang setiap karakter angkanya dikurang 4.
1b. jika progres 1 dan mode Turun, maka data terpilih Trebel_1 id 1 menjadi data Trebel_1 id 1 (data Trebel terpilih di progres 1 adalah tetap).
Jika progres 2 mode Turun, maka data Trebel_1 id 1 menjadi data Trebel_1 id 3 yang setiap karakter angkanya dikurang 3.
Jika progres 3 mode Turun, maka data Trebel_1 id 1 menjadi data Trebel_1 id 2 yang setiap karakter angkanya dikurang 3.
2. jika data Trebel terpilih dari id 2, maka
2a. jika progres 1 dan mode Naik, maka data Trebel_1 id 2 menjadi data Trebel_1 id 2 (data Trebel terpilih di progres 1 adalah tetap).
Jika progres 2 mode Naik, maka data Trebel_1 id 2 menjadi data Trebel_1 id 3 yang setiap karakter angkanya dikurang 2..
Jika progres 3 mode Naik, maka data Trebel_1 id 2 menjadi data Trebel_1 id 1 yang setiap karakter angkanya dikurang 1.
2b. jika progres 1 dan mode Turun, maka data terpilih Trebel_1 id 2 menjadi data Trebel_1 id 2 (data Trebel terpilih di progres 1 adalah tetap).
Jika progres 2 mode Turun maka data Trebel_1 id 2 menjadi data Trebel_1 id 1 yang setiap karakter angkanya dikurang 0.
Jika progres 3 mode Turun, maka data Trebel_1 id 2 menjadi data Trebel_1 id 3 yang setiap karakter angkanya dikurang 3.
3. jika data Trebel terpilih dari id 3, maka
3a. jika progres 1 dan mode Naik, maka data Trebel_1 id 3 menjadi data Trebel_1 id 3 (data Trebel terpilih di progres 1 adalah tetap).
Jika progres 2 mode Naik, maka data Trebel_1 id 3 menjadi data Trebel_1 id 1 yang setiap karakter angkanya ditambah 1.
Jika progres 3 mode Naik, maka data Trebel_1 id 3 menjadi data Trebel_1 id 2 yang setiap karakter angkanya dikurang 1.
3b. jika progres 1 dan mode Turun, maka data terpilih Trebel_1 id 3 menjadi data Trebel_1 id 3 (data Trebel terpilih di progres 1 adalah tetap).
Jika progres 2 mode Turun, maka data Trebel_1 id 3 menjadi data Trebel_1 id 2 yang setiap karakter angkanya dikurang 0.
Jika progres 3 mode Turun, maka data Trebel_1 id 3 menjadi data Trebel_1 id 1 yang setiap karakter angkanya dikurang 0.
Hal yang sama di atas juga berlaku untuk data dari kolom Trebel_2, Trebel_3, Trebel_4, atau Trebel_5.
Untuk data dari Sub_Gn_Cyan_Atas, ketentuan di setiap kolom Trebel, berlaku:
1. jika data Trebel terpilih dari id 1, maka
1a. Jika progres 1 dan jika mode Naik atau Turun, maka data Trebel_1 id 1 menjadi data Trebel_1 id 1 (data Trebel terpilih di progres 1 adalah tetap).
Jika progres 2 mode Naik, maka data Trebel_1 id 1 menjadi data Trebel_1 id 1 yang setiap karakter angkanya dikurang 1
Jika progres 3 mode Naik, maka data Trebel_1 id 1 menjadi data Trebel_1 id 1 yang setiap karakter angkanya dikurang 2.
1b. jika progres 1 dan mode Turun, maka data terpilih Trebel_1 id 1 menjadi data Trebel_1 id 1 (data Trebel terpilih di progres 1 adalah tetap).
Jika progres 2 mode Turun, maka data Trebel_1 id 1 menjadi data Trebel_1 id 1 yang setiap karakter angkanya dikurang 1.
Jika progres 3 mode Turun, maka data Trebel_1 id 1 menjadi data Trebel_1 id 1 yang setiap karakter angkanya dikurang 2.
Hal yang sama di atas juga berlaku untuk data dari kolom Trebel_2, Trebel_3, Trebel_4, atau Trebel_5.
Komentar
Posting Komentar
This Message