Langsung ke konten utama

MEMBUAT TABEL DAN CRUD DATA Gn_Cyan_Atas

 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

Postingan populer dari blog ini

Pemograman R Studio

  Metode Numerik Menggunakan R Pengantar Gambaran Isi Buku Cara Berkontribusi dalam Buku Ini Ucapan Terima Kasih Lisensi 1  Bahasa Pemrograman R 1.1  Sejarah R 1.2  Fitur dan Karakteristik R 1.3  Kelebihan dan Kekurangan R 1.4  RStudio 1.5  Menginstall R dan RStudio 1.6  Working Directory 1.6.1  Mengubah Lokasi Working Directory 1.6.2  Mengubah Lokasi Working Directory Default 1.7  Memasang dan Mengaktifkan Paket R 1.8  Fasilitas Help 1.8.1  Mencari Help dari Suatu Perintah Tertentu 1.8.2  General Help 1.8.3  Fasilitas Help Lainnya 1.9  Referensi 2  Kalkulasi Menggunakan R 2.1  Operator Aritmatik 2.2  Fungsi Aritmetik 2.3  Operator Relasi 2.4  Operator Logika 2.5  Memasukkan Nilai Kedalam Variabel 2.6  Tipe dan Struktur Data 2.7  Vektor 2.7.1  Membuat vektor 2.7.2  Missing Values 2.7.3  Subset Pada Vektor 2.7.4  Operasi Matematis Menggunakan Vektor ...

MIGRASI DATABASE DARI SQLite KE MySQL (Part-1)

  MIGRASI DATABASE DARI SQLite KE MySQL (Part-1) Pemakaian yang mana lebih baik dalam membuat database_musik di mysql atau Exel yang cell Cell pada tabel dilakukan operasi fungsi logika matematika. Untuk keperluan membuat database atau tabel yang memerlukan operasi logika atau matematika, seperti yang Anda sebutkan, MySQL jauh lebih baik dibandingkan Excel. Berikut adalah beberapa alasan mengapa MySQL lebih disarankan: 1. **Kapasitas dan Skalabilitas**: MySQL dapat menangani jumlah data yang jauh lebih besar daripada Excel. Ini penting jika Anda berencana untuk menyimpan banyak data atau melakukan operasi yang kompleks di atas data tersebut. 2. **Kekuatan dan Kinerja**: MySQL dirancang khusus untuk memproses query dan operasi basis data dengan cepat. Ini termasuk operasi matematika, logika, dan agregasi data yang umum dilakukan dalam aplikasi. 3. **Fleksibilitas Struktur**: Dalam MySQL, Anda dapat dengan mudah menentukan struktur tabel yang kompleks dan melakukan kueri yang lebih r...

Cara Menjadi Pengembang Front End – Keterampilan Front End Web Dev

  Menyumbangkan Belajar coding —  kurikulum 3.000 jam gratis 10 JUNI 2022 / #PENGEMBANGAN UJUNG DEPAN Bagaimana Menjadi Pengembang Front End – Keterampilan Front End Web Dev Joel Olawanle Beberapa profesional dengan bayaran tertinggi di dunia adalah pengembang front-end.  Mereka menggunakan pengetahuan dan bakat mereka untuk merancang situs web yang menarik dan ramah pengguna. Pengembang front-end tidak memerlukan gelar atau sertifikat sekolah untuk bekerja.  Sebaliknya, mereka harus memahami dasar-dasar pengembangan front-end, bahasa pemrograman, dan kerangka kerja pengembangan front-end. Dalam panduan ini, Anda akan belajar bagaimana menjadi pengembang front end dengan terlebih dahulu memahami apa yang dimaksud dengan pengembangan front end, keterampilan teknis dan soft skill yang diperlukan, bahasa dan kerangka kerja yang tersedia, dan beberapa langkah untuk memulai. Seorang pengembang front-end di Amerika Serikat dapat memperoleh rata-rata $86,178 per tahun, menu...