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

PEMAKAIAN FONT FONT KHUSUS UNTUK SIMBOL SIMBOL NOTASI ANGKA LAGU

  PEMAKAIAN FONT FONT KHUSUS UNTUK SIMBOL SIMBOL NOTASI ANGKA LAGU Bagaimana kalau di dalam applikasi pertitur notasi angka dibuatkan sistem teks dengan memakai font parnumstion untuk membuat simbol simbol pada notasi angka lagu Menggunakan font khusus seperti **Parnumstion** untuk membuat simbol-simbol pada notasi angka dalam aplikasi pertitur dapat menjadi solusi yang elegan untuk menampilkan simbol notasi secara visual menarik dan konsisten. Berikut adalah langkah-langkah umum yang dapat kamu lakukan untuk mengimplementasikan sistem teks dengan font ini dalam aplikasi Python, khususnya jika kamu menggunakan tkinter: ### Langkah-langkah Implementasi: 1. **Pastikan Font Tersedia:**    - Unduh dan instal font **Parnumstion** pada sistem yang akan menjalankan aplikasi. Font ini harus diinstal agar bisa digunakan oleh aplikasi tkinter.    - Kamu dapat menempatkan file font (biasanya dengan ekstensi `.ttf`) di folder aplikasi atau menginstalnya secara manual di sis...

Cara Membuat Config HTTP Custom

  Lompat ke konten Lompat ke sidebar Lompat ke footer KANGARIF.NET × Beranda   /  android   /  internet gratis Cara Membuat Config HTTP Custom Oleh bustami    12/13/2020    15 komentar Di artikel kali ini saya akan membagikan tutorial bagaimana  cara membuat config HTTP Custom . Daftar isi 1  Apa itu HTTP Custom ? 2  Apa itu Config HTTP Custom ? 3  Cara Membuat Config HTTP Custom 3.1  Membuat Config HTTP Custom dengan Metode SSL/SNI 4  Penutup Apa itu HTTP Custom ? HTTP Custom  adalah sebuah aplikasi Android yang saat ini banyak dipakai oleh para pecinta internet gratis (gretonger). Kepopuleran aplikasi ini bisa dibilang sebanding atau bahkan lebih bila dibandingkan dengan aplikasi sejenis yang lebih dulu populer, yaitu HTTP Injector. Saat ini HTTP Custom banyak dipakai untuk mengubah kuota internet tertentu dari operator seluler menjadi bisa digunakan untuk semua aplikasi. Seperti misalnya yang saat ini sed...

Error “ Unable To Locate Package ”

  CadeMedia Media Informasi Terbaru 2023 8 Cara Mengatasi “Tidak Dapat Menemukan Paket Termux” di HP Android TERAKHIR DIPERBARUI 16 SEPTEMBER 2023 Error “  Unable To Locate Package  ” adalah masalah yang sering dialami oleh pengguna Termux. Ini terjadi ketika Termux tidak dapat menemukan  paket  yang hendak diinstal. Salah satu contohnya ketika Anda mencoba menginstal  paket  seperti git. Termux adalah aplikasi terminal  emulator  dan  environment  berbasis Linux untuk perangkat Android. Sehingga pengguna dapat menjalankan perintah dan aplikasi Linux tanpa perlu akses  root  atau mengutak-atik sistem Android. Nah, arti dari  tidak dapat menemukan paket  adalah Termux tidak dapat menemukan lokasi atau keberadaan  paket  ingin Anda  install  . Pada artikel kali ini CadeMedia bahas tuntas, penyebab hingga cara mengatasi pesan  error  pada Termux yang sering muncul. Simak penjelasan di b...