MEMBUAT TABEL DAN CRUD DATA Gn_Cyan_Atas
Tolong perbaiki kode berikut agar supaya semua tombol CRUD dapat berfungsi dengan baik untuk membuat, membaca, memperbaharui, menghapus, dan membersihkan data.
Kode:
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")
main_frame = tk.Frame(root)
main_frame.pack(fill=tk.BOTH, expand=1)
canvas = tk.Canvas(main_frame)
canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)
scrollbar_y = ttk.Scrollbar(main_frame, orient=tk.VERTICAL, command=canvas.yview)
scrollbar_y.pack(side=tk.RIGHT, fill=tk.Y)
canvas.configure(yscrollcommand=scrollbar_y.set)
canvas.bind('<Configure>', lambda e: canvas.configure(scrollregion=canvas.bbox("all")))
content_frame = tk.Frame(canvas)
canvas.create_window((0, 0), window=content_frame, anchor="nw")
data_frame = tk.Frame(content_frame)
data_frame.grid(row=0, column=0, padx=10, pady=10)
# Create database and tables if they don't exist
def create_database():
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
)''')
conn.commit()
conn.close()
# Fungsi untuk menampilkan pesan peringatan
def show_warning(message):
messagebox.showwarning("Peringatan", message)
# Fungsi untuk membersihkan entry
def clear_entries(entries):
for entry in entries:
entry.delete(0, tk.END)
def create_gn_cyan_atas_record(row):
if row[1].get() == "": # Jika Level_R diubah
show_warning("Cell ini tidak boleh data diinput")
return
data = tuple(entry.get() for entry in row)
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("INSERT INTO Gn_Cyan_Atas (ID, Level_R, Bass_1, Bass_2, Bass_3, Bass_4, Bass_5, Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
data)
conn.commit()
conn.close()
clear_entries_gn_cyan_atas(row)
display_records()
def read_gn_cyan_atas_record(row):
id_value = row[0].get()
if id_value == "":
show_warning("Silakan masukkan ID untuk membaca record.")
return
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("SELECT * FROM Gn_Cyan_Atas WHERE ID=?", (id_value,))
record = c.fetchone()
conn.close()
if record:
for i, entry in enumerate(row):
entry.delete(0, tk.END)
entry.insert(0, record[i])
def update_gn_cyan_atas_record(row):
if row[1].get() == "": # Jika Level_R diubah
show_warning("Cell ini tidak boleh data diinput")
return
data = tuple(entry.get() for entry in row[1:]) + (row[0].get(),)
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("UPDATE Gn_Cyan_Atas SET Level_R = ?, Bass_1 = ?, Bass_2 = ?, Bass_3 = ?, Bass_4 = ?, Bass_5 = ?, Trebel_1 = ?, Trebel_2 = ?, Trebel_3 = ?, Trebel_4 = ?, Trebel_5 = ? WHERE ID = ?",
data)
conn.commit()
conn.close()
clear_entries_gn_cyan_atas(row)
display_records()
def delete_gn_cyan_atas_record(row):
id_value = row[0].get()
if id_value == "":
show_warning("Silakan masukkan ID untuk menghapus record.")
return
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("DELETE FROM Gn_Cyan_Atas WHERE ID=?", (id_value,))
conn.commit()
conn.close()
clear_entries_gn_cyan_atas(row)
display_records()
def clear_entries_gn_cyan_atas(row=None):
if row:
for entry in row:
entry.delete(0, tk.END)
else:
for row in entry_rows:
for entry in row:
entry.delete(0, tk.END)
setup_default_mode()
def setup_default_mode():
levels = ["Satu", "Dua", "Tiga"]
for row_index, row in enumerate(entry_rows):
row[1].delete(0, tk.END)
row[1].insert(0, levels[row_index])
row[1].config(state='readonly')
if row_index == 0: # ID 1
row[5].config(state='disabled') # Bass_4
elif row_index == 1: # ID 2
row[3].config(state='disabled') # Bass_2
elif row_index == 2: # ID 3
row[6].config(state='disabled') # Bass_5
def display_records():
for widget in record_frame.winfo_children():
widget.destroy()
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("SELECT * FROM Gn_Cyan_Atas")
records = c.fetchall()
conn.close()
for i, record in enumerate(records):
for j, value in enumerate(record):
tk.Label(record_frame, text=value).grid(row=i, column=j, padx=5, pady=5)
# Entry untuk Gn_Cyan_Atas
tk.Label(data_frame, fg="tomato", text="CRUD Data \nGn_Cyan_Atas").grid(row=0, column=0, padx=5, pady=5)
# Entry untuk Gn_Cyan_Atas
labels = ["ID", "Level_R", "Bass_1", 'Bass_2', 'Bass_3', 'Bass_4', 'Bass_5', 'Trebel_1', 'Trebel_2', 'Trebel_3', 'Trebel_4', 'Trebel_5']
for col_index, label in enumerate(labels):
tk.Label(data_frame, text=label).grid(row=2, column=col_index, padx=5, pady=5)
entry_rows = []
for i in range(3): # Create three rows of entries
row = []
for j in range(len(labels)):
if j == 0: # ID column
entry = tk.Entry(data_frame, width=4)
elif j == 1: # Level column
entry = tk.Entry(data_frame, width=6, bg="white", justify="center")
levels = ["Satu", "Dua", "Tiga"]
entry.insert(0, levels[i])
entry.config(state='readonly')
else:
entry = tk.Entry(data_frame, width=20)
entry.grid(row=i+3, column=j, padx=5, pady=5)
row.append(entry)
entry_rows.append(row)
# EntryBox untuk ID
id_label = tk.Label(data_frame, text="ID for Operation")
id_label.grid(row=6, column=0, padx=5, pady=5)
id_entry = tk.Entry(data_frame, width=6)
id_entry.grid(row=7, column=0, padx=5, pady=5)
def input_id_entry():
# Dapatkan teks dari entry
input_id = id_entry.get()
# Bersihkan entry setelah input
id_entry.delete(0, tk.END)
# Menampilkan pesan konfirmasi
messagebox.showinfo("Info", "ID berhasil diinput dan dibersihkan")
# Membuat tombol input_id
input_id_button = tk.Button(data_frame, text="Clear ID", bg="red", fg="white", command=input_id_entry)
input_id_button.place(x=460, y=345)
separator = tk.Frame(data_frame, height=12, bg="grey")
separator.grid(row=5, column=0, padx=5, pady=5)
# Fungsi untuk tombol CRUD
create_button = tk.Button(data_frame, text="Create", bg="green", fg="white",command=lambda: create_gn_cyan_atas_record(entry_rows[0]))
create_button.grid(row=7, column=2, padx=5, pady=5)
read_button = tk.Button(data_frame, text="Read", bg="green", fg="white", command=lambda: read_gn_cyan_atas_record(entry_rows[0]))
read_button.grid(row=7, column=3, padx=5, pady=5)
update_button = tk.Button(data_frame, text="Update", bg="green", fg="white",command=lambda: update_gn_cyan_atas_record(entry_rows[0]))
update_button.grid(row=7, column=4, padx=5, pady=5)
delete_button = tk.Button(data_frame, text="Delete", bg="green", fg="white", command=lambda: delete_gn_cyan_atas_record(entry_rows[0]))
delete_button.grid(row=7, column=5, padx=5, pady=5)
clear_button = tk.Button(data_frame, text="Clear", bg="green", fg="white",command=lambda: clear_entries_gn_cyan_atas(entry_rows[0]))
clear_button.grid(row=7, column=6, padx=5, pady=5)
# Frame untuk menampilkan record Gn_Cyan_Atas
record_fram
e = tk.Frame(data_frame)
record_frame.grid(row=8, column=0, padx=10, pady=10)
# Menampilkan seluruh record dari Sub_Gn_Cyan_Atas saat program dijalankan
create_database()
display_records()
root.mainloop()
Saya telah melakukan beberapa perbaikan pada kode Anda untuk memastikan bahwa semua tombol CRUD dapat berfungsi dengan baik. Berikut adalah kode yang telah diperbaiki:
```python
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")
main_frame = tk.Frame(root)
main_frame.pack(fill=tk.BOTH, expand=1)
canvas = tk.Canvas(main_frame)
canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)
scrollbar_y = ttk.Scrollbar(main_frame, orient=tk.VERTICAL, command=canvas.yview)
scrollbar_y.pack(side=tk.RIGHT, fill=tk.Y)
canvas.configure(yscrollcommand=scrollbar_y.set)
canvas.bind('<Configure>', lambda e: canvas.configure(scrollregion=canvas.bbox("all")))
content_frame = tk.Frame(canvas)
canvas.create_window((0, 0), window=content_frame, anchor="nw")
data_frame = tk.Frame(content_frame)
data_frame.grid(row=0, column=0, padx=10, pady=10)
# Create database and tables if they don't exist
def create_database():
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
)''')
conn.commit()
conn.close()
# Fungsi untuk menampilkan pesan peringatan
def show_warning(message):
messagebox.showwarning("Peringatan", message)
# Fungsi untuk membersihkan entry
def clear_entries(entries):
for entry in entries:
entry.delete(0, tk.END)
def create_gn_cyan_atas_record(row):
if row[1].get() == "": # Jika Level_R diubah
show_warning("Cell ini tidak boleh data diinput")
return
data = tuple(entry.get() for entry in row)
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("INSERT INTO Gn_Cyan_Atas (ID, Level_R, Bass_1, Bass_2, Bass_3, Bass_4, Bass_5, Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
data)
conn.commit()
conn.close()
clear_entries_gn_cyan_atas(row)
display_records()
def read_gn_cyan_atas_record(row):
id_value = row[0].get()
if id_value == "":
show_warning("Silakan masukkan ID untuk membaca record.")
return
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("SELECT * FROM Gn_Cyan_Atas WHERE ID=?", (id_value,))
record = c.fetchone()
conn.close()
if record:
for i, entry in enumerate(row):
entry.delete(0, tk.END)
entry.insert(0, record[i])
def update_gn_cyan_atas_record(row):
if row[1].get() == "": # Jika Level_R diubah
show_warning("Cell ini tidak boleh data diinput")
return
data = tuple(entry.get() for entry in row[1:]) + (row[0].get(),)
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("UPDATE Gn_Cyan_Atas SET Level_R = ?, Bass_1 = ?, Bass_2 = ?, Bass_3 = ?, Bass_4 = ?, Bass_5 = ?, Trebel_1 = ?, Trebel_2 = ?, Trebel_3 = ?, Trebel_4 = ?, Trebel_5 = ? WHERE ID = ?",
data)
conn.commit()
conn.close()
clear_entries_gn_cyan_atas(row)
display_records()
def delete_gn_cyan_atas_record(row):
id_value = row[0].get()
if id_value == "":
show_warning("Silakan masukkan ID untuk menghapus record.")
return
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("DELETE FROM Gn_Cyan_Atas WHERE ID=?", (id_value,))
conn.commit()
conn.close()
clear_entries_gn_cyan_atas(row)
display_records()
def clear_entries_gn_cyan_atas(row=None):
if row:
for entry in row:
entry.delete(0, tk.END)
else:
for row in entry_rows:
for entry in row:
entry.delete(0, tk.END)
setup_default_mode()
def setup_default_mode():
levels = ["Satu", "Dua", "Tiga"]
for row_index, row in enumerate(entry_rows):
row[1].delete(0, tk.END)
row[1].insert(0, levels[row_index])
row[1].config(state='readonly')
if row_index == 0: # ID 1
row[5].config(state='disabled') # Bass_4
elif row_index == 1: # ID 2
row[3].config(state='disabled') # Bass_2
elif row_index == 2: # ID 3
row[6].config(state='disabled') # Bass_5
def display_records():
for widget in record_frame.winfo_children():
widget.destroy()
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("SELECT * FROM Gn_Cyan_Atas")
records = c.fetchall()
conn.close()
for i, record in enumerate(records):
for j, value in enumerate(record):
tk.Label(record_frame, text=value).grid(row=i, column=j, padx=5, pady=5)
# Entry untuk Gn_Cyan_Atas
tk.Label(data_frame, fg="tomato", text="CRUD Data \nGn_Cyan_Atas").grid(row=0, column=0, padx=5, pady=5)
# Entry untuk Gn_Cyan_Atas
labels = ["ID", "Level_R", "Bass_1", 'Bass_2', 'Bass_3', 'Bass_4', 'Bass_5', 'Trebel_1', 'Trebel_2', 'Trebel_3', 'Trebel_4', 'Trebel_5']
for col_index, label in enumerate(labels):
tk.Label(data_frame, text=label).grid(row=2, column=col_index, padx=5, pady=5)
entry_rows = []
for i in range(3): # Create three rows of entries
row = []
for j in range(len(labels)):
if j == 0: # ID column
entry = tk.Entry(data_frame, width=4)
elif j == 1: # Level column
entry = tk.Entry(data_frame, width=6, bg="white", justify="center")
levels = ["Satu", "Dua", "Tiga"]
entry.insert(0, levels[i])
entry.config(state='readonly')
else:
entry = tk.Entry(data_frame, width=20)
entry.grid(row=i+3, column=j, padx=5, pady=5)
row.append(entry)
entry_rows.append(row)
# EntryBox untuk ID
id_label = tk.Label(data_frame, text="ID for Operation")
id_label.grid(row=6, column=0, padx=5, pady=5)
id_entry = tk.Entry(data_frame, width=6)
id_entry.grid(row=7, column=0, padx=5, pady=5)
def input_id_entry():
# Dapatkan teks dari entry
input_id = id_entry.get()
# Bersihkan entry setelah input
id_entry.delete(0, tk.END)
# Menampilkan pesan konfirmasi
messagebox.showinfo("Info", "ID berhasil diinput dan dibersihkan")
# Membuat tombol input_id
input_id_button = tk.Button(data_frame, text="Clear ID", bg="red", fg="white", command=input_id_entry)
input_id_button.place(x=460, y=345)
separator = tk.Frame(data_frame, height=12, bg="grey")
separator.grid(row=5, column=0, padx=5, pady=5)
# Fungsi untuk tombol CRUD
create_button = tk.Button(data_frame, text="Create", bg="green", fg="white",command=lambda: create_gn_cyan_atas_record(entry_rows[0]))
create_button.grid(row=7, column=2, padx=5, pady=5)
read_button = tk.Button(data_frame, text="Read", bg="green", fg="white", command=lambda: read_gn_cyan_atas_record(entry_rows[0]))
read_button.grid(row=7, column=3, padx=5, pady=5)
update_button = tk.Button(data_frame, text="Update", bg="green", fg="white", command=lambda: update_gn_cyan_atas_record(entry_rows[0]))
update_button.grid(row=7, column=4, padx=5, pady=5)
delete_button = tk.Button(data_frame, text="Delete", bg="green", fg="white", command=lambda: delete_gn_cyan_atas_record(entry_rows[0]))
delete_button.grid(row=7, column=5, padx=5, pady=5)
clear_button = tk.Button(data_frame, text="Clear", bg="green", fg="white", command=lambda: clear_entries_gn_cyan_atas(entry_rows[0]))
clear_button.grid(row=7, column=6, padx=5, pady=5)
# Frame untuk menampilkan record Gn_Cyan_Atas
record_frame = tk.Frame(data_frame)
record_frame.grid(row=8, column=0, columnspan=len(labels), padx=10, pady=10)
# Menampilkan seluruh record dari Sub_Gn_Cyan_Atas saat program dijalankan
create_database()
display_records()
root.mainloop()
Perubahan yang dilakukan:Menambahkan parameter columnspan=len(labels) pada record_frame untuk memastikan bahwa frame ini mencakup semua kolom.Menyelesaikan bagian update_button dan delete_button.
Masing-masing Id: id 1, id 2, dan id 3 seharusnya terpisah tersendiri. Id 1 untuk mengoperasikan semua entry di baris 1, id 2 untuk semua entry di baris 2, dan id 3 untuk semua entry di baris 3. Masing-masing Id terpisah tersendiri, dan tombol hanya ada sebanyak 1 set saja
Baik, untuk mengoperasikan masing-masing ID secara terpisah sesuai dengan barisnya, kita bisa membuat tombol CRUD khusus untuk setiap baris. Berikut adalah kodenya yang telah disesuaikan: Berikut adalah kode yang telah diperbarui dengan masing-masing ID terpisah dan satu set tombol CRUD yang akan beroperasi sesuai ID yang dipilih dari baris yang sesuai.
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")
main_frame = tk.Frame(root)
main_frame.pack(fill=tk.BOTH, expand=1)
canvas = tk.Canvas(main_frame)
canvas.pack(side=tk.LEFT, fill=tk.BOTH, expand=1)
scrollbar_y = ttk.Scrollbar(main_frame, orient=tk.VERTICAL, command=canvas.yview)
scrollbar_y.pack(side=tk.RIGHT, fill=tk.Y)
canvas.configure(yscrollcommand=scrollbar_y.set)
canvas.bind('<Configure>', lambda e: canvas.configure(scrollregion=canvas.bbox("all")))
content_frame = tk.Frame(canvas)
canvas.create_window((0, 0), window=content_frame, anchor="nw")
data_frame = tk.Frame(content_frame)
data_frame.grid(row=0, column=0, padx=10, pady=10)
# Create database and tables if they don't exist
def create_database():
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()
# Fungsi untuk menampilkan pesan peringatan
def show_warning(message):
messagebox.showwarning("Peringatan", message)
# Fungsi untuk membersihkan entry
def clear_entries(entries):
for entry in entries:
entry.delete(0, tk.END)
def create_gn_cyan_atas_record(row):
if row[1].get() == "": # Jika Level_R diubah
show_warning("Cell ini tidak boleh data diinput")
return
data = tuple(entry.get() for entry in row)
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("INSERT INTO Gn_Cyan_Atas (ID, Level_R, Bass_1, Bass_2, Bass_3, Bass_4, Bass_5, Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
data)
conn.commit()
conn.close()
clear_entries_gn_cyan_atas(row)
display_records()
def read_gn_cyan_atas_record(row):
id_value = row[0].get()
if id_value == "":
show_warning("Silakan masukkan ID untuk membaca record.")
return
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("SELECT * FROM Gn_Cyan_Atas WHERE ID=?", (id_value,))
record = c.fetchone()
conn.close()
if record:
for i, entry in enumerate(row):
entry.delete(0, tk.END)
entry.insert(0, record[i])
def update_gn_cyan_atas_record(row):
if row[1].get() == "": # Jika Level_R diubah
show_warning("Cell ini tidak boleh data diinput")
return
data = tuple(entry.get() for entry in row[1:]) + (row[0].get(),)
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("UPDATE Gn_Cyan_Atas SET Level_R = ?, Bass_1 = ?, Bass_2 = ?, Bass_3 = ?, Bass_4 = ?, Bass_5 = ?, Trebel_1 = ?, Trebel_2 = ?, Trebel_3 = ?, Trebel_4 = ?, Trebel_5 = ? WHERE ID = ?",
data)
conn.commit()
conn.close()
clear_entries_gn_cyan_atas(row)
display_records()
def delete_gn_cyan_atas_record(row):
id_value = row[0].get()
if id_value == "":
show_warning("Silakan masukkan ID untuk menghapus record.")
return
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("DELETE FROM Gn_Cyan_Atas WHERE ID=?", (id_value,))
conn.commit()
conn.close()
clear_entries_gn_cyan_atas(row)
display_records()
def clear_entries_gn_cyan_atas(row=None):
if row:
for entry in row:
entry.delete(0, tk.END)
else:
for row in entry_rows:
for entry in row:
entry.delete(0, tk.END)
setup_default_mode()
def setup_default_mode():
levels = ["Satu", "Dua", "Tiga"]
for row_index, row in enumerate(entry_rows):
row[1].delete(0, tk.END)
row[1].insert(0, levels[row_index])
row[1].config(state='readonly')
if row_index == 0: # ID 1
row[5].config(state='disabled') # Bass_4
elif row_index == 1: # ID 2
row[3].config(state='disabled') # Bass_2
elif row_index == 2: # ID 3
row[6].config(state='disabled') # Bass_5
def display_records():
for widget in record_frame.winfo_children():
widget.destroy()
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("SELECT * FROM Gn_Cyan_Atas")
records = c.fetchall()
conn.close()
for i, record in enumerate(records):
for j, value in enumerate(record):
tk.Label(record_frame, text=value).grid(row=i, column=j, padx=5, pady=5)
# Entry untuk Gn_Cyan_Atas
tk.Label(data_frame, fg="tomato", text="CRUD Data \nGn_Cyan_Atas").grid(row=0, column=0, padx=5, pady=5)
# Entry untuk Gn_Cyan_Atas
labels = ["ID", "Level_R", "Bass_1", 'Bass_2', 'Bass_3', 'Bass_4', 'Bass_5', 'Trebel_1', 'Trebel_2', 'Trebel_3', 'Trebel_4', 'Trebel_5']
for col_index, label in enumerate(labels):
tk.Label(data_frame, text=label).grid(row=2, column=col_index, padx=5, pady=5)
entry_rows = []
for i in range(3): # Create three rows of entries
row = []
for j in range(len(labels)):
if j == 0: # ID column
entry = tk.Entry(data_frame, width=4)
elif j == 1: # Level column
entry = tk.Entry(data_frame, width=6, bg="white", justify="center")
levels = ["Satu", "Dua", "Tiga"]
entry.insert(0, levels[i])
entry.config(state='readonly')
else:
entry = tk.Entry(data_frame, width=20)
entry.grid(row=i+3, column=j, padx=5, pady=5)
row.append(entry)
entry_rows.append(row)
# Membuat tombol CRUD
id_entry = tk.Entry(data_frame, width=4)
id_entry.grid(row=6, column=0, padx=5, pady=5)
create_button = tk.Button(data_frame, text="Create", bg="green", fg="white", command=lambda: create_gn_cyan_atas_record(entry_rows[int(id_entry.get()) - 1]))
create_button.grid(row=6, column=2, padx=5, pady=5)
read_button = tk.Button(data_frame, text="Read", bg="blue", fg="white", command=lambda: read_gn_cyan_atas_record(entry_rows[int(id_entry.get()) - 1]))
read_button.grid(row=6, column=3, padx=5, pady=5)
update_button = tk.Button(data_frame, text="Update", bg="orange", fg="white", command=lambda: update_gn_cyan_atas_record(entry_rows[int(id_entry.get()) - 1]))
update_button.grid(row=6, column=4, padx=5, pady=5)
delete_button = tk.Button(data_frame, text="Delete", bg="red", fg="white", command=lambda: delete_gn_cyan_atas_record(entry_rows[int(id_entry.get()) - 1]))
delete_button.grid(row=6, column=5, padx=5, pady=5)
clear_button = tk.Button(data_frame, text="Clear", bg="grey", fg="white", command=lambda: clear_entries_gn_cyan_atas(entry_rows[int(id_entry.get()) - 1]))
clear_button.grid(row=6, column=6, padx=5, pady=5)
# Entry untuk Gn_Cyan_Atas
tk.Label(data_frame, fg="tomato", text="CRUD Data \nGn_Cyan_Atas").grid(row=0, column=0, padx=5, pady=5)
# Entry untuk Gn_Cyan_Atas
labels = ["ID", "Level_R", "Bass_1", 'Bass_2', 'Bass_3', 'Bass_4', 'Bass_5', 'Trebel_1', 'Trebel_2', 'Trebel_3', 'Trebel_4', 'Trebel_5']
for col_index, label in enumerate(labels):
tk.Label(data_frame, text=label).grid(row=2, column=col_index, padx=5, pady=5)
entry_rows = []
for i in range(3): # Create three rows of entries
row = []
for j in range(len(labels)):
if j == 0: # ID column
entry = tk.Entry(data_frame, width=4)
elif j == 1: # Level column
entry = tk.Entry(data_frame, width=6, bg="white", justify="center")
levels = ["Satu", "Dua", "Tiga"]
entry.insert(0, levels[i])
entry.config(state='readonly')
else:
entry = tk.Entry(data_frame, width=20)
entry.grid(row=i+3, column=j, padx=5, pady=5)
row.append(entry)
entry_rows.append(row)
# EntryBox untuk ID
id_label = tk.Label(data_frame, text="ID for Operation")
id_label.grid(row=6, column=0, padx=5, pady=5)
id_entry = tk.Entry(data_frame, width=6)
id_entry.grid(row=7, column=0, padx=5, pady=5)
def input_id_entry():
# Dapatkan teks dari entry
input_id = id_entry.get()
# Bersihkan entry setelah input
id_entry.delete(0, tk.END)
# Menampilkan pesan konfirmasi
messagebox.showinfo("Info", "ID berhasil diinput dan dibersihkan")
# Membuat tombol input_id
input_id_button = tk.Button(data_frame, text="Clear ID", bg="red", fg="white", command=input_id_entry)
input_id_button.place(x=460, y=345)
separator = tk.Frame(data_frame, height=12, bg="grey")
separator.grid(row=5, column=0, padx=5, pady=5)
# Membuat tombol CRUD
create_button = tk.Button(data_frame, text="Create", bg="cyan", fg="black", command=lambda: create_gn_cyan_atas_record(entry_rows[int(id_entry.get()) - 1]))
create_button.grid(row=6, column=2, padx=5, pady=5)
read_button = tk.Button(data_frame, text="Read", bg="cyan", fg="black", command=lambda: read_gn_cyan_atas_record(entry_rows[int(id_entry.get()) - 1]))
read_button.grid(row=6, column=3, padx=5, pady=5)
update_button = tk.Button(data_frame, text="Update", bg="cyan", fg="black", command=lambda: update_gn_cyan_atas_record(entry_rows[int(id_entry.get()) - 1]))
update_button.grid(row=6, column=4, padx=5, pady=5)
delete_button = tk.Button(data_frame, text="Delete", bg="cyan", fg="black", command=lambda: delete_gn_cyan_atas_record(entry_rows[int(id_entry.get()) - 1]))
delete_button.grid(row=6, column=5, padx=5, pady=5)
clear_button = tk.Button(data_frame, text="Clear", bg="lightcyan", fg="black", command=lambda: clear_entries_gn_cyan_atas(entry_rows[int(id_entry.get()) - 1]))
clear_button.grid(row=6, column=6, padx=5, pady=5)
# Frame untuk menampilkan record Gn_Cyan_Atas
record_frame = tk.Frame(data_frame)
record_frame.grid(row=8, column=0, padx=10, pady=10)
separator = tk.Frame(data_frame, height=40, bg="grey")
separator.grid(row=9, column=0, padx=5, pady=5)
# Entry untuk Sub_Gn_Cyan_Atas
tk.Label(data_frame, fg="tomato", text="\n Sub_Gn_Cyan_Atas").grid(row=10, column=0, padx=5, pady=5)
# Entry untuk Sub_Gn_Cyan_Atas
sub_labels = ["Sub_ID", "Level_D", "Bass_1", 'Bass_2', 'Bass_3', 'Bass_4', 'Bass_5', 'Trebel_1', 'Trebel_2', 'Trebel_3', 'Trebel_4', 'Trebel_5']
for col_index, sub_label in enumerate(sub_labels):
tk.Label(data_frame, text=sub_label).grid(row=12, column=col_index, padx=5, pady=5)
sub_entry_rows = []
for i in range(1): # Create one rows of entries for Sub_Gn_Cyan_Atas
sub_row = []
for j in range(len(sub_labels)):
if j == 0: # Sub_ID column
sub_entry = tk.Entry(data_frame, width=4)
elif j == 1: # Level_D column
sub_entry = tk.Entry(data_frame, width=6, bg="white", justify="center")
levels = ["Satu"]
sub_entry.insert(0, levels[i])
sub_entry.config(state='readonly')
else:
sub_entry = tk.Entry(data_frame, width=20)
sub_entry.grid(row=i+13, column=j, padx=5, pady=5)
sub_row.append(sub_entry)
sub_entry_rows.append(sub_row)
# Fungsi CRUD untuk Sub_Gn_Cyan_Atas
def create_sub_gn_cyan_atas_record(row):
if row[1].get() == "": # Jika Level_D diubah
show_warning("Cell ini tidak boleh data diinput")
return
data = tuple(entry.get() for entry in row)
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("INSERT INTO Sub_Gn_Cyan_Atas (Sub_ID, Level_D, Bass_1, Bass_2, Bass_3, Bass_4, Bass_5, Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)",
data)
conn.commit()
conn.close()
clear_entries_sub_gn_cyan_atas(row)
display_sub_records()
def read_sub_gn_cyan_atas_record(row):
id_value = row[0].get()
if id_value == "":
show_warning("Silakan masukkan Sub_ID untuk membaca record.")
return
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("SELECT * FROM Sub_Gn_Cyan_Atas WHERE Sub_ID=?", (id_value,))
record = c.fetchone()
conn.close()
if record:
for i, entry in enumerate(row):
entry.delete(0, tk.END)
entry.insert(0, record[i])
def update_sub_gn_cyan_atas_record(row):
if row[1].get() == "": # Jika Level_D diubah
show_warning("Cell ini tidak boleh data diinput")
return
data = tuple(entry.get() for entry in row[1:]) + (row[0].get(),)
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("UPDATE Sub_Gn_Cyan_Atas SET Level_D = ?, Bass_1 = ?, Bass_2 = ?, Bass_3 = ?, Bass_4 = ?, Bass_5 = ?, Trebel_1 = ?, Trebel_2 = ?, Trebel_3 = ?, Trebel_4 = ?, Trebel_5 = ? WHERE Sub_ID = ?",
data)
conn.commit()
conn.close()
clear_entries_sub_gn_cyan_atas(row)
display_sub_records()
def delete_sub_gn_cyan_atas_record(row):
id_value = row[0].get()
if id_value == "":
show_warning("Silakan masukkan Sub_ID untuk menghapus record.")
return
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("DELETE FROM Sub_Gn_Cyan_Atas WHERE Sub_ID=?", (id_value,))
conn.commit()
conn.close()
clear_entries_sub_gn_cyan_atas(row)
display_sub_records()
def clear_entries_sub_gn_cyan_atas(row=None):
if row:
for entry in row:
entry.delete(0, tk.END)
else:
for row in sub_entry_rows:
for entry in row:
entry.delete(0, tk.END)
setup_sub_default_mode()
def setup_sub_default_mode():
levels = ["Satu"]
for row_index, row in enumerate(sub_entry_rows):
row[1].delete(0, tk.END)
row[1].insert(0, levels[row_index])
row[1].config(state='readonly')
if row_index == 0: # Sub_ID 1
row[6].config(state='disabled') # Bass_1
def display_sub_records():
for widget in sub_record_frame.winfo_children():
widget.destroy()
conn = sqlite3.connect('DATAMUSIK.db')
c = conn.cursor()
c.execute("SELECT * FROM Sub_Gn_Cyan_Atas")
records = c.fetchall()
conn.close()
for i, record in enumerate(records):
for j, value in enumerate(record):
tk.Label(sub_record_frame, text=value).grid(row=i, column=j, padx=5, pady=5)
separator = tk.Frame(data_frame, height=20, bg="grey")
separator.grid(row=13, column=0, padx=5, pady=5)
# Tombol CRUD untuk Sub_Gn_Cyan_Atas
sub_create_button = tk.Button(data_frame, text="Create", bg="green", fg="white", command=lambda: create_sub_gn_cyan_atas_record(sub_entry_rows[0]))
sub_create_button.grid(row=14, column=2, padx=5, pady=5)
sub_read_button = tk.Button(data_frame, text="Read", bg="green", fg="white",command=lambda: read_sub_gn_cyan_atas_record(sub_entry_rows[0]))
sub_read_button.grid(row=14, column=3, padx=5, pady=5)
sub_update_button = tk.Button(data_frame, text="Update", bg="green", fg="white", command=lambda: update_sub_gn_cyan_atas_record(sub_entry_rows[0]))
sub_update_button.grid(row=14, column=4, padx=5, pady=5)
sub_delete_button = tk.Button(data_frame, text="Delete", bg="green", fg="white",command=lambda: delete_sub_gn_cyan_atas_record(sub_entry_rows[0]))
sub_delete_button.grid(row=14, column=5, padx=5, pady=5)
sub_clear_button = tk.Button(data_frame, text="Clear", bg="lightgreen", fg="black", command=lambda: clear_entries_sub_gn_cyan_atas(sub_entry_rows[0]))
sub_clear_button.grid(row=14, column=6, padx=5, pady=5)
# Frame untuk menampilkan record Sub_Gn_Cyan_Atas
sub_record_frame = tk.Frame(data_frame)
sub_record_frame.grid(row=16, column=0, padx=10, pady=10)
separator = tk.Frame(data_frame, height=30, bg="grey")
separator.grid(row=17, column=0, padx=5, pady=5)
def open_crud_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.shower
ror("Error", f"Failed to execute file: {e}")
# Pilih Buttons
pilih_button = tk.Button(content_frame, text="Pilih Nada", command=open_crud_gn_cyan_atas_file, bg="green", fg="white")
pilih_button.grid(row=18, column=0, sticky="w", padx=395, pady=5)
# Menampilkan seluruh record dari Sub_Gn_Cyan_Atas saat program dijalankan
create_database()
display_records()
display_sub_records()
root.mainloop()
Penjelasan tambahan:display_records() akan menampilkan semua record yang ada di dalam tabel Gn_Cyan_Atas pada frame record_frame.Penggunaan entry_rows[int(id_entry.get()) - 1] memungkinkan tombol CRUD untuk mengoperasikan entri yang sesuai dengan ID yang dimasukkan di id_entry.Fungsi setup_default_mode() memastikan bahwa entri di kolom Level_R tidak dapat diubah oleh pengguna, dan kolom tertentu akan dinonaktifkan sesuai dengan ID masing-masing baris.Jika ada hal lain yang perlu diperbaiki atau ditambahkan, silakan beri tahu saya.
Komentar
Posting Komentar
This Message