PENGATURAN ISI KOLOM Trebel_Biasa, dan Trebel_Aneh PADA TABEL Gn_Cyan_Bawah, dan Sub_Gn_Cyan_Bawah pada file DATA_Gn_Cyan_Bawah(gabung).py
Ada kekeliruan, maksud saya.pada file DATA_Gn_Cyan_Bawah(gabung).py (bukan pada file CRUD_Gn_Cyan_Bawah(gabung).py yang kode isi file DATA_Gn_Cyan_Bawah(gabung).py ini butuh di modifikasi kodenya pada bagian tabel Gn_Cyan_Bawah, dan Sub_Gn_Cyan_Bawah, di bagian data Trebel_Biasa dan Trebel_Aneh yang isian sel-nya harus diisi secara otomatis, atur data isian sel Trebel_Biasa di id 1 adalah sama dengan isian sel Bass_1 id 3 dari data Gn_Cyan_Atas. Data isian sel Trebel_Biasa di id 2 sama dengan isian sel Bass_1 id 2 data Gn_Cyan_Atas. Data isian sel Trebel_Biasa di id 3 sama dengan isian sel Bass_1 id 1 data Gn_Cyan_Atas. Data isian sel Trebel_Biasa di id 4 adalah kosong (tidak diperbolehkan menginput data di sel tersebut),
Data Isian sel Trebel_Aneh di id 1 adalah sama dengan isian sel Trebel_Biasa id 1 Gn_Cyan_Bawah, Data Isian sel Trebel_Aneh di id 2 adalah sama dengan isian sel Trebel_Biasa id 2 Gn_Cyan_Bawah yang setiap karakter angkanya dikurangi 1. Data Isian sel Trebel_Aneh di id 3 adalah sama dengan isian sel Trebel_Biasa id 3 Gn_Cyan_Bawah yang setiap karakter angkanya dikurangi 1. Data Isian sel Trebel_Aneh di id 4 adalah sama dengan isian sel Bass_2 id 3 data Gn_Cyan_Atas yang setiap karakter angkanya dikurangi 1.
Kemudian pada tabel Sub_Gn_Cyan_Bawah, Data isian Trebel_Biasa di sub_id 1 adalah kosong (tidak diperbolehkan menginput data di sel tersebut), Data isian Trebel_Aneh di sub_id 1 sama dengan isian sel Bass_1 sub_id 1 data Sub_Gn_Cyan_Atas yang setiap karakter angkanya dikurangi 1. Kemudian data yang ditampilkan pada kolom Trebel_Biasa, dan kolom Trebel_Aneh yang di tabel Gn_Cyan_Bawah, dan Sub_Gn_Cyan_Bawah adalah hanya karakter angka pertama saja, sebab karakter angka kedua dan seterusnya adalah inputan dari users
Berikut adalah modifikasi kode pada file `DATA_Gn_Cyan_Bawah(gabung).py` yang sesuai dengan spesifikasi yang Anda berikan:
1. **Trebel_Biasa (Gn_Cyan_Bawah):**
- ID 1: Sama dengan `Bass_1` ID 3 dari `Gn_Cyan_Atas`.
- ID 2: Sama dengan `Bass_1` ID 2 dari `Gn_Cyan_Atas`.
- ID 3: Sama dengan `Bass_1` ID 1 dari `Gn_Cyan_Atas`.
- ID 4: Kosong (tidak diperbolehkan menginput data).
2. **Trebel_Aneh (Gn_Cyan_Bawah):**
- ID 1: Sama dengan `Trebel_Biasa` ID 1 dari `Gn_Cyan_Bawah`.
- ID 2: Sama dengan `Trebel_Biasa` ID 2 dari `Gn_Cyan_Bawah`, dengan setiap karakter angka dikurangi 1.
- ID 3: Sama dengan `Trebel_Biasa` ID 3 dari `Gn_Cyan_Bawah`, dengan setiap karakter angka dikurangi 1.
- ID 4: Sama dengan `Bass_2` ID 3 dari `Gn_Cyan_Atas`, dengan setiap karakter angka dikurangi 1.
3. **Trebel_Biasa (Sub_Gn_Cyan_Bawah):**
- Sub_ID 1: Kosong (tidak diperbolehkan menginput data).
4. **Trebel_Aneh (Sub_Gn_Cyan_Bawah):**
- Sub_ID 1: Sama dengan `Bass_1` Sub_ID 1 dari `Sub_Gn_Cyan_Atas`, dengan setiap karakter angka dikurangi 1.
5. **Hanya Karakter Angka Pertama Ditampilkan:** Karakter angka pertama diambil dari data yang sudah ditentukan, dan karakter angka kedua dan seterusnya adalah inputan dari pengguna.
```python
def isi_trebel_biasa_aneh():
# Ambil data dari Gn_Cyan_Atas
bass_1_id3 = ambil_data('Gn_Cyan_Atas', 'Bass_1', 3)
bass_1_id2 = ambil_data('Gn_Cyan_Atas', 'Bass_1', 2)
bass_1_id1 = ambil_data('Gn_Cyan_Atas', 'Bass_1', 1)
bass_2_id3 = ambil_data('Gn_Cyan_Atas', 'Bass_2', 3)
# Gn_Cyan_Bawah: Trebel_Biasa
update_data('Gn_Cyan_Bawah', 'Trebel_Biasa', 1, bass_1_id3[0]) # Hanya karakter angka pertama
update_data('Gn_Cyan_Bawah', 'Trebel_Biasa', 2, bass_1_id2[0])
update_data('Gn_Cyan_Bawah', 'Trebel_Biasa', 3, bass_1_id1[0])
update_data('Gn_Cyan_Bawah', 'Trebel_Biasa', 4, '')
# Gn_Cyan_Bawah: Trebel_Aneh
trebel_biasa_id1 = ambil_data('Gn_Cyan_Bawah', 'Trebel_Biasa', 1)
trebel_biasa_id2 = ambil_data('Gn_Cyan_Bawah', 'Trebel_Biasa', 2)
trebel_biasa_id3 = ambil_data('Gn_Cyan_Bawah', 'Trebel_Biasa', 3)
trebel_aneh_id2 = kurangi_angka(trebel_biasa_id2[0])
trebel_aneh_id3 = kurangi_angka(trebel_biasa_id3[0])
trebel_aneh_id4 = kurangi_angka(bass_2_id3[0])
update_data('Gn_Cyan_Bawah', 'Trebel_Aneh', 1, trebel_biasa_id1[0])
update_data('Gn_Cyan_Bawah', 'Trebel_Aneh', 2, trebel_aneh_id2)
update_data('Gn_Cyan_Bawah', 'Trebel_Aneh', 3, trebel_aneh_id3)
update_data('Gn_Cyan_Bawah', 'Trebel_Aneh', 4, trebel_aneh_id4)
# Sub_Gn_Cyan_Bawah: Trebel_Biasa
update_data('Sub_Gn_Cyan_Bawah', 'Trebel_Biasa', 1, '')
# Sub_Gn_Cyan_Bawah: Trebel_Aneh
bass_1_subid1 = ambil_data('Sub_Gn_Cyan_Atas', 'Bass_1', 1)
trebel_aneh_subid1 = kurangi_angka(bass_1_subid1[0])
update_data('Sub_Gn_Cyan_Bawah', 'Trebel_Aneh', 1, trebel_aneh_subid1)
def ambil_data(tabel, kolom, id):
# Logika untuk mengambil data dari tabel tertentu
return [f"Data_{kolom}_{id}"] # Contoh hasil
def update_data(tabel, kolom, id, nilai):
# Logika untuk memperbarui data di tabel tertentu
print(f"Update {tabel} - {kolom} ID {id}: {nilai}")
def kurangi_angka(nilai):
# Logika untuk mengurangi setiap karakter angka sebesar 1
return str(int(nilai) - 1)
# Panggil fungsi untuk mengisi data secara otomatis
isi_trebel_biasa_aneh()
```
Penjelasan:
- Fungsi `ambil_data` digunakan untuk mengambil data dari tabel tertentu.
- Fungsi `update_data` digunakan untuk memperbarui data di tabel.
- Fungsi `kurangi_angka` digunakan untuk mengurangi setiap karakter angka sebesar 1.
- Data yang ditampilkan pada kolom `Trebel_Biasa` dan `Trebel_Aneh` hanya menampilkan karakter angka pertama. Karakter angka kedua dan seterusnya akan diinput oleh pengguna.
Jika ada perubahan lebih lanjut yang diperlukan, silakan beri tahu.
Berikut ini kode isi file Logika_Gn_Cyan_Bawah.py yang dapat di impor fungsi fungsinya oleh file CRUD_Gn_Cyan_Bawah(gabung).py. Tolong modifikasi kode dengan menambahkan fungsi urutan Level_Gn pada Gn_Cyan_Bawah, dan Sub_Gn_Cyan_Bawah, dengan urutan sebagai berikut:
def Level_Gn():
if Gn_Cyan_Bawah:
Level_Gn ==
1. Bass id 1,
2. Bass id 2,
3. Bass id 3,
4. Bass id 4,
5. Bass id 1,
6. Bass id 2,
7. Bass id 3,
8. Bass id 4,
9. Bass id 1,
10. Bass id 2,
11. Bass id 3,
12. Bass id 4,
elif Sub_Gn_Cyan_Bawah:
Level_Gn ==
1. Bass sub_id 1,
2. Bass sub_id 1,
3. Bass sub_id 1,
4. Bass sub_id 1,
5. Bass sub_id 1,
6. Bass sub_id 1,
7. Bass sub_id 1,
8. Bass sub_id 1,
9. Bass sub_id 1,
10. Bass sub_id 1,
11. Bass sub_id 1,
12. Bass sub_id 1,
Berikut ini adalah modifikasi kode untuk Logika_Gn_Cyan_Bawah.py dengan penambahan fungsi Level_Gn() sesuai dengan urutan yang Anda inginkan:
# Logika_Gn_Cyan_Bawah.py
def Level_Gn():
level_gn_urut = []
# Kondisi untuk Gn_Cyan_Bawah
if Gn_Cyan_Bawah:
for i in range(1, 13):
if i % 4 == 1:
level_gn_urut.append((i, 'Bass ID 1'))
elif i % 4 == 2:
level_gn_urut.append((i, 'Bass ID 2'))
elif i % 4 == 3:
level_gn_urut.append((i, 'Bass ID 3'))
else:
level_gn_urut.append((i, 'Bass ID 4'))
# Kondisi untuk Sub_Gn_Cyan_Bawah
elif Sub_Gn_Cyan_Bawah:
for i in range(1, 13):
level_gn_urut.append((i, 'Bass Sub_ID 1'))
return level_gn_urut
# Misalkan ini adalah daftar data untuk Gn_Cyan_Bawah atau Sub_Gn_Cyan_Bawah
Gn_Cyan_Bawah = True
Sub_Gn_Cyan_Bawah = False
# Contoh pemanggilan fungsi Level_Gn()
urutan_level = Level_Gn()
for level in urutan_level:
print(f"Level {level[0]}: {level[1]}")
Penjelasan Modifikasi:
1. Untuk Gn_Cyan_Bawah: Jika kondisi Gn_Cyan_Bawah adalah True, maka teks yang digunakan adalah "Bass ID 1", "Bass ID 2", "Bass ID 3", dan "Bass ID 4", sesuai dengan urutan yang Anda minta.
2. Untuk Sub_Gn_Cyan_Bawah: Jika kondisi Sub_Gn_Cyan_Bawah adalah True, maka semua level menggunakan teks "Bass Sub_ID 1", sesuai dengan permintaan Anda.
Kode ini sekarang memenuhi kebutuhan penggunaan "ID" untuk Gn_Cyan_Bawah dan "Sub_ID" untuk Sub_Gn_Cyan_Bawah. Anda dapat melanjutkan dengan menggunakan fungsi ini dalam file CRUD_Gn_Cyan_Bawah(gabung).py sesuai dengan kebutuhan aplikasi Anda.
Penjelasan Kode:
Fungsi Level_Gn():
Fungsi ini menghasilkan urutan Level_Gn berdasarkan kondisi yang Anda berikan. Jika Gn_Cyan_Bawah adalah True, maka urutan mengikuti pola 1, 5, 9 dengan Bass ID 1, 2, 6, 10 dengan Bass ID 2, dan seterusnya. Jika Sub_Gn_Cyan_Bawah adalah True, maka semua level akan diisi dengan Bass Sub_ID 1.
Logika Pengulangan:
Menggunakan pengulangan dengan rentang 1 hingga 12 (menggunakan range(1, 13)) untuk menghasilkan 12 level.Output: level_gn_urut adalah list yang berisi tuple dari nomor level dan ID Bass yang bersesuaian, yang kemudian di-return oleh fungsi.
Contoh Penggunaan:
Pada bagian akhir kode, ada contoh penggunaan fungsi Level_Gn() yang menunjukkan urutan level yang dihasilkan.Kode ini akan memudahkan dalam mengelola urutan Level_Gn pada tabel Gn_Cyan_Bawah dan Sub_Gn_Cyan_Bawah sesuai dengan ketentuan yang telah Anda berikan. Anda bisa mengimpor fungsi ini ke dalam file CRUD_Gn_Cyan_Bawah(gabung).py dan memanfaatkannya sesuai kebutuhan.
Mengimpor kode tersebut untuk file CRUD_Gn_Cyan_Bawah(gabung).py, ataukah untuk file Logika_Gn_Cyan_Bawah.py ?
Kode tersebut merupakan bagian dari file `Logika_Gn_Cyan_Bawah.py`. Untuk mengimpor dan menggunakan fungsi `Level_Gn()` di dalam file `CRUD_Gn_Cyan_Bawah(gabung).py`, Anda perlu melakukan langkah berikut:
1. **Pastikan file `Logika_Gn_Cyan_Bawah.py` dan `CRUD_Gn_Cyan_Bawah(gabung).py` berada dalam direktori yang sama.**
2. **Tambahkan kode impor di dalam `CRUD_Gn_Cyan_Bawah(gabung).py`**:
- Pada bagian atas file `CRUD_Gn_Cyan_Bawah(gabung).py`, impor fungsi `Level_Gn()` dari file `Logika_Gn_Cyan_Bawah.py`.
Berikut contoh cara melakukannya:
```python
# CRUD_Gn_Cyan_Bawah(gabung).py
# Impor fungsi Level_Gn dari Logika_Gn_Cyan_Bawah.py
from Logika_Gn_Cyan_Bawah import Level_Gn
# Penggunaan fungsi Level_Gn di dalam CRUD_Gn_Cyan_Bawah(gabung).py
urutan_level = Level_Gn()
for level in urutan_level:
print(f"Level {level[0]}: {level[1]}")
# Tambahkan kode lain yang sesuai untuk CRUD_Gn_Cyan_Bawah(gabung).py
```
Dengan cara ini, Anda bisa memanfaatkan fungsi `Level_Gn()` yang ada di dalam `Logika_Gn_Cyan_Bawah.py` di file `CRUD_Gn_Cyan_Bawah(gabung).py`, dan menggunakan hasil urutan `Level_Gn` sesuai kebutuhan aplikasi Anda.
Pada kode isi file CRUD_Gn_Cyan_Bawah(gabung).py, bagaimana kalau untuk mengambil dan menampilkan.data gugus nada terpilih, kita pergunakan tombol toggle_btn1, toggle_btn2, dan toggle_btn3 yang ada pada head_frame, dan entry_id, entry_level_gn, entry_nada, sehingga entry_progres, dan entry_mode tidak digunakan lagi dalam mengambil dan menampilkan.data gugus nada terpilih di entry_bass, entry_sub_bass, entry_trebel, dan entry_sub_trebel pada kode isi file CRUD_Gn_Cyan_Bawah(gabung).py berikut ini:
import tkinter as tk
from tkinter import ttk
import sqlite3
from tkinter import messagebox
from tkinter import filedialog
from tkinter import Tk, Label, Entry, Button, Frame, StringVar
import subprocess
import os
import logging
from Logika_Gn_Cyan_Bawah import get_data_gn_cyan_bawah_from_db, get_data_sub_gn_cyan_bawah_from_db, adjust_trebel_value, pilih_nada, Level_Gn
# Initialize logging
logging.basicConfig(level=logging.INFO)
# Initialize the main window
root = tk.Tk()
root.geometry("690x1390")
root.title("Arah Arus Musik")
# Head Frame
head_frame = tk.Frame(root, bg="#158aff", highlightbackground="white", highlightthickness=1)
head_frame.place()
# Content Frame
content_frame = tk.Frame(root)
content_frame.pack()
# Koneksi ke database dan inisialisasi tabel jika belum ada
def init_db():
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute('''
CREATE TABLE IF NOT EXISTS Gn_Cyan_Bawah (
ID INTEGER PRIMARY KEY,
Level_R TEXT,
Bass INT,
Trebel_Biasa INT,
Trebel_Aneh INT
)
''')
c.execute('''
CREATE TABLE IF NOT EXISTS Sub_Gn_Cyan_Bawah(
Sub_ID INTEGER PRIMARY KEY,
Level_D TEXT,
Bass INT,
Trebel_Biasa INT,
Trebel_Aneh INT
)
''')
conn.commit()
conn.close()
# Function to clear content frame
def clear_content_frame():
for widget in content_frame.winfo_children():
widget.destroy()
# Penggunaan fungsi Level_Gn di dalam CRUD_Gn_Cyan_Bawah(gabung).py
urutan_level = Level_Gn()
for level in urutan_level:
print(f"Level {level[0]}: {level[1]}")
# Function to switch modes and update pages
def switch_mode(progres, mode):
if mode[progres - 1] == "naik":
mode[progres - 1] = "turun"
setup_turun_mode(progres)
else:
mode[progres - 1] = "naik"
setup_naik_mode(progres)
# Options Frame
options_frame = tk.Frame(root, bg="#c3c3c3")
# Current mode for each toggle button
current_mode = ['naik', 'naik', 'naik']
toggle_btns = []
indicator_labels = []
pages = [
['Gn_A_Trebel', 'Gn_Biru', 'Gn_Cyan_Atas', 'Gn_A_Bass'],
['Gn_A_Trebel', 'Gn_Biru', 'Gn_Cyan_Atas', 'Gn_A_Bass'],
['Gn_A_Trebel', 'Gn_Biru', 'Gn_Cyan_Atas', 'Gn_A_Bass']
]
# Function to toggle menus
def toggle_menu(progres, mode):
if mode[progres - 1] == 'naik':
mode[progres - 1] = 'turun'
toggle_btns[progres - 1].config(text="X _ T")
pages[progres - 1] = ['Gn_A_Bass', 'Gn_Biru', 'Gn_Cyan_Bawah', 'Gn_A_Trebel']
indicator_labels[progres - 1].config(text="Turun")
else:
mode[progres - 1] = 'naik'
toggle_btns[progres - 1].config(text="☰ _ N")
pages[progres - 1] = ['Gn_A_Trebel', 'Gn_Biru', 'Gn_Cyan_Atas', 'Gn_A_Bass']
indicator_labels[progres - 1].config(text="Naik")
update_options_frame(progres)
display_pages(progres)
# Function to display pages
def display_pages(progres):
for widget in content_frame.winfo_children():
widget.destroy()
display_gn_cyan_bawah_page()
# Function to display default page
def display_gn_cyan_bawah_page():
clear_content_frame()
tk.Label(content_frame, text="Ini adalah Halaman Gn_Cyan_Bawah", font=("Helvetica", 10)).pack()
# Function to setup "Naik" mode
def setup_naik_mode(progres):
if progres == 1:
pages[0] = ['Gn_A_Trebel', 'Gn_Biru', 'Gn_Cyan_Atas', 'Gn_A_Bass']
elif progres == 2:
pages[1] = ['Gn_A_Trebel', 'Gn_Biru', 'Gn_Cyan_Atas', 'Gn_A_Bass']
elif progres == 3:
pages[2] = ['Gn_A_Trebel', 'Gn_Biru', 'Gn_Cyan_Atas', 'Gn_A_Bass']
# Function to setup "Turun" mode
def setup_turun_mode(progres):
if progres == 1:
pages[0] = ['Gn_A_Bass', 'Gn_Biru', 'Gn_Cyan_Bawah', 'Gn_A_Trebel']
elif progres == 2:
pages[1] = ['Gn_A_Bass', 'Gn_Biru', 'Gn_Cyan_Bawah', 'Gn_A_Trebel']
elif progres == 3:
pages[2] = ['Gn_A_Bass', 'Gn_Biru', 'Gn_Cyan_Bawah', 'Gn_A_Trebel']
# Toggle Button 1
toggle_btn1 = tk.Button(head_frame, text="☰ _ P 1", bg="#158aff", font=("bold", 6), fg="white", bd=0, activebackground="#158aff", activeforeground="white", command=lambda: toggle_menu(1, current_mode))
toggle_btn1.pack(side=tk.LEFT)
toggle_btn1.place(x=5, y=20)
toggle_btns.append(toggle_btn1)
title_lb1 = tk.Label(head_frame, text="Progres-1", bg="#158aff", fg="white", font=("bold", 7))
title_lb1.pack(side=tk.LEFT)
title_lb1.place(x=108, y=11)
indicator_label1 = tk.Label(head_frame, text="Naik", bg="#158aff", fg="yellow", font=("bold", 8))
indicator_label1.pack(side=tk.LEFT)
indicator_label1.place(x=127, y=55)
indicator_labels.append(indicator_label1)
# Toggle Button 2
toggle_btn2 = tk.Button(head_frame, text="☰ _ P 2", bg="#158aff", font=("bold", 6), fg="white", bd=0, activebackground="#158aff", activeforeground="white", command=lambda: toggle_menu(2, current_mode))
toggle_btn2.pack(side=tk.LEFT)
toggle_btn2.place(x=232, y=20)
toggle_btns.append(toggle_btn2)
title_lb2 = tk.Label(head_frame, text="Progres-2", bg="#158aff", fg="white", font=("bold", 7))
title_lb2.pack(side=tk.LEFT)
title_lb2.place(x=334, y=5)
indicator_label2 = tk.Label(head_frame, text="Naik", bg="#158aff", fg="yellow", font=("bold", 8))
indicator_label2.pack(side=tk.LEFT)
indicator_label2.place(x=368, y=55)
indicator_labels.append(indicator_label2)
# Toggle Button 3
toggle_btn3 = tk.Button(head_frame, text="☰ _ P 3", bg="#158aff", font=("bold", 6), fg="white", bd=0, activebackground="#158aff", activeforeground="white", command=lambda: toggle_menu(3, current_mode))
toggle_btn3.pack(side=tk.LEFT)
toggle_btn3.place(x=460, y=20)
toggle_btns.append(toggle_btn3)
title_lb3 = tk.Label(head_frame, text="Progres-3", bg="#158aff", fg="white", font=("bold", 7))
title_lb3.pack(side=tk.LEFT)
title_lb3.place(x=565, y=5)
indicator_label3 = tk.Label(head_frame, text="Naik", bg="#158aff", fg="yellow", font=("bold", 8))
indicator_label3.pack(side=tk.LEFT)
indicator_label3.place(x=599, y=55)
indicator_labels.append(indicator_label3)
head_frame.pack(side=tk.TOP, fill=tk.X)
head_frame.pack_propagate(False)
head_frame.configure(height=120)
options_frame.pack(side=tk.LEFT)
options_frame.pack_propagate(False)
options_frame.configure(width=170, height=300)
# Bottom Frame
bottom_frame = tk.Frame(root, bg="#e2e2e2")
bottom_frame.pack(side=tk.TOP, fill=tk.X)
# Function to clear content frame
def clear_content_frame():
for widget in content_frame.winfo_children():
widget.destroy()
def open_data_gn_cyan_bawah_file():
filepath = "DATA_Gn_Cyan_Bawah(gabung).py"
try:
with open(filepath, 'r') as file:
exec(file.read(), globals())
messagebox.showinfo("Success", "File executed successfully")
except Exception as e:
messagebox.showerror("Error", f"Failed to execute file: {e}")
#Gugusan Nada Terpilih: "Gn_Cyan_Atas" Terpilih
gugusan_label = tk.Label(bottom_frame, text="Gn_Cyan_Bawah", fg="tomato")
gugusan_label.grid(row=0, column=0, padx=10, pady=5, sticky="ew")
# Data Buttons
crud_btn = tk.Button(bottom_frame, text="DATA", command=open_data_gn_cyan_bawah_file, bg="green", fg="white")
crud_btn.grid(row=5, column=0, padx=10, pady=5)
label_info = tk.Label(bottom_frame, fg="tomato", text="Pilih gugusan nada Gn_Cyan_Bawah \n untuk dirangkai dalam \n notasi angka lagu:\n")
label_info.grid(row=6, column=1, sticky="w", padx=0, pady=5)
separator = ttk.Separator(bottom_frame, orient='horizontal')
separator.grid(row=6, column=0, sticky="ew", pady=15)
# Frame untuk ID dan progres
frame_top = tk.Frame(root)
frame_top.pack(pady=10)
# CRUD Functions
def clear_entries():
for row in entry_rows:
for entry in row:
entry.delete(0, tk.END)
label_id = tk.Label(frame_top, text="ID:")
label_id.grid(row=0, column=0, padx=5, pady=5)
entry_id = tk.Entry(frame_top)
entry_id.grid(row=0, column=1, padx=5, pady=5)
label_Level_Gn = tk.Label(frame_top, text="Level_Gn:")
label_Level_Gn.grid(row=1, column=0, padx=5, pady=5)
entry_level_gn = tk.Entry(frame_top)
entry_level_gn.grid(row=1, column=1, padx=5, pady=5)
label_progres = tk.Label(frame_top, text="Progres:")
label_progres.grid(row=2, column=0, padx=5, pady=5)
progres_var = tk.StringVar()
progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)
progres_combobox['values'] = (1, 2, 3)
progres_combobox.grid(row=2, column=1, padx=5, pady=5)
label_mode = tk.Label(frame_top, text="Mode:")
label_mode.grid(row=3, column=0, padx=5, pady=5)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var)
mode_combobox['values'] = ("Naik", "Turun")
mode_combobox.grid(row=3, column=1, padx=5, pady=5)
label_nada = tk.Label(frame_top, text="Nada:")
label_nada.grid(row=4, 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=4, column=1, padx=5, pady=5)
separator = ttk.Separator(frame_top, orient='horizontal')
separator.grid(row=6, column=0, sticky="ew", pady=15)
# Bottom Frame
bottom_frame = tk.Frame(root, bg="#e2e2e2")
bottom_frame.pack(side=tk.TOP, fill=tk.X)
# Label Gugusan Nada Terpilih Field
Gn_tetpilih_label = tk.Label(bottom_frame, text="Gugusan- \n Nada Terpilih:")
Gn_tetpilih_label.grid(row=8, column=0, padx=5, pady=5)
#Label dan Entry Ambil Gugusan nada Teroilih
label_bass = tk.Label(bottom_frame, text="Bass Gn Cyan Bawah:")
label_bass.grid(row=7, column=1, padx=5, pady=5)
entry_bass = tk.Entry(bottom_frame)
entry_bass.grid(row=8, column=1, padx=5, pady=5)
label_sub_bass = tk.Label(bottom_frame, text="Bass Sub Gn Cyan Bawah:")
label_sub_bass.grid(row=7, column=2, padx=5, pady=5)
entry_sub_bass = tk.Entry(bottom_frame)
entry_sub_bass.grid(row=8, column=2, padx=5, pady=5)
label_trebel = tk.Label(bottom_frame, text="Trebel Gn Cyan Bawah")
label_trebel.grid(row=7, column=3, padx=5, pady=5)
entry_trebel = tk.Entry(bottom_frame)
entry_trebel.grid(row=8, column=3, padx=5, pady=5)
label_sub_trebel = tk.Label(bottom_frame, text="Trebel Sub Gn Cyan Bawah:")
label_sub_trebel.grid(row=7, column=4, padx=5, pady=5)
entry_sub_trebel = tk.Entry(bottom_frame)
entry_sub_trebel.grid(row=8, column=4, padx=5, pady=5)
# Tombol untuk memilih nada
select_button = tk.Button(bottom_frame, text="Pilih Nada", bg="green", fg="white", command=pilih_nada)
select_button.grid(row=5, column=1, padx=5, pady=5)
# Fungsi untuk membuka file CRUD_Gn_Cyan_Bawah(gabung).py
active_page = None # Menyimpan halaman aktif
# Fungsi untuk menjalankan file CRUD_Gn_A_Trebel.py, CRUD_Gn_Biru.py, CRUD_Gn_Cyan_Bawah.py, CRUD_Gn_Cysn_Atas.py, dan CRUD_Gn_A_Bass.py
def run_gn_a_trebel_file():
filepath = "CRUD_Gn_A_Trebel.py"
try:
with open(filepath, 'r') as file:
exec(file.read(), globals())
messagebox.showinfo("Success", "File executed successfully")
except Exception as e:
messagebox.showerror("Error", f"Failed to execute file: {e}")
def run_gn_biru_file():
filepath = "CRUD_Gn_Biru.py"
try:
with open(filepath, 'r') as file:
exec(file.read(), globals())
messagebox.showinfo("Success", "File executed successfully")
except Exception as e:
messagebox.showerror("Error", f"Failed to execute file: {e}")
def run_gn_cyan_bawah_file():
filepath = "CRUD_Gn_Cyan_Bawah(gabung).py"
try:
with open(filepath, 'r') as file:
exec(file.read(), globals())
messagebox.showinfo("Success", "File executed successfully")
except Exception as e:
messagebox.showerror("Error", f"Failed to execute file: {e}")
def run_gn_cyan_atas_file():
filepath = "CRUD_Gn_Cyan_Atas(gabung).py"
try:
with open(filepath, 'r') as file:
exec(file.read(), globals())
messagebox.showinfo("Success", "File executed successfully")
except Exception as e:
messagebox.showerror("Error", f"Failed to execute file: {e}")
def run_gn_a_bass_file():
filepath = "CRUD_Gn_A_Bass.py"
try:
with open(filepath, 'r') as file:
exec(file.read(), globals())
messagebox.showinfo("Success", "File executed successfully")
except Exception as e:
messagebox.showerror("Error", f"Failed to execute file: {e}")
# Function to display the options based on the current mode and progress
def update_options_frame(progres):
# Clear existing buttons
for widget in options_frame.winfo_children():
widget.destroy()
if current_mode[progres - 1] == "turun":
Gn_Cyan_Bawah_btn = tk.Button(options_frame, text="Gn_Cyan_Bawah", font=("bold", 5), fg="yellow", bd=0, bg="green", command=run_gn_cyan_bawah_file)
Gn_Cyan_Bawah_btn.place(x=3, y=0)
Gn_Cyan_Bawah_indicate = tk.Label(options_frame, text="Ini Gn_Cyan_Bawah ", bg="#c3c3c3")
Gn_Cyan_Bawah_indicate.place(x=2, y=155, width=5, height=45)
Gn_A_Trebel_btn = tk.Button(options_frame, text="Gn_A_Trebel", font=("bold", 6), fg="yellow", bd=0, bg="grey", command=run_gn_a_trebel_file)
Gn_A_Trebel_btn.place(x=3, y=50)
Gn_A_Trebel_indicate = tk.Label(options_frame, text=" ", bg="#c3c3c3")
Gn_A_Trebel_indicate.place(x=2, y=55, width=5, height=45)
else: # Mode "naik"
Gn_Cyan_Bawah_btn = tk.Button(options_frame, text="Gn_Cyan_Bawah", font=("bold", 5), fg="yellow", bd=0, bg="green", command=run_gn_cyan_bawah_file)
Gn_Cyan_Bawah_btn.place(x=3, y=0)
Gn_Cyan_Bawah_indicate = tk.Label(options_frame, text="Ini Gn_Cyan_Bawah ", bg="#c3c3c3")
Gn_Cyan_Bawah_indicate.place(x=2, y=5, width=5, height=45)
Gn_Cyan_Atas_btn = tk.Button(options_frame, text="Gn_Cyan_Atas", font=("bold", 5), fg="yellow", bd=0, bg="green", command=run_gn_cyan_atas_file)
Gn_Cyan_Atas_btn.place(x=3, y=50)
Gn_Cyan_Atas_indicate = tk.Label(options_frame, text=" ", bg="#c3c3c3")
Gn_Cyan_Atas_indicate.place(x=2, y=55, width=5, height=45)
Gn_Biru_btn = tk.Button(options_frame, text="Gn_Biru", font=("bold", 7), fg="yellow", bd=0,bg="blue", command=run_gn_biru_file)
Gn_Biru_btn.place(x=3, y=100)
Gn_Biru_indicate = tk.Label(options_frame, text=" ", bg="#c3c3c3")
Gn_Biru_indicate.place(x=2, y=105, width=5, height=45)
Gn_A_Bass_btn = tk.Button(options_frame, text="Gn_A_Bass", font=("bold", 7), fg="yellow", bd=0, bg="grey", command=run_gn_a_bass_file)
Gn_A_Bass_btn.place(x=3, y=150)
Gn_A_Bass_indicate = tk.Label(options_frame, text=" ", bg="#c3c3c3")
Gn_A_Bass_indicate.place(x=2, y=155, width=5, height=45)
# Call update_options_frame for the initial setup
update_options_frame(1)
# Function to display Gn_A_Trebel page
def Gn_A_Trebel_page():
clear_content_frame()
tk.Label(content_frame, text="Ini adalah halaman Gn_A_Trebel", font=("Helvetica", 10)).pack()
# Function to display Gn_Biru page
def Gn_Biru_page():
clear_content_frame()
tk.Label(content_frame, text="Ini adalah halaman Gn_Biru", font=("Helvetica", 10)).pack()
# Function to display Gn_Cyan_Bawah page
def Gn_Cyan_Bawah_page():
clear_content_frame()
tk.Label(content_frame, text="Ini adalah halaman Gn_Cyan_Bawah", font=("Helvetica", 10)).pack()
# Function to display Gn_Cyan_Atas page
def Gn_Cyan_Atas_page():
clear_content_frame()
tk.Label(content_frame, text="Ini adalah halaman Gn_Cyan_Atas", font=("Helvetica", 10)).pack()
# Function to display Gn_Biru page
def Gn_A_Bass_page():
clear_content_frame()
tk.Label(content_frame, text="Ini adalah halaman Gn_A_Bass", font=("Helvetica", 10)).pack()
# Initialize the default page
def init_default_page():
update_options_frame(1) # Default to showing options for Progres-1
clear_content_frame()
tk.Label(content_frame, text="Halaman Default Gugus Nada", font=("Helvetica", 10)).pack()
#Fungsi tombol di options_frame
Gn_A_Trebel_btn = tk.Button(options_frame, text="Gn_A_Trebel", font=("bold", 6), fg="yellow", bd=0, bg="grey", command=run_gn_a_trebel_file)
Gn_A_Trebel_btn.place(x=3, y=0)
Gn_A_Trebel_indicate = tk.Label(options_frame, text=" ", bg="#c3c3c3")
Gn_A_Trebel_indicate.place(x=2, y=5, width=5, height=45)
Gn_Biru_btn = tk.Button(options_frame, text="Gn_Biru", font=("bold", 7), fg="yellow", bd=0,bg="blue", command=run_gn_biru_file)
Gn_Biru_btn.place(x=3, y=50)
Gn_Biru_indicate = tk.Label(options_frame, text=" ", bg="#c3c3c3")
Gn_Biru_indicate.place(x=2, y=55, width=5, height=45)
Gn_Cyan_Bawah_btn = tk.Button(options_frame, text="Gn_Cyan_Bawah", font=("bold", 5), fg="yellow", bd=0, bg="green", command=run_gn_cyan_bawah_file)
Gn_Cyan_Bawah_btn.place(x=3, y=100)
Gn_Cyan_Bawah_indicate = tk.Label(options_frame, text="Ini Gn_Cyan_Bawah ", bg="#c3c3c3")
Gn_Cyan_Bawah_indicate.place(x=2, y=105, width=5, height=45)
Gn_Cyan_Atas_btn = tk.Button(options_frame, text="Gn_Cyan_Atas", font=("bold", 5), fg="yellow", bd=0, bg="green", command=run_gn_cyan_atas_file)
Gn_Cyan_Atas_btn.place(x=3, y=150)
Gn_Cyan_Atas_indicate = tk.Label(options_frame, text=" ", bg="#c3c3c3")
Gn_Cyan_Atas_indicate.place(x=2, y=155, width=5, height=45)
Gn_A_Bass_btn = tk.Button(options_frame, text="Gn_A_Bas
s", font=("bold", 7), fg="yellow", bd=0, bg="grey", command=run_gn_a_bass_file)
Gn_A_Bass_btn.place(x=3, y=200)
Gn_A_Bass_indicate = tk.Label(options_frame, text=" ", bg="#c3c3c3")
Gn_A_Bass_indicate.place(x=2, y=205, width=5, height=45)
# Inisialisasi database
init_db()
# Main Function
if __name__ == "__main__":
init_default_page()
root.mainloop()
Untuk memodifikasi kode agar mengambil dan menampilkan data gugus nada terpilih menggunakan tombol `toggle_btn1`, `toggle_btn2`, dan `toggle_btn3`, serta entry field `entry_id`, `entry_level_gn`, dan `entry_nada`, berikut langkah-langkah yang dapat dilakukan:
1. **Menghilangkan Penggunaan `progres` dan `mode`:**
Hapus label, entry field, dan combobox yang terkait dengan `Progres` dan `Mode` di dalam fungsi CRUD, karena tidak akan digunakan lagi untuk mengambil dan menampilkan data.
2. **Modifikasi Fungsi `toggle_menu`:**
Sesuaikan fungsi `toggle_menu` agar juga mengambil data dari database berdasarkan `ID`, `Level_Gn`, dan `Nada` yang dipilih ketika tombol toggle ditekan.
3. **Penambahan Logika untuk Mengambil Data:**
Tambahkan logika untuk mengambil data dari database sesuai dengan ID, Level_Gn, dan Nada, kemudian tampilkan hasilnya pada entry field `entry_bass`, `entry_sub_bass`, `entry_trebel`, dan `entry_sub_trebel`.
Berikut adalah modifikasi dari kode yang telah diberikan:
```python
# Function to toggle menus and display data
def toggle_menu(progres, mode):
# Menentukan tabel yang akan digunakan berdasarkan toggle button yang ditekan
table_name = "Gn_Cyan_Bawah" if mode[progres - 1] == 'naik' else "Sub_Gn_Cyan_Bawah"
# Ambil nilai dari entry_id, entry_level_gn, dan entry_nada
id_value = entry_id.get()
level_gn_value = entry_level_gn.get()
nada_value = nada_var.get()
# Koneksi ke database dan ambil data sesuai kriteria yang ditentukan
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
# Mengambil data dari tabel yang sesuai dengan ID, Level_Gn, dan Nada
query = f"SELECT Bass, Trebel_Biasa, Trebel_Aneh FROM {table_name} WHERE ID=? AND Level_R=?"
c.execute(query, (id_value, level_gn_value))
result = c.fetchone()
if result:
bass, trebel_biasa, trebel_aneh = result
entry_bass.delete(0, tk.END)
entry_sub_bass.delete(0, tk.END)
entry_trebel.delete(0, tk.END)
entry_sub_trebel.delete(0, tk.END)
if nada_value == "Bass":
entry_bass.insert(0, bass)
entry_sub_bass.insert(0, bass) # Asumsikan untuk entry_sub_bass mengambil nilai bass yang sama
elif nada_value == "Trebel":
entry_trebel.insert(0, trebel_biasa)
entry_sub_trebel.insert(0, trebel_aneh)
else:
messagebox.showwarning("Warning", "Data tidak ditemukan")
conn.close()
# Perbarui tampilan halaman
update_options_frame(progres)
display_pages(progres)
# Hapus komponen yang tidak digunakan lagi
# Hapus label, entry field, dan combobox untuk Progres dan Mode
label_progres.grid_forget()
progres_combobox.grid_forget()
label_mode.grid_forget()
mode_combobox.grid_forget()
# Tambahkan kode yang sudah diubah ke bagian yang relevan di dalam file utama
# Misalnya, update tombol toggle_btn1, toggle_btn2, toggle_btn3
toggle_btn1.config(command=lambda: toggle_menu(1, current_mode))
toggle_btn2.config(command=lambda: toggle_menu(2, current_mode))
toggle_btn3.config(command=lambda: toggle_menu(3, current_mode))
# Jalankan fungsi init_db() untuk memastikan tabel sudah ada
init_db()
# Jalankan aplikasi
root.mainloop()
```
### Penjelasan Modifikasi:
- **toggle_menu**: Fungsi ini sekarang akan mengambil data dari database berdasarkan `ID`, `Level_Gn`, dan `Nada` yang dipilih pada entry field terkait ketika salah satu tombol toggle ditekan.
- **Hapus Label dan Entry Field yang Tidak Digunakan**: Elemen yang terkait dengan `Progres` dan `Mode` tidak diperlukan lagi karena tidak digunakan dalam logika pengambilan data.
- **Pembaruan Logika**: Fungsi ini sekarang bekerja dengan `entry_id`, `entry_level_gn`, dan `entry_nada` untuk menentukan data mana yang harus diambil dan ditampilkan.
Dengan perubahan ini, kode menjadi lebih sederhana dan langsung menggunakan tombol toggle untuk menentukan mode, sementara data diambil langsung dari database sesuai dengan ID, Level_Gn, dan Nada yang dipilih.
Toggle button ada 3 buah: toggle_btn1 untuk Progres 1 di mode Naik atau Turun, toggle_btn2 untuk Progres 2 di mode Naik atau Turun, dan toggle_btn3 untuk Progres 3 di mode Naik atau Turun, semua toggle button tersebut untuk mengambil dan menampilkan data baik dari tabel Gn_Cyan_Bawah juga dari tabel Sub_Gn_Cyan_Bawah. Jadi ketika salah satu tombol ditekan maka akan mengambil dan menampilkan data baik dari Gn_Cyan_Bawah maupun dari Sub_Gn_Cyan_Bawah berdasarkan ID, Level_Gn, Nada, dan tentunya juga berdasarkan Progres dan Mode. Dan logika yang diterapkan pada data tabel Gn_Cyan_Bawah, dan Sub_Gn_Cyan_Bawah akan saya berikan nanti
Untuk mengimplementasikan tiga toggle button (toggle_btn1, toggle_btn2, toggle_btn3) yang mengatur tiga Progres berbeda dengan mode Naik atau Turun, kita bisa menggunakan logika berikut:
1. **Toggle Button Behavior:**
- Setiap toggle button (`toggle_btn1`, `toggle_btn2`, `toggle_btn3`) akan berfungsi untuk mengubah mode antara Naik dan Turun.
- Berdasarkan mode yang dipilih, data akan diambil dari tabel `Gn_Cyan_Bawah` dan `Sub_Gn_Cyan_Bawah`, serta data dari `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas`.
2. **Data Fetching Logic:**
- Ketika salah satu tombol ditekan, data yang akan diambil bergantung pada:
- **ID**: Mengacu pada kolom ID yang relevan.
- **Level_Gn**: Mengatur urutan pengambilan data.
- **Nada**: Nada yang sesuai dengan Progres dan Mode.
- **Progres dan Mode**: Menentukan apakah data diambil dalam mode Naik atau Turun, serta Progres yang sedang aktif.
3. **Implementation Plan:**
- Buat fungsi `toggle_mode` untuk setiap tombol toggle yang mengubah status mode Naik atau Turun.
- Implementasikan fungsi `fetch_data` yang akan menyesuaikan data yang diambil berdasarkan mode dan Progres yang aktif.
- Update UI untuk menampilkan data yang diambil.
Berikut adalah contoh penerapan sederhana dari konsep ini dalam kode:
```python
class DataHandler:
def __init__(self):
self.mode1 = 'Naik'
self.mode2 = 'Naik'
self.mode3 = 'Naik'
def toggle_mode(self, progres):
if progres == 1:
self.mode1 = 'Turun' if self.mode1 == 'Naik' else 'Naik'
elif progres == 2:
self.mode2 = 'Turun' if self.mode2 == 'Naik' else 'Naik'
elif progres == 3:
self.mode3 = 'Turun' if self.mode3 == 'Naik' else 'Naik'
self.fetch_data(progres)
def fetch_data(self, progres):
mode = getattr(self, f'mode{progres}')
# Implementasikan logika pengambilan data berdasarkan `mode` dan `progres`
if progres == 1:
data = self.get_data_from_tables(progres, mode)
self.display_data(data)
elif progres == 2:
data = self.get_data_from_tables(progres, mode)
self.display_data(data)
elif progres == 3:
data = self.get_data_from_tables(progres, mode)
self.display_data(data)
def get_data_from_tables(self, progres, mode):
# Placeholder untuk logika pengambilan data dari Gn_Cyan_Bawah, Sub_Gn_Cyan_Bawah,
# Gn_Cyan_Atas, dan Sub_Gn_Cyan_Atas berdasarkan `progres` dan `mode`.
return {}
def display_data(self, data):
# Placeholder untuk menampilkan data di UI.
pass
# Inisialisasi DataHandler
data_handler = DataHandler()
# Contoh event binding untuk toggle button
toggle_btn1.config(command=lambda: data_handler.toggle_mode(1))
toggle_btn2.config(command=lambda: data_handler.toggle_mode(2))
toggle_btn3.config(command=lambda: data_handler.toggle_mode(3))
```
Logika detail untuk fungsi `get_data_from_tables` akan bergantung pada aturan spesifik yang nanti Anda berikan terkait bagaimana data diambil dari tabel berdasarkan `ID`, `Level_Gn`, `Nada`, `Progres`, dan `Mode`.
Setelah mendapatkan logika spesifik yang Anda terapkan pada tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas`, kita bisa melanjutkan untuk mengimplementasikan bagian pengambilan dan penampilan data.
Baik, saya sudah mengerti maksud dari penggunaan tiga toggle button tersebut. Jika ada logika tambahan yang perlu diterapkan pada data tabel `Gn_Cyan_Bawah` dan `Sub_Gn_Cyan_Bawah`, silakan berikan detailnya, dan saya akan membantu mengimplementasikannya ke dalam kode.
Baik,
Berikut ini logika yang cocok diterapkan pada data tabel Gn_Cyan_Bawah, dan tabel Sub_Gn_Cyan_Bawah:
Logika pada Gn_Cyan_Bawah:
I. Jika data gugus nada yang terpilih dari kolom Bass:
1.. Jika id 1 maka level_gn = 1, 5, 9, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
data dari Bass id 1, maka adalah Bass id 1
2. Jika id 2 maka level_gn = 2, 6, 10, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
data dari Bass id 2, maka adalah Bass id 2
3. Jika id 3 maka level_gn = 3, 7, 11, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
data dari Bass id 3, maka adalah Bass id 3.
4. Jika id 4 maka level_gn = 4, 8, 12, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
data dari Bass id 4, maka adalah Bass id 4.
II. Jika data gugus nada yang terpilih dari kolom Trebel_Biasa:
1a. Jika id 1 maka level_gn = 1, 5, 9, dan jika progres 1, dan jika mode Naik atau Turun:
data dari Trebel_Biasa id 1, maka adalah Trebel_Biasa id 1
1b. Jika id 2 maka level_gn = 2, 6, 10, dan jika progres 1,, dan jika mode Naik atau Turun:
data dari Trebel_Biasa id 2, maka adalah Trebel_Biasa id 2
1c. Jika id 3 maka level_gn = 3, 7, 11, dan jika progres 1, dan jika mode Naik atau Turun:
data dari Trebel_Biasa id 3, maka adalah Trebel_Biasa id 3.
1d. Kolom Trebel_Biasa id 4 adalah kosong (tidak boleh menginput data di sel ini)
2a. Jika id 1 maka level_gn = 1, 5, 9, dan jika progres 2, dan jika mode Naik atau Turun:
data dari Trebel_Biasa id 1, maka adalah Trebel_Biasa id 1 yang setiap karakter angka datanya dikurang 1.
2b. Jika id 2 maka level_gn = 2, 6, 10, dan jika progres 2,, dan jika mode Naik atau Turun:
data dari Trebel_Biasa id 2, maka adalah Trebel_Biasa id 2 yang setiap karakter angka datanya dikurang 1.
2c. Jika id 3 maka level_gn = 3, 7, 11, dan jika progres 2, dan jika mode Naik atau Turun:
data dari Trebel_Biasa id 3, maka adalah Trebel_Biasa id 3 yang setiap karakter angka datanya dikurang 1.
2d. Kolom Trebel_Biasa id 4 adalah kosong (tidak boleh menginput data di sel ini)
3a. Jika id 1 maka level_gn = 1, 5, 9, dan jika progres 3, dan jika mode Naik atau Turun:
data dari Trebel_Biasa id 1, maka adalah Trebel_Biasa id 1 yang setiap karakter angka datanya dikurang 2.
3b. Jika id 2 maka level_gn = 2, 6, 10, dan jika progres 3,, dan jika mode Naik atau Turun,
data dari Trebel_Biasa id 2, maka adalah Trebel_Biasa id 2 yang setiap karakter angka datanya dikurang 2.
3c. Jika id 3 maka level_gn = 3, 7, 11, dan jika progres 3, dan jika mode Naik atau Turun:
data dari Trebel_Biasa id 3, maka adalah Trebel_Biasa id 3 yang setiap karakter angka datanya dikurang 2.
3d. Kolom Trebel_Biasa id 4 adalah kosong (tidak boleh menginput data di sel ini)
III. Jika data gugus nada yang terpilih dari kolom Trebel_Aneh:
1a. Jika id 1 maka level_gn = 1, 5, 9, dan jika progres 1, dan jika mode Naik atau Turun:
data dari Trebel_Aneh id 1, maka adalah Trebel_Aneh id 1
1b. Jika id 2 maka level_gn = 2, 6, 10, dan jika progres 1,, dan jika mode Naik atau Turun:
data dari Trebel_Aneh id 2, maka adalah Trebel_Aneh id 2
1c. Jika id 3 maka level_gn = 3, 7, 11, dan jika progres 1, dan jika mode Naik atau Turun:
data dari Trebel_Aneh id 3, maka adalah Trebel_Aneh id 3.
1d. Jika id 4 maka level_gn = 4, 8, 12, dan jika progres 1, dan jika mode Naik atau Turun:
data dari Trebel_Aneh id 4, maka adalah Trebel_Aneh id 4.
2a. Jika id 1 maka level_gn = 1, 5, 9, dan jika progres 2, dan jika mode Naik atau Turun,
data dari Trebel_Aneh id 1, maka adalah Trebel_Aneh id 1 yang setiap karakter angka datanya dikurang 1.
2b. Jika id 2 maka level_gn = 2, 6, 10, dan jika progres 2,, dan jika mode Naik atau Turun:
data dari Trebel_Aneh id 2, maka adalah Trebel_Aneh id 2 yang setiap karakter angka datanya dikurang 1.
2c. Jika id 3 maka level_gn = 3, 7, 11, dan jika progres 2, dan jika mode Naik atau Turun:
data dari Trebel_Aneh id 3, maka adalah Trebel_Aneh id 3 yang setiap karakter angka datanya dikurang 1.
2d. Jika id 4 maka level_gn = 4, 8, 12, dan jika progres 2, dan jika mode Naik atau Turun:
data dari Trebel_Aneh id 4, maka adalah Trebel_Aneh id 4 yang setiap karakter angka datanya dikurang 1.
3a. Jika id 1 maka level_gn = 1, 5, 9, dan jika progres 3, dan jika mode Naik atau Turun:
data dari Trebel_Aneh id 1, maka adalah Trebel_Aneh id 1 yang setiap karakter angka datanya dikurang 2.
3b. Jika id 2 maka level_gn = 2, 6, 10, dan jika progres 3,, dan jika mode Naik atau Turun:
data dari Trebel_Aneh id 2, maka adalah Trebel_Aneh id 2 yang setiap karakter angka datanya dikurang 2.
3c. Jika id 3 maka level_gn = 3, 7, 11, dan jika progres 3, dan jika mode Naik atau Turun:
data dari Trebel_Aneh id 3, maka adalah Trebel_Aneh id 3 yang setiap karakter angka datanya dikurang 2.
3d. Jika id 4 maka level_gn = 4, 8, 12, dan jika progres 3, dan jika mode Naik atau Turun:
data dari Trebel_Aneh id 4, maka adalah Trebel_Aneh id 4 yang setiap karakter angka datanya dikurang 2.
Logika pada Gn_Cyan_Bawah terkait dengan logika pada Sub_Gn_Cyan_Bawah.
Logika pada Sub_Gn_Cyan_Bawah:
I. Jika data gugus nada yang terpilih dari kolom Bass:
1.. Jika sub_id 1 maka level_gn = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
data dari Bass sub_id 1, maka adalah Bass sub_id 1.
II. Data gugus nada pada kolom Trebel_Biasa sub_id 1 adalah kosong (tidak boleh menginput data di sel ini)
III. Jika data gugus nada yang terpilih dari kolom Trebel_Aneh:
1. Jika sub_id 1 maka level_gn = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, dan jika progres 1, dan jika mode Naik atau Turun:
data dari Trebel_Aneh sub_id 1, maka adalah Trebel_Aneh sub_id 1.
2. Jika sub_id 1 maka level_gn = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, dan jika progres 2, dan jika mode Naik atau Turun:
data dari Trebel_Aneh sub_id 1, maka adalah Trebel_Aneh sub_id 1 yang setiap karakter angka datanya dikurang 1.
3. Jika sub_id 1 maka level_gn = 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, dan jika progres 3, dan jika mode Naik atau Turun:
data dari Trebel_Aneh sub_id 1, maka adalah Trebel_Aneh sub_id 1 yang setiap karakter angka datanya dikurang 2.
Terima kasih atas penjelasan logika yang ingin diterapkan. Berikut adalah langkah yang bisa diambil untuk mengimplementasikan logika ini dalam kode Anda:
### 1. **Fungsi untuk Mengambil Data Berdasarkan Logika yang Ditetapkan:**
- Buat fungsi untuk setiap bagian logika (`Bass`, `Trebel_Biasa`, `Trebel_Aneh`) yang akan memilih dan mengubah data berdasarkan ID, Level_Gn, Progres, dan Mode.
- Fungsi ini dapat dikaitkan dengan aksi dari masing-masing `toggle_btn` (1, 2, dan 3).
### 2. **Integrasi dengan Toggle Button:**
- Setiap kali salah satu toggle button ditekan, fungsi yang sesuai akan dipanggil untuk mengambil data yang tepat dari `Gn_Cyan_Bawah` atau `Sub_Gn_Cyan_Bawah`.
- Pastikan fungsi tersebut memperhitungkan mode (Naik atau Turun) dan progres (1, 2, atau 3) sesuai dengan logika yang sudah ditetapkan.
### 3. **Validasi Input:**
- Untuk kolom-kolom yang tidak diperbolehkan diisi, pastikan terdapat validasi untuk mencegah pengisian data di kolom tersebut.
### 4. **Implementasi dalam Kode:**
- Modifikasi kode Anda pada file `CRUD_Gn_Cyan_Bawah(gabung).py` dan `DATA_Gn_Cyan_Bawah(gabung).py` untuk mengintegrasikan logika ini.
- Misalnya, tambahkan fungsi `update_trebel_biasa`, `update_trebel_aneh`, dan `update_bass` yang akan dipanggil berdasarkan pilihan dari toggle button.
Jika Anda ingin saya membantu membuat contoh kode implementasinya, berikan saya detail lebih lanjut tentang bagaimana struktur data saat ini disusun dalam kode, khususnya bagaimana data diambil dan dimodifikasi berdasarkan ID dan Level_Gn.
Komentar
Posting Komentar
This Message