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...

Penerapan Graf dan Logika dalam Perancangan Rangkaian Digital

  Penerapan Graf dan Logika dalam Perancangan Rangkaian Digital dengan Studi Kasus Jam Digital Advertisement dokumen-dokumen yang mirip Aljabar Boolean. IF2120 Matematika Diskrit. Oleh: Rinaldi Munir Program Studi Informatika, STEI-ITB. Rinaldi Munir - IF2120 Matematika Diskrit SISTEM DIGITAL; Analisis, Desain dan Implementasi, oleh Eko Didik Widianto Hak Cipta 2014 pada penulis GRAHA ILMU Ruko Jambusari 7A Yogyakarta 55283 PENGGUNAAN TABEL KEBENARAN DALAM MERANCANG DESAIN DIGITAL MODUL 6 PROYEK PERANCANGAN RANGKAIAN DIGITAL 2. STUDI PUSTAKA Aplikasi Aljabar Boolean dalam Komparator Digital Aljabar Boolean. Adri Priadana Aljabar Boolean. Rinaldi Munir/IF2151 Mat. Diskrit 1 Aljabar Boolean. Bahan Kuliah Matematika Diskrit Implementasi Greedy Dalam Menemukan Rangkaian Logika Minimal Menggunakan Karnaugh Map MATERI PELATIHAN VHDL UNTUK SINTESIS yang paling umum adalah dengan menspesifikasikan unsur unsur pembentuknya (Definisi 2.1 Menurut Lipschutz, Seymour & Marc Lars Lipson dala...