CRUD DATA PADA TABEL Gn_Cyan_Atas, dan Sub_Gn_Cyan_Atas PADA DATA KOLOM Bass DAN KOLOM Trebel (Part-2)
CRUD DATA PADA TABEL Gn_Cyan_Atas, dan Sub_Gn_Cyan_Atas PADA DATA KOLOM Bass DAN KOLOM Trebel (Part-2)
Semua kode saya buat dalam file dengan nama file: CRUD_Gn_Cyan_Atas(gabung).py , kemudian elemen-elemen dan fungsi-fungsi lainnya saya tambahkan untuk melengkapi isi file tersebut, khususnya untuk melakukan CRUD dalam mengambil data Bass dari kolom Bass_1, Bass_2, Bass_3, Bass_4, dan Bass_5, baik dari tabel Gn_Cyan_Atas maupun dari tabel Sub_Gn_Cyan_Atas, lalu menampilkannya pada entry_bass dan entry_sub_bass. Kemudian mengambil data Trebel dari kolom Trebel_1, Trebel_2, Trebel_3, Trebel_4, dan Trebel_5, baik dari tabel Gn_Cyan_Atas maupun dari tabel Sub_Gn_Cyan_Atas, lalu menampilkannya pada entry_trebel dan entry_sub_trebel. Sehingga kode keseluruhan menjadi berikut ini:
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import sqlite3
from tkinter import Tk, Label, Entry, Button, Frame, StringVar
from tkinter import Tk, Button, Frame, TclError
# Function to initialize database
def init_db():
conn = sqlite3.connect("DATAMUSIK.db")
c = conn.cursor()
# Create Gn_Cyan_Atas table
c.execute('''CREATE TABLE IF NOT EXISTS Gn_Cyan_Atas (
ID INTEGER PRIMARY KEY,
Level_R TEXT,
Bass_1 TEXT,
Bass_2 TEXT,
Bass_3 TEXT,
Bass_4 TEXT,
Bass_5 TEXT,
Trebel_1 TEXT,
Trebel_2 TEXT,
Trebel_3 TEXT,
Trebel_4 TEXT,
Trebel_5 TEXT
)''')
# Create Sub_Gn_Cyan_Atas table
c.execute('''CREATE TABLE IF NOT EXISTS Sub_Gn_Cyan_Atas (
Sub_ID INTEGER PRIMARY KEY,
Level_D TEXT,
Bass_1 TEXT,
Bass_2 TEXT,
Bass_3 TEXT,
Bass_4 TEXT,
Bass_5 TEXT,
Trebel_1 TEXT,
Trebel_2 TEXT,
Trebel_3 TEXT,
Trebel_4 TEXT,
Trebel_5 TEXT
)''')
conn.commit()
conn.close()
# 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()
# Function to clear content frame
def clear_content_frame():
for widget in content_frame.winfo_children():
widget.destroy()
# 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)
# 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_atas_page()
# Function to display default page
def display_gn_cyan_atas_page():
clear_content_frame()
tk.Label(content_frame, text="Ini adalah Halaman Gn_Cyan_Atas", 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']
display_pages(progres)
# 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']
display_pages(progres)
# 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="Turun", 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="Turun", 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="Turun", 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
options_frame = tk.Frame(root, bg="#c3c3c3")
options_frame.place(x=0, y=50)
#options_frame.pack(side=tk.LEFT, fill=tk.X)
def run_file(filepath):
try:
with open(filepath, 'r') as file:
exec(file.read(), globals())
messagebox.showinfo("Success", f"{filepath} executed successfully")
except Exception as e:
messagebox.showerror("Error", f"Failed to execute {filepath}: {e}")
# Penggunaann run_file
def run_gn_a_trebel_file():
run_file("CRUD_Gn_A_Trebel.py")
def run_gn_biru_file():
run_file("CRUD_Gn_Biru.py")
def run_gn_cyan_bawah_file(): run_file("CRUD_Gn_Cyan_Bawah(gabung).py")
def run_gn_cyan_atas_file():
run_file("CRUD_Gn_Cyan_Atas(gabung).py")
def run_gn_a_bass_file():
run_file("CRUD_Gn_A_Bass.py")
# Fungsi yang akan memodifikasi tampilan tombol dan indikator
def highlight_button(button, indicator):
clear_highlight() # Bersihkan highlight sebelum menyorot tombol yang baru
button.config(bg="tomato") # Ubah warna background tombol saat aktif
indicator.config(bg="yellow") # Ubah warna background indikator saat tombol diklik
def clear_highlight():
# Fungsi ini mengembalikan semua indikator ke status normal (tidak menyala)
try:
for widget in options_frame.winfo_children():
if isinstance(widget, tk.Button):
widget.config(bg="green") # Reset warna background tombol
if isinstance(widget, tk.Label):
widget.config(bg="#c3c3c3") # Reset warna background indikator
except TclError as e:
print("Error while clearing highlight:", e)
# Fungsi yang dijalankan saat tombol diklik
def on_gn_a_bass_click():
try:
run_gn_a_bass_file()
highlight_button(Gn_A_Bass_btn, Gn_A_Bass_indicate)
Gn_A_Bass_page()
except TclError as e:
print("Error in on_gn_a_bass_click:", e)
def on_gn_biru_click():
try:
run_gn_biru_file()
highlight_button(Gn_Biru_btn, Gn_Biru_indicate)
Gn_Biru_page()
except TclError as e:
print("Error in on_gn_biru_click:", e)
def on_gn_cyan_atas_click():
try:
run_gn_cyan_atas_file()
highlight_button(Gn_Cyan_Atas_btn, Gn_Cyan_Atas_indicate)
Gn_Cyan_Atas_page()
except TclError as e:
print("Error in on_gn_cyan_atas_click:", e)
def on_gn_cyan_bawah_click():
try:
run_gn_cyan_bawah_file()
highlight_button(Gn_Cyan_Bawah_btn, Gn_Cyan_Bawah_indicate)
Gn_Cyan_Bawah_page()
except TclError as e:
print("Error in on_gn_cyan_bawah_click:", e)
def on_gn_a_trebel_click():
try:
run_gn_a_trebel_file()
highlight_button(Gn_A_Trebel_btn, Gn_A_Trebel_indicate)
Gn_A_Trebel_page()
except TclError as e:
print("Error in on_gn_a_trebel_click:", 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":
# Button and Indicator for Gn_Cyan_Atas
Gn_Cyan_Atas_btn = tk.Button(options_frame, text="Gn_Cyan_Atas", font=("bold", 5), fg="yellow", bd=0, bg="green", command= on_gn_cyan_atas_click)
Gn_Cyan_Atas_btn.place(x=3, y=0)
Gn_Cyan_Atas_indicate = tk.Label(options_frame, text=" ", bg="#c3c3c3")
Gn_Cyan_Atas_indicate.place(x=2, y=5, width=5, height=45)
# Button and Indicator for Gn_Cyan_Bawah
Gn_Cyan_Bawah_btn = tk.Button(options_frame, text="Gn_Cyan_Bawah", font=("bold", 5), fg="yellow", bd=0, bg="green", command= on_gn_cyan_bawah_click)
Gn_Cyan_Bawah_btn.place(x=3, y=50)
Gn_Cyan_Bawah_indicate = tk.Label(options_frame, text=" ", bg="#c3c3c3")
Gn_Cyan_Bawah_indicate.place(x=2, y=55, width=5, height=45)
# Button and Indicator for Gn_A_Trebel
Gn_A_Trebel_btn = tk.Button(options_frame, text="Gn_A_Trebel", font=("bold", 6), fg="yellow", bd=0, bg="grey", command= on_gn_a_trebel_click)
Gn_A_Trebel_btn.place(x=3, y=100)
Gn_A_Trebel_indicate = tk.Label(options_frame, text=" ", bg="#c3c3c3")
Gn_A_Trebel_indicate.place(x=2, y=105, width=5, height=45)
else: # Mode "naik"
# Button and Indicator for Gn_Cyan_Atas
Gn_Cyan_Atas_btn = tk.Button(options_frame, text="Gn_Cyan_Atas", font=("bold", 5), fg="yellow", bd=0, bg="green", command= on_gn_cyan_atas_click)
Gn_Cyan_Atas_btn.place(x=3, y=0)
Gn_Cyan_Atas_indicate = tk.Label(options_frame, text=" ", bg="#c3c3c3")
Gn_Cyan_Atas_indicate.place(x=2, y=5, width=5, height=45)
# Button and Indicator for Gn_A_Bass
Gn_A_Bass_btn = tk.Button(options_frame, text="Gn_A_Bass", font=("bold", 6), fg="yellow", bd=0, bg="grey", command= on_gn_a_bass_click)
Gn_A_Bass_btn.place(x=3, y=50)
Gn_A_Bass_indicate = tk.Label(options_frame, text=" ", bg="#c3c3c3")
Gn_A_Bass_indicate.place(x=2, y=55, 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
# Button and Indicator for Gn_A_Bass
Gn_A_Bass_btn = tk.Button(options_frame, text="Gn_A_Bass", font=("bold", 6), fg="yellow", bd=0, bg="grey", command= on_gn_a_bass_click)
Gn_A_Bass_btn.place(x=3, y=0)
Gn_A_Bass_indicate = tk.Label(options_frame, text=" ", bg="#c3c3c3")
Gn_A_Bass_indicate.place(x=2, y=5, width=5, height=45)
# Button and Indicator for Gn_Biru
Gn_Biru_btn = tk.Button(options_frame, text="Gn_Biru", font=("bold", 7), fg="yellow", bd=0, bg="blue", command= on_gn_biru_click)
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)
# Button and Indicator for Gn_Cyan_Atas
Gn_Cyan_Atas_btn = tk.Button(options_frame, text="Gn_Cyan_Atas", font=("bold", 5), fg="yellow", bd=0, bg="green", command= on_gn_cyan_atas_click)
Gn_Cyan_Atas_btn.place(x=3, y=100)
Gn_Cyan_Atas_indicate = tk.Label(options_frame, text=" ", bg="#c3c3c3")
Gn_Cyan_Atas_indicate.place(x=2, y=105, width=5, height=45)
# Button and Indicator for Gn_Cyan_Bawah
Gn_Cyan_Bawah_btn = tk.Button(options_frame, text="Gn_Cyan_Bawah", font=("bold", 5), fg="yellow", bd=0, bg="green", command= on_gn_cyan_bawah_click)
Gn_Cyan_Bawah_btn.place(x=3, y=150)
Gn_Cyan_Bawah_indicate = tk.Label(options_frame, text=" ", bg="#c3c3c3")
Gn_Cyan_Bawah_indicate.place(x=2, y=155, width=5, height=45)
# Button and Indicator for Gn_A_Trebel
Gn_A_Trebel_btn = tk.Button(options_frame, text="Gn_A_Trebel", font=("bold", 6), fg="yellow", bd=0, bg="grey", command= on_gn_a_trebel_click)
Gn_A_Trebel_btn.place(x=3, y=200)
Gn_A_Trebel_indicate = tk.Label(options_frame, text=" ", bg="#c3c3c3")
Gn_A_Trebel_indicate.place(x=2, y=205, width=5, height=45)
options_frame.pack(side=tk.LEFT)
options_frame.pack_propagate(False)
options_frame.configure(width=170, height=300)
# Function to clear content frame
def clear_content_frame():
for widget in content_frame.winfo_children():
widget.destroy()
# Bottom Frame
bottom_frame = tk.Frame(root, bg="#e2e2e2")
bottom_frame.pack(side=tk.TOP, fill=tk.X)
def open_data_gn_cyan_atas_file():
filepath = "DATA_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}")
#Gugusan Nada Terpilih: "Gn_Cyan_Atas" Terpilih
gugusan_label = tk.Label(bottom_frame, text="Gn_Cyan_Atas", 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 Cyan_Atas", command=open_data_gn_cyan_atas_file, bg="green", fg="white")
crud_btn.grid(row=5, column=0, padx=10, pady=5)
#Tampilkan semua Data
tampil_dats_btn = tk.Button(bottom_frame, text="Display All DATA", command=None, bg="green", fg="white")
tampil_dats_btn.grid(row=5, column=1, padx=10, pady=5)
# 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)
# Buat label_info di frame_top
label_info = tk.Label(frame_top, fg="tomato", text="Pilih gugusan nada Gn_Cyan_Atas \n untuk dirangkai dalam notasi angka lagu:\n")
label_info.grid(row=0, column=0, sticky="w", padx=0, pady=(0, 5)) # Letakkan di baris pertama
# Letakkan entry 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)
# Hapus label, entry field, dan combobox untuk Progres dan Mode yang tidak digunakan lagi
# abel_progres.grid_forget()
# progres_combobox.grid_forget()
# label_mode.grid_forget()
# mode_combobox.grid_forget()
# Fungsi untuk memilih nada Bass, Trebel Biasa, dan Trebel_Aneh
def pilih_nada():
pass
separator = ttk.Separator(frame_top, orient='horizontal')
separator.grid(row=6, column=0, sticky="ew", pady=10)
# Tombol untuk memilih nada
select_button = tk.Button(frame_top, text="Pilih Nada", bg="green", fg="white", command=pilih_nada)
select_button.grid(row=7, column=1, padx=0, pady=0)
separator = ttk.Separator(frame_top, orient='horizontal')
separator.grid(row=8, column=0, sticky="ew", pady=10)
# 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 Atas:")
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="Sub Bass Gn Cyan Atas")
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 Atas")
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="Sub Trebel Gn Cyan Atas")
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)
# Fungsi untuk Naik ke Gn_A_Bass (file CRUD_Gn_A_Bass.py, atau Turum ke Gn_Cyan_Bawah (file CRUD_Gn_Cyan_Bawah(gabung).py)
active_page = None # Menyimpan halaman aktif
def next_to_crud_gn_a_bass():
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}")
def next_to_crud_gn_cyan_bawah():
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}")
#Fungsi Tombol Ambil Gugusan nada Teroilih
copy_bass_gn_cyan_atas_btn = tk.Button(bottom_frame, text="Copy Bass", command=None, bg="lightgreen", fg="blue")
copy_bass_gn_cyan_atas_btn.grid(row=9, column=1, padx=10, pady=5)
copy_bass_sub_gn_cyan_atas_btn = tk.Button(bottom_frame, text="Copy Sub_Bass", command=None, bg="lightgreen", fg="blue")
copy_bass_sub_gn_cyan_atas_btn.grid(row=9, column=2, padx=10, pady=5)
copy_trebel_gn_cyan_atas_btn = tk.Button(bottom_frame, text="Copy Trebel", command=None, bg="lightgreen", fg="blue")
copy_trebel_gn_cyan_atas_btn.grid(row=9, column=3, padx=10, pady=5)
copy_trebel_sub_gn_cyan_atas_btn = tk.Button(bottom_frame, text="Copy Sub Trebel", command=None, bg="lightgreen", fg="blue")
copy_trebel_sub_gn_cyan_atas_btn.grid(row=9, column=4, padx=10, pady=5)
separator = ttk.Separator(bottom_frame, orient='horizontal')
separator.grid(row=10, column=0, sticky="ew", pady=15)
prev_btn = tk.Button(bottom_frame, text="< Prev", command=None, bg="orange", fg="white")
prev_btn.grid(row=13, column=0, padx=10, pady=5)
naik_btn = tk.Button(bottom_frame, text=" Naik Lagi > ", command=next_to_crud_gn_a_bass, bg="orange", fg="white")
naik_btn.grid(row=12, column=1, padx=10, pady=5)
turun_btn = tk.Button(bottom_frame, text="Turun Lagi >", command=next_to_crud_gn_cyan_bawah, bg="orange", fg="white")
turun_btn.grid(row=13, column=1, padx=10, pady=5)
# Initialize the application with the first progress setup
setup_naik_mode(1)
# Initialize the application with the default page
display_gn_cyan_atas_page()
# Inisialisasi database
init_db()
# Main Function
if __name__ == "__main__":
init_default_page()
root.mainloop()
Jika tombol "Data Cyan Atas" ditekan maka akan membuka isi file DATA_Gn_Cyan_Atas(gabung).py. Kemudian sekarang kita akan melakukan CRUD pada data Bass pada tabel Gn_Cyan_Atas, dan Sub_Gn_Cyan_Atas
Untuk memulai proses CRUD (Create, Read, Update, Delete) pada data Bass dalam tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas`, kita dapat membuat antarmuka dengan tkinter yang memungkinkan pengguna berinteraksi dengan data dalam tabel tersebut. Kita juga perlu memodifikasi file `DATA_Gn_Cyan_Atas(gabung).py` agar dapat menangani operasi CRUD tersebut.
### Langkah-langkah yang akan kita lakukan:
1. **Tombol "Data Cyan Atas":** Ketika tombol ini ditekan, kita akan membuka halaman atau frame baru yang berisi antarmuka CRUD untuk tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas`.
2. **Membuat Antarmuka CRUD:**
- **Create (C):** Form input untuk memasukkan data baru ke dalam tabel.
- **Read (R):** Tabel atau daftar untuk melihat data yang ada.
- **Update (U):** Form yang memungkinkan pengeditan data yang sudah ada.
- **Delete (D):** Tombol atau opsi untuk menghapus data dari tabel.
3. **Memodifikasi File `DATA_Gn_Cyan_Atas(gabung).py`:** Kita akan menambahkan fungsi CRUD yang diperlukan di dalam file ini, seperti `add_data()`, `view_data()`, `update_data()`, dan `delete_data()`.
### Contoh Kode:
Berikut adalah contoh dasar untuk implementasi tombol dan antarmuka CRUD:
#### 1. **Membuat Tombol "Data Cyan Atas":**
```python
# Misalnya di dalam main.py atau file utama tkinter
from tkinter import *
from DATA_Gn_Cyan_Atas import open_data_cyan_atas
def main_window():
root = Tk()
root.title("Data Cyan Atas")
btn_data_cyan_atas = Button(root, text="Data Cyan Atas", command=open_data_cyan_atas)
btn_data_cyan_atas.pack(pady=20)
root.mainloop()
if __name__ == "__main__":
main_window()
```
#### 2. **File `DATA_Gn_Cyan_Atas(gabung).py`:**
```python
import sqlite3
from tkinter import *
from tkinter import ttk
def open_data_cyan_atas():
window = Toplevel()
window.title("CRUD Data Cyan Atas")
# Connect to the database
conn = sqlite3.connect('DATAMUSIK.db')
cursor = conn.cursor()
# Function to add data
def add_data():
# Implementasi menambahkan data ke tabel Gn_Cyan_Atas atau Sub_Gn_Cyan_Atas
pass
# Function to view data
def view_data():
# Implementasi menampilkan data dari tabel Gn_Cyan_Atas atau Sub_Gn_Cyan_Atas
pass
# Function to update data
def update_data():
# Implementasi mengupdate data di tabel Gn_Cyan_Atas atau Sub_Gn_Cyan_Atas
pass
# Function to delete data
def delete_data():
# Implementasi menghapus data dari tabel Gn_Cyan_Atas atau Sub_Gn_Cyan_Atas
pass
# Create the interface
# Label, Entry, Button, dan Tabel untuk CRUD
Label(window, text="ID").grid(row=0, column=0, padx=10, pady=10)
entry_id = Entry(window)
entry_id.grid(row=0, column=1, padx=10, pady=10)
Label(window, text="Bass").grid(row=1, column=0, padx=10, pady=10)
entry_bass = Entry(window)
entry_bass.grid(row=1, column=1, padx=10, pady=10)
Button(window, text="Add Data", command=add_data).grid(row=2, column=0, padx=10, pady=10)
Button(window, text="View Data", command=view_data).grid(row=2, column=1, padx=10, pady=10)
Button(window, text="Update Data", command=update_data).grid(row=2, column=2, padx=10, pady=10)
Button(window, text="Delete Data", command=delete_data).grid(row=2, column=3, padx=10, pady=10)
window.mainloop()
```
#### 3. **Fungsi CRUD di `DATA_Gn_Cyan_Atas(gabung).py`:**
Dalam file ini, kita akan mendefinisikan fungsi CRUD seperti berikut:
```python
def add_data():
id_data = entry_id.get()
bass_data = entry_bass.get()
# Lakukan insert data ke database
cursor.execute("INSERT INTO Gn_Cyan_Atas (ID, Bass) VALUES (?, ?)", (id_data, bass_data))
conn.commit()
def view_data():
cursor.execute("SELECT * FROM Gn_Cyan_Atas")
records = cursor.fetchall()
# Tampilkan records di dalam tabel atau listbox
for row in records:
print(row)
def update_data():
id_data = entry_id.get()
bass_data = entry_bass.get()
# Lakukan update data berdasarkan ID
cursor.execute("UPDATE Gn_Cyan_Atas SET Bass = ? WHERE ID = ?", (bass_data, id_data))
conn.commit()
def delete_data():
id_data = entry_id.get()
# Lakukan delete data berdasarkan ID
cursor.execute("DELETE FROM Gn_Cyan_Atas WHERE ID = ?", (id_data,))
conn.commit()
```
### Integrasi:
Setelah menambahkan kode ini, tombol "Data Cyan Atas" akan membuka jendela baru yang memungkinkan pengguna untuk melakukan operasi CRUD pada tabel `Gn_Cyan_Atas` dan `Sub_Gn_Cyan_Atas`. Pastikan semua entri yang diperlukan dalam database telah ditentukan agar operasi CRUD berjalan lancar.
Jika ada spesifikasi lebih lanjut atau detail yang perlu ditambahkan, silakan beritahu!
Untuk mengambil data Bass terpilih dari tabel Gn_Cyan_Atas, dan Sub_Gn_Cyan_Atas, lalu menampilkan data Bass terpilih tersebut pada entry_bass, dan entry_sub_bas, maka kode saya persingkat dengan membuat elemen dan fungsi yang terkait yang penting pentinh saja dan menambahkan beberapa elemen dan fungsi lainnya untuk menjadikan sebuah file dengan nama filenya: CRUD_Gn_Cyan_Atas_Bass.py yang kode isi filenya adalah berikut ini:
import tkinter as tk
from tkinter import ttk
from tkinter import messagebox
import sqlite3
from tkinter import Tk, Label, Entry, Button, Frame, StringVar
# 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)
# Letakkan entry 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)
# Hapus label, entry field, dan combobox untuk Progres dan Mode yang tidak digunakan lagi
# abel_progres.grid_forget()
# progres_combobox.grid_forget()
# label_mode.grid_forget()
# mode_combobox.grid_forget()
# Fungsi untuk mengambil data Gn_Cyan_Bawah dari database berdasarkan ID
def get_data_gn_cyan_bawah_from_db(id_selected):
conn = sqlite3.connect("DATAMUSIK.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM Gn_Cyan_Bawah 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_bawah_from_db(sub_id_selected):
conn = sqlite3.connect("DATAMUSIK.db")
cursor = conn.cursor()
cursor.execute("SELECT * FROM Sub_Gn_Cyan_Bawah WHERE Sub_ID = ?", (sub_id_selected,))
data = cursor.fetchone()
conn.close()
return data
# Fungsi untuk menyesuaikan nilai bass berdasarkan progres
def adjust_bass_value(bass_value, progres):
if bass_value.isdigit():
adjusted_value = ''.join(str(int(char) - progres) if char.isdigit() else char for char in bass_value)
else:
adjusted_value = bass_value
return adjusted_value
# Fungsi untuk menyesuaikan nilai bass berdasarkan progres
def adjust_sub_bass_value(sub_bass_value, progres):
if sub_bass_value.isdigit():
adjusted_value = ''.join(str(int(char) - progres) if char.isdigit() else char for char in sub_bass_value)
else:
adjusted_value = sub_bass_value
return adjusted_value
# Fungsi untuk memilih nada Bass, Trebel Biasa, dan bass
def pilih_nada():
pass
# Fungsi untuk memastikan urutan Level_Gn dan ID
def level_gn():
try:
level_gn_selected = int(entry_level_gn.get())
if level_gn_selected in [1, 5, 9]:
id_selected = 1
elif level_gn_selected in [2, 6, 10]:
id_selected = 2
elif level_gn_selected in [3, 7, 11]:
id_selected = 3
elif level_gn_selected in [4, 8, 12]:
id_selected = 4
else:
messagebox.showerror("Error", "Level_Gn ada 1-12. L-1 = L-5 = L-9 = ID 1, L-2 = L-6 = L-10 = ID 2, L-3 = L-7 = L-11 = ID 3, L-4 = L-8 = L-12 = ID 4")
return None
entry_id.delete(0, 'end')
entry_id.insert(0, str(id_selected))
id_selected_sub = 1
return id_selected, id_selected_sub
except ValueError:
messagebox.showerror("Error", "Masukkan nilai Level_Gn yang valid!")
return None, None
separator = ttk.Separator(frame_top, orient='horizontal')
separator.grid(row=6, column=0, sticky="ew", pady=10)
# Tombol untuk memilih nada
select_button = tk.Button(frame_top, text="Pilih Nada", bg="green", fg="white", command=pilih_nada)
select_button.grid(row=7, column=1, padx=0, pady=0)
# 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 Atas:")
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="Sub Bass Gn Cyan Atas")
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 Atas")
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="Sub Trebel Gn Cyan Atas")
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)
root.mainloop()
Tolong lengkapi kode pada bagian fungsi def pilih_nada, dengan menerapkan logika pada Data Bass di Gn_Cyan_Atas, dan Sub_Gn_Cyan_Atas berikut ini:
Berikut ini logika yang diterapkan pada data tabel Gn_Cyan_Atas, dan tabel Sub_Gn_Cyan_Atas:
Logika pada tabel data Gn_Cyan_Atas:
I. Jika data gugus data yang terpilih dari kolom Bass pada Gn_Cyan_Atas:
1. Jika data dari Bass_1 id 1 maka level_gn = 1, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka data dari Bass_1 id 1 menjadi data Bass_1 id 1
2. Jika data dari Bass_1 id 2 maka level_gn = 2, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka data dari Bass_1 id 2 menjadi data Bass_1 id 2
3. Jika data dari Bass_1 id 3 maka level_gn = 3, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka data dari Bass_1 id 3 menjadi Bass_1 id 3.
4. Jika data dari Bass_2 id 1 maka level_gn = 4, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka data dari Bass_2 id 1 menjadi data Bass_2 id 1.
5. Kolom Bass_2 id 2 adalah kosong (tidak boleh menginput data di sel ini).
6. . Jika data dari Bass_2 id 3 maka level_gn = 5, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka data dari Bass_2 id 3 menjadi data Bass_2 id 3.
7. Jika data dari Bass_3 id 1 maka level_gn = 6, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka data dari Bass_3 id 1 menjadi data Bass_3 id 1.
8. Jika data dari Bass_3 id 2 maka level_gn = 7, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka data dari Bass_3 id 2 menjadi data Bass_3 id 2.
9. Jika data dari Bass_3 id 3 maka level_gn = 8, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka data dari Bass_3 id 3 menjadi data Bass_3 id 3.
10. Kolom Bass_4 id 1 adalah kosong (tidak boleh menginput data di sel ini).
11. . Jika data dari Bass_4 id 2 maka level_gn = 9, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka data dari Bass_4 id 2 menjadi data Bass_4 id 2.
12. Jika data dari Bass_4 id 3 maka level_gn = 10, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka data dari Bass_4 id 3 menjadi data Bass_4 id 3.
13. Jika data dari Bass_5 id 1 maka level_gn = 11, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka data dari Bass_5 id 1 menjadi data Bass_5 id 1.
14, Jika data dari Bass_5 id 2 maka level_gn = 12, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka data dari Bass_5 id 2 menjadi data Bass_5 id 2.
15. Kolom Bass_5 id 3 adalah kosong (tidak boleh menginput data di sel ini).
Logika pada tabel data Sub_Gn_Cyan_Bawah:
II. Jika data gugus nada yang terpilih dari kolom Bass pada Sub_Gn_Cyan_Atas:
1.. Jika data dari Bass_1 sub_id 1 maka level_gn = 1, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka data dari Bass_1 sub_id 1 adalah menjadi data Bass_1 sub_id 1.
2.. Jika data dari Bass_2 sub_id 1 maka level_gn = 2, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka data dari Bass_2 sub_id 1 adalah menjadi data Bass_2 sub_id 1.
3.. Jika data dari Bass_3 sub_id 1 maka level_gn = 3, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka data dari Bass_3 sub_id 1 adalah menjadi data Bass_3 sub_id 1.
4.. Jika data dari Bass_4 sub_id 1 maka level_gn = 4, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka data dari Bass_4 sub_id 1 adalah menjadi data Bass_4 sub_id 1.
5. Kolom Bass_5 Sub_id 1 adalah kosong (tidak boleh menginput data di sel ini).
6. Jika data dari Bass_1 sub_id 1 maka level_gn = 5, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka untuk level_gn 5, data dari Bass_1 sub_id 1 adalah menjadi data Bass_1 sub_id 1 yang setiap karakter angka datanya dikurang 1.
7.. Jika data dari Bass_2 sub_id 1 maka level_gn = 6, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka untuk level_gn 6, data dari Bass_2 sub_id 1 adalah menjadi data Bass_2 sub_id 1 yang setiap karakter angka datanya dikurang 1.
8. Jika data dari Bass_3 sub_id 1 maka level_gn = 7, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka untuk level_gn 7, data dari Bass_3 sub_id 1 adalah menjadi data Bass_3 sub_id 1 yang setiap karakter angka datanya dikurang 1.
9. Jika data dari Bass_4 sub_id 1 maka level_gn = 8, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka untuk level_gn 8, data dari Bass_4 sub_id 1 adalah menjadi data Bass_4 sub_id 1 yang setiap karakter angka datanya dikurang 1.
10. Jika data dari Bass_1 sub_id 1 maka level_gn = 9, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka untuk level_gn 9, data dari Bass_1 sub_id 1 adalah menjadi data Bass_1 sub_id 1 yang setiap karakter angka datanya dikurang 2.
11.. Jika data dari Bass_2 sub_id 1 maka level_gn = 10, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka untuk level_gn 10, data dari Bass_2 sub_id 1 adalah menjadi data Bass_2 sub_id 1 yang setiap karakter angka datanya dikurang 2.
12. Jika data dari Bass_3 sub_id 1 maka level_gn = 11, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka untuk level_gn 11, data dari Bass_3 sub_id 1 adalah menjadi data Bass_3 sub_id 1 yang setiap karakter angka datanya dikurang 2.
13. Jika data dari Bass_4 sub_id 1 maka level_gn = 12, dan jika progres 1, 2 atau 3, dan jika mode Naik atau Turun:
maka untuk level_gn 12, data dari Bass_4 sub_id 1 adalah menjadi data Bass_4 sub_id 1 yang setiap karakter angka datanya dikurang 2.
Dan pastikan data Bass yang terpilih yang diambil dari tabel Gn_Cyan_Atas akan ditampilkan pada entry_bass, sedangkan data Bass yang terpilih yang diambil dari tabel Sub_Gn_Cyan_Atas akan ditampilkan pada entry_sub_bass
Komentar
Posting Komentar
This Message