Langsung ke konten utama

Level_gn YANG BENAR UNTUK Gn_Cyan_Bawah DAN Sub_Gn_Cyan_Bawah

Level_gn YANG BENAR UNTUK Gn_Cyan_Bawah DAN Sub_Gn_Cyan_Bawah


Memperbaiki fungsi level_gn untuk Gn_Cyan_Bawah, berikut logikanya: level_gn 1 = id 1, level_gn 2 = id 2, level_gn 3 = id 3, level'gn 4 = id 4, level_gn 5 = id 1 yang setiap karakter angka datanya dikurang 1, level_gn 6 = id 2 yang setiap karakter angka datanya dikurang 1, level_gn 7 = id 3 yang setiap karakter angka datanya dikurang 1, level_gn 8 = id 4 yang setiap karakter angka datanya dikurang 1, , level_gn 9 = id 1 yang setiap karakter angka datanya dikurang 2, level_gn 10 = id 2 yang setiap karakter angka datanya dikurang 2, level_gn 11 = id 3 yang setiap karakter angka datanya dikurang 2, level_gn 12 = id 4 yang setiap karakter angka datanya dikurang 2.

Dan untuk Sub_Gn_Cyan_Bawah, berikut logikanya: level_gn 1 = sub_id 1, level_gn 2 = sub_id 1 yang setiap karakter angka datanya dikurang 1, level_gn 3 = sub_id 1 yang setiap karakter angka datanya dikurang 2, level_gn 4 = sub_id 1 yang setiap karakter angka datanya dikurang 3, level_gn 5 = sub_id 1 yang setiap karakter angka datanya dikurang 4, level_gn 6 = sub_id 1 yang setiap karakter angka datanya dikurang 5, level_gn 7 = sub_id 1 yang setiap karakter angka datanya dikurang 6, level_gn 8 = sub_id 1 yang setiap karakter angka datanya dikurang 7, level_gn 9 = sub_id 1 yang setiap karakter angka datanya dikurang 8, level_gn 10 = sub_id 1 yang setiap karakter angka datanya dikurang 9,, level_gn 11 = sub_id 1 yang setiap karakter angka datanya dikurang 10, dan level_gn 12 = sub_id 1 yang setiap karakter angka datanya dikurang 11, Tolong buatkan kodenya pada fungsi level_gn.


Berikut adalah kode fungsi `level_gn` yang sudah dimodifikasi sesuai dengan logika yang Anda berikan untuk tabel `Gn_Cyan_Bawah` dan `Sub_Gn_Cyan_Bawah`:


```python

def level_gn(table_name):

    try:

        level_gn_selected = int(entry_level_gn.get()) # Mendapatkan Level_Gn dari input

        

        # Variabel awal untuk ID, Sub_ID, kolom, dan modifikasi angka

        id_selected = None

        sub_id_selected = None

        modifikasi_angka = 0 # Default 0, tidak ada pengurangan


        if table_name == 'Gn_Cyan_Bawah':

            # Logika untuk tabel Gn_Cyan_Bawah

            if level_gn_selected in [1, 5, 9]:

                id_selected = 1

                modifikasi_angka = (level_gn_selected - 1) // 4 # 0, 1, atau 2

            elif level_gn_selected in [2, 6, 10]:

                id_selected = 2

                modifikasi_angka = (level_gn_selected - 2) // 4 # 0, 1, atau 2

            elif level_gn_selected in [3, 7, 11]:

                id_selected = 3

                modifikasi_angka = (level_gn_selected - 3) // 4 # 0, 1, atau 2

            elif level_gn_selected in [4, 8, 12]:

                id_selected = 4

                modifikasi_angka = (level_gn_selected - 4) // 4 # 0, 1, atau 2

            else:

                messagebox.showerror("Error", "Level_Gn harus antara 1 hingga 12.")

                return None, None, None


        elif table_name == 'Sub_Gn_Cyan_Bawah':

            # Logika untuk tabel Sub_Gn_Cyan_Bawah

            sub_id_selected = 1

            modifikasi_angka = level_gn_selected - 1 # Modifikasi angka dari 0 hingga 11 berdasarkan level_gn


        else:

            messagebox.showerror("Error", "Nama tabel tidak valid!")

            return None, None, None


        # Menyisipkan ID atau Sub_ID dan kolom yang dipilih ke dalam entry box

        entry_id.delete(0, 'end')

        if table_name == 'Gn_Cyan_Bawah':

            entry_id.insert(0, str(id_selected))

        elif table_name == 'Sub_Gn_Cyan_Bawah':

            entry_id.insert(0, str(sub_id_selected))


        # Hanya untuk pengisian Entry jika menggunakan tkinter, tidak untuk pengembalian nilai logika

        entry_modifikasi_angka.delete(0, 'end')

        entry_modifikasi_angka.insert(0, str(modifikasi_angka))


        if table_name == 'Gn_Cyan_Bawah':

            return id_selected, modifikasi_angka

        elif table_name == 'Sub_Gn_Cyan_Bawah':

            return sub_id_selected, modifikasi_angka


    except ValueError:

        messagebox.showerror("Error", "Masukkan nilai Level_Gn yang valid!")

        return None, None, None

```


### Penjelasan:


1. **Parameter `table_name`:**

   - Fungsi ini menerima parameter `table_name` untuk menentukan apakah fungsi bekerja dengan `Gn_Cyan_Bawah` atau `Sub_Gn_Cyan_Bawah`.


2. **Logika untuk `Gn_Cyan_Bawah`:**

   - Jika `Level_Gn` adalah 1, 5, atau 9, maka ID yang dipilih adalah 1 dengan modifikasi angka sesuai dengan level yang diatur (`0` untuk level 1, `1` untuk level 5, dan `2` untuk level 9).

   - Logika serupa diterapkan untuk `Level_Gn` lainnya (2, 6, 10 untuk ID 2; 3, 7, 11 untuk ID 3; dan 4, 8, 12 untuk ID 4).


3. **Logika untuk `Sub_Gn_Cyan_Bawah`:**

   - Untuk tabel ini, `Sub_ID` selalu 1, dan modifikasi angka adalah `Level_Gn - 1`, yang berarti pengurangan angka dilakukan bertahap dari 0 hingga 11.


4. **Pengembalian Nilai:**

   - Fungsi mengembalikan `id_selected` atau `sub_id_selected` bersama dengan `modifikasi_angka`.


Fungsi ini telah disesuaikan untuk menangani kedua tabel dengan logika yang berbeda namun terintegrasi dalam satu fungsi. Apakah ini sudah sesuai dengan kebutuhan Anda?


Tolong gabung kode berikut:

import tkinter as tk

from tkinter import ttk

from tkinter import messagebox

import sqlite3


# Initialize the main window

root = tk.Tk()

root.geometry("690x1390")

root.title("Arah Arus Musik")


# Fungsi untuk mengambil data dari Gn_Cyan_Bawah berdasarkan ID

def get_data_gn_cyan_bawah_from_db(id_selected):

    conn = sqlite3.connect("DATAMUSIK.db")

    cursor = conn.cursor()

    cursor.execute("SELECT * FROM Gn_Cyan_Bawah WHERE ID = ?", (id_selected,))

    data = cursor.fetchone()

    conn.close()

    return data


# Fungsi untuk mengambil data dari Sub_Gn_Cyan_Bawah berdasarkan Sub_ID

def get_data_sub_gn_cyan_bawah_from_db(sub_id_selected):

    conn = sqlite3.connect("DATAMUSIK.db")

    cursor = conn.cursor()

    cursor.execute("SELECT * FROM Sub_Gn_Cyan_Bawah WHERE Sub_ID = ?", (sub_id_selected,))

    data = cursor.fetchone()

    conn.close()

    return data


# Fungsi untuk menyesuaikan nilai Bass berdasarkan progres

def adjust_bass_value(bass_value, progres):

    if bass_value.isdigit():

        adjusted_value = ''.join(str(int(char)) if char.isdigit() else char for char in bass_value)

    else:

        adjusted_value = bass_value

    return adjusted_value   


# Fungsi untuk menyesuaikan nilai trebel_biasa berdasarkan progres

def adjust_trebel_biasa_value(trebel_biasa_value, progres):

    if trebel_biasa_value.isdigit():

        adjusted_value = ''.join(str(int(char) - progres) if char.isdigit() else char for char in trebel_biasa_value)

    else:

        adjusted_value = trebel_biasa_value

    return adjusted_value

          

# Fungsi untuk menghapus separuh karakter dari belakang

def remove_half_characters(value):

    length = len(value)

    half_length = length // 2

    return value[:half_length]


# Fungsi untuk menyesuaikan nilai Trebel_Aneh berdasarkan progres

def adjust_trebel_aneh_value(trebel_aneh_value, progres):

    if trebel_aneh_value.isdigit():

        adjusted_value = ''.join(str(int(char) - progres) if char.isdigit() else char for char in trebel_aneh_value)

    else:

        adjusted_value = trebel_aneh_value

    return adjusted_value

    

 # Fungsi untuk menyesuaikan nilai Trebel_Aneh berdasarkan progres

def adjust_sub_trebel_aneh_value(sub_trebel_aneh_value, progres):

    if sub_trebel_aneh_value.isdigit():

        adjusted_value = ''.join(str(int(char) - progres) if char.isdigit() else char for char in sub_trebel_aneh_value)

    else:

        adjusted_value = sub_trebel_aneh_value

    return adjusted_value   


# Fungsi untuk memilih nada Bass dan Trebel berdasarkan ID, progres, mode, level_gn, dan Nada

def pilih_nada():

    try:

        # Ambil nilai dari entry_id dan variabel progres serta mode

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()

        nada_selected = nada_var.get().lower()        

                

        # Ambil data dari Gn_Cyan_Bawah dan Sub_Gn_Cyan_Bawah

        data_gn_cyan_bawah = get_data_gn_cyan_bawah_from_db(id_selected)

        data_sub_gn_cyan_bawah = get_data_sub_gn_cyan_bawah_from_db(1) # Sub_ID untuk Sub_Gn_Cyan_Bawah selalu 1

        

        if not data_gn_cyan_bawah or not data_sub_gn_cyan_bawah:

            messagebox.showerror("Error", "Data tidak ditemukan. \nInput ID harus 1, 2, 3, atau 4")

            return

        

        # Kosongkan entry sebelumnya

        entry_bass.delete(0, tk.END)

        entry_sub_bass.delete(0, tk.END)


        # Tampilkan nilai Bass yang telah disesuaikan berdasarkan progres

        if level_gn_selected in range(1, 13) and nada_selected == "bass":

            if progres_selected == 1:

               # Tampilkan nilai bass dari Gn_Cyan_Bawah

                entry_bass.insert(0, data_gn_cyan_bawah[2]) # bass ID 1        

                entry_sub_bass.insert(0, data_sub_gn_cyan_bawah[2]) # bass Sub_ID 1

 

            else:

                # Tampilkan nilai yang telah disesuaikan berdasarkan progres

                adjusted_bass = adjust_bass_value(data_gn_cyan_bawah[2], progres_selected - 0)

                entry_bass.insert(0, adjusted_bass)

                entry_sub_bass.insert(0, adjust_bass_value(data_sub_gn_cyan_bawah[2], progres_selected - 0))                                                                                                  

            messagebox.showinfo("Success", "Data berhasil diambil dan disesuaikan")

          

        else:

            messagebox.showerror("Error", "Masukkan input level_gn yang benar. \nLevel_Gn harus dalam rentang 1-12. \nInput Nada harus Bass")

        

    except ValueError:

        messagebox.showerror("Error", "ID, Level_Gn, dan Progres harus berupa angka")           


    finally:

        entry_level_gn.delete(0, 'end')

        entry_id.delete(0, 'end')

        progres_combobox.set('')

        mode_combobox.set('')

        nada_combobox.set('')


def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()

        nada_selected = nada_var.get().lower()

        

        # Cek apakah level_gn_selected adalah 1, 2, 3, 5, 6, 7, 9, 10, atau 11

        if level_gn_selected not in [1, 2, 3, 5, 6, 7, 9, 10, 11]:

            messagebox.showerror("Error", "Masukkan input yang benar. \nInput level_gn harus 1, 2, 3, \n5, 6, 7, 9, 10, atau 11")

            return        

        

        # Cek apakah ID yang dimasukkan adalah 4, yang tidak valid

        if id_selected == 4:

            messagebox.showerror("Error", "Masukkan input yang benar. \nInput ID harus 1, 2, atau 3")

            return


        # Ambil data dari Gn_Cyan_Bawah

        data_gn_cyan_bawah = get_data_gn_cyan_bawah_from_db(id_selected)


        if not data_gn_cyan_bawah:

            messagebox.showerror("Error", "Data tidak ditemukan. \nInput ID harus 1, 2, atau 3")

            return

        

        entry_trebel_biasa.delete(0, tk.END)        

        # Jika level_gn adalah 1, 2, 3, 5, 6, 7, 9, 10, , atau 11, tampilkan nilai trebel_biasa

        if level_gn_selected in [1, 2, 3, 5, 6, 7, 9, 10, 11]:

            if progres_selected == 1:

               # Tampilkan nilai trebel_biasa dari Gn_Cyan_Bawah

                entry_trebel_biasa.insert(0, data_gn_cyan_bawah[3]) # trebel_biasa ID 1                

            else:

                # Tampilkan nilai yang telah disesuaikan berdasarkan pogres

                adjusted_trebel_biasa = adjust_trebel_biasa_value(data_gn_cyan_bawah[3], progres_selected - 1)

                entry_trebel_biasa.insert(0, adjusted_trebel_biasa)

                

        else:

            # Jika level_gn bukan 1, 2, 3, 5, 6, 7, 9, 10, atau 11, kosongkan entry

            entry_trebel_biasa.delete(0, tk.END)            

        messagebox.showinfo("Success", "Data berhasil diambil dan disesuaikan")

    except ValueError:

        messagebox.showerror("Error", "ID, Level_Gn, dan Progres harus berupa angka")

        

    finally:      

    # Bersihkan atau reset entry dan combobox setelah data dipilih         

        entry_level_gn.delete(0, 'end')

        entry_id.delete(0, 'end')

        progres_combobox.set('') # Kosongkan combobox

        mode_combobox.set('') # Kosongkan combobox

        nada_combobox.set('') # Kosongkan combobox     


def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()

        nada_selected = nada_var.get().lower()

        

        # Cek apakah level_gn_selected adalah 4, 8, atau 12

        if level_gn_selected not in [4, 8, 12]:

            messagebox.showerror("Error", "Masukkan input yang benar. \nInput level_gn harus 4, 8, atau 12")

            return        


        # Ambil data dari Gn_Cyan_Bawah dan Sub_Gn_Cyan_Bawah

        data_gn_cyan_bawah = get_data_gn_cyan_bawah_from_db(id_selected)

        data_sub_gn_cyan_bawah = get_data_sub_gn_cyan_bawah_from_db(1) # Sub_ID untuk Sub_Gn_Cyan_Bawah selalu 1


        if not data_gn_cyan_bawah or not data_sub_gn_cyan_bawah:

            messagebox.showerror("Error", "Data tidak ditemukan. \nInput ID harus 1, 2, 3, atau 4")

            return

        

        entry_trebel_aneh.delete(0, tk.END)

        entry_sub_trebel_aneh.delete(0, tk.END)



        # Jika level_gn adalah 4, 8, atau 12, tampilkan nilai Trebel_Aneh

        if level_gn_selected in [4, 8, 12]:

            if progres_selected == 1:

               # Tampilkan nilai Trebel_Aneh dari Gn_Cyan_Bawah

                entry_trebel_aneh.insert(0, data_gn_cyan_bawah[4]) # Trebel_Aneh ID 1

                entry_sub_trebel_aneh.insert(0, data_sub_gn_cyan_bawah[4]) # Trebel_Aneh Sub_ID 1


            else:

                # Tampilkan nilai yang telah disesuaikan berdasarkan progres

                adjusted_trebel_aneh = adjust_trebel_aneh_value(data_gn_cyan_bawah[4], progres_selected - 1)

                entry_trebel_aneh.insert(0, adjusted_trebel_aneh)

                entry_sub_trebel_aneh.insert(0, adjust_trebel_aneh_value(data_sub_gn_cyan_bawah[4], progres_selected - 1))

        else:

            # Jika level_gn bukan 4, 8, atau 12, kosongkan entry

            entry_trebel_aneh.delete(0, tk.END)

            entry_sub_trebel_aneh.delete(0, tk.END)


        messagebox.showinfo("Success", "Data berhasil diambil dan disesuaikan")

    except ValueError:

        messagebox.showerror("Error", "ID, Level_Gn, dan Progres harus berupa angka")

        

    finally:

        entry_level_gn.delete(0, 'end')

        entry_id.delete(0, 'end')

        progres_combobox.set('')

        mode_combobox.set('')

        nada_combobox.set('')


# Fungsi untuk memastikan urutan Level_Gn dan ID

def level_gn(table_name):

    try:

        level_gn_selected = int(entry_level_gn.get()) # Mendapatkan Level_Gn dari input

        

        # Variabel awal untuk ID, Sub_ID, kolom, dan modifikasi angka

        id_selected = None

        sub_id_selected = None

        modifikasi_angka = 0 # Default 0, tidak ada pengurangan


        if table_name == 'Gn_Cyan_Bawah':

            # Logika untuk tabel Gn_Cyan_Bawah

            if level_gn_selected in [1, 5, 9]:

                id_selected = 1

                modifikasi_angka = (level_gn_selected - 1) // 4 # 0, 1, atau 2

            elif level_gn_selected in [2, 6, 10]:

                id_selected = 2

                modifikasi_angka = (level_gn_selected - 2) // 4 # 0, 1, atau 2

            elif level_gn_selected in [3, 7, 11]:

                id_selected = 3

                modifikasi_angka = (level_gn_selected - 3) // 4 # 0, 1, atau 2

            elif level_gn_selected in [4, 8, 12]:

                id_selected = 4

                modifikasi_angka = (level_gn_selected - 4) // 4 # 0, 1, atau 2

            else:

                messagebox.showerror("Error", "Level_Gn harus antara 1 hingga 12.")

                return None, None, None


        elif table_name == 'Sub_Gn_Cyan_Bawah':

            # Logika untuk tabel Sub_Gn_Cyan_Bawah

            sub_id_selected = 1

            modifikasi_angka = level_gn_selected - 1 # Modifikasi angka dari 0 hingga 11 berdasarkan level_gn


        else:

            messagebox.showerror("Error", "Nama tabel tidak valid!")

            return None, None, None


        # Menyisipkan ID atau Sub_ID dan kolom yang dipilih ke dalam entry box

        entry_id.delete(0, 'end')

        if table_name == 'Gn_Cyan_Bawah':

            entry_id.insert(0, str(id_selected))

        elif table_name == 'Sub_Gn_Cyan_Bawah':

            entry_id.insert(0, str(sub_id_selected))


        # Hanya untuk pengisian Entry jika menggunakan tkinter, tidak untuk pengembalian nilai logika

        entry_modifikasi_angka.delete(0, 'end')

        entry_modifikasi_angka.insert(0, str(modifikasi_angka))


        if table_name == 'Gn_Cyan_Bawah':

            return id_selected, modifikasi_angka

        elif table_name == 'Sub_Gn_Cyan_Bawah':

            return sub_id_selected, modifikasi_angka


    except ValueError:

        messagebox.showerror("Error", "Masukkan nilai Level_Gn yang valid!")

        return None, None, None          


frame_top = tk.Frame(root)

frame_top.pack()


label_level_gn = tk.Label(frame_top, text="Level_Gn:")

label_level_gn.grid(row=1, column=0, padx=5, pady=5)

entry_level_gn = tk.Entry(frame_top)

entry_level_gn.grid(row=1, column=1, padx=5, pady=5)


label_id = tk.Label(frame_top, text="ID:")

label_id.grid(row=2, column=0, padx=5, pady=5)

entry_id = tk.Entry(frame_top)

entry_id.grid(row=2, column=1, padx=5, pady=5)


label_progres = tk.Label(frame_top, text="Progres:")

label_progres.grid(row=3, column=0, padx=5, pady=5)

progres_var = tk.StringVar()

progres_combobox = ttk.Combobox(frame_top, textvariable=progres_var)

progres_combobox['values'] = (1, 2, 3)

progres_combobox.grid(row=3, column=1, padx=5, pady=5)


label_mode = tk.Label(frame_top, text="Mode:")

label_mode.grid(row=4, column=0, padx=5, pady=5)

mode_var = tk.StringVar()

mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var)

mode_combobox['values'] = ("Naik", "Turun")

mode_combobox.grid(row=4, column=1, padx=5, pady=5)


label_nada = tk.Label(frame_top, text="Nada:")

label_nada.grid(row=5, column=0, padx=5, pady=5)

nada_var = tk.StringVar()

nada_combobox = ttk.Combobox(frame_top, textvariable=nada_var)

nada_combobox['values'] = ("Bass", "Trebel")

nada_combobox.grid(row=5, column=1, padx=5, pady=5)


separator = ttk.Separator(frame_top, orient='horizontal')

separator.grid(row=6, column=0, sticky="ew", pady=15)


# Bottom Frame

bottom_frame = tk.Frame(root, bg="#e2e2e2")

bottom_frame.pack(side=tk.TOP, fill=tk.X)


label_bass = tk.Label(bottom_frame, text="Bass Gn Cyan Bawah:")

label_bass.grid(row=0, column=0, padx=5, pady=5)

entry_bass = tk.Entry(bottom_frame)

entry_bass.grid(row=1, column=0, padx=5, pady=5)


label_sub_bass = tk.Label(bottom_frame, text="Sub Bass Gn Cyan Bawah:")

label_sub_bass.grid(row=0, column=1, padx=5, pady=5)

entry_sub_bass = tk.Entry(bottom_frame)

entry_sub_bass.grid(row=1, column=1, padx=5, pady=5)

# Label dan Entry Ambil Gugusan nada Trebel_Biasa Teroilih

label_trebel_biasa = tk.Label(bottom_frame, text="Trebel Aneh \n Gn Cyan Bawah")

label_trebel_biasa.grid(row=9, column=3, padx=5, pady=5)

entry_trebel_biasa = tk.Entry(bottom_frame)

entry_trebel_biasa.grid(row=10, column=3, padx=5, pady=5)

# Label dan Entry Ambil Gugusan nada Trebel_Biasa Teroilih

label_trebel_aneh = tk.Label(bottom_frame, text="Trebel Aneh \n Gn Cyan Bawah")

label_trebel_aneh.grid(row=9, column=3, padx=5, pady=5)

entry_trebel_aneh = tk.Entry(bottom_frame)

entry_trebel_aneh.grid(row=10, column=3, padx=5, pady=5)


label_sub_trebel_aneh = tk.Label(bottom_frame, text="Sub Trebel Aneh \n Gn Cyan Bawah:")

label_sub_trebel_aneh.grid(row=9, column=4, padx=5, pady=5)

entry_sub_trebel_aneh = tk.Entry(bottom_frame)

entry_sub_trebel_aneh.grid(row=10, column=4, padx=5, pady=5)


# Tombol untuk memilih nada

pilih_nada_btn = tk.Button(bottom_frame, text="Pilih Nada", bg="lightgreen", fg="black", command=pilih_nada)

pilih_nada_btn.grid(row=11, column=2, padx=10, pady=10, columnspan=2)


root.mainloop()


Pastikan setiap elemen tidak ada yang ganda atau duplikat, sehingga applikasi dapat berjalan dengan baik dan tanpa error


Tolong perbaiki kode untuk nada Bass, seharusnya nada Bass yang tampil adalah tetap sebab nada Bass tidak mengalami perubahan pada setiap progres


Kode diperbaiki menjadi berikut ini:

import tkinter as tk

from tkinter import ttk

from tkinter import messagebox

import sqlite3


# Initialize the main window

root = tk.Tk()

root.geometry("690x1390")

root.title("Arah Arus Musik")


# Fungsi untuk mengambil data dari Gn_Cyan_Bawah berdasarkan ID

def get_data_gn_cyan_bawah_from_db(id_selected):

    conn = sqlite3.connect("DATAMUSIK.db")

    cursor = conn.cursor()

    cursor.execute("SELECT * FROM Gn_Cyan_Bawah WHERE ID = ?", (id_selected,))

    data = cursor.fetchone()

    conn.close()

    return data


# Fungsi untuk mengambil data dari Sub_Gn_Cyan_Bawah berdasarkan Sub_ID

def get_data_sub_gn_cyan_bawah_from_db(sub_id_selected):

    conn = sqlite3.connect("DATAMUSIK.db")

    cursor = conn.cursor()

    cursor.execute("SELECT * FROM Sub_Gn_Cyan_Bawah WHERE Sub_ID = ?", (sub_id_selected,))

    data = cursor.fetchone()

    conn.close()

    return data

    

# Fungsi untuk menyesuaikan nilai Bass berdasarkan progres

def adjust_bass_value(bass_value, progres, mode):

    if bass_value.isdigit():

        adjusted_value = ''.join(str(int(char)) if char.isdigit() else char for char in bass_value)

    else:

        adjusted_value = bass_value

    return adjusted_value       


# Fungsi untuk menyesuaikan nilai Trebel berdasarkan progres

def adjust_value(value, progres, mode):

    if value.isdigit():


            return ''.join(str(int(char) - progres) if char.isdigit() else char for char in value)

    return value

   

# Fungsi untuk memilih nada Bass dan Trebel berdasarkan ID, progres, mode, level_gn, dan Nada

def pilih_nada():

    try:

        level_gn_selected = int(entry_level_gn.get())

        id_selected = int(entry_id.get())

        progres_selected = int(progres_var.get())

        mode_selected = mode_var.get().lower()

        nada_selected = nada_var.get().lower()


        # Ambil data dari Gn_Cyan_Bawah dan Sub_Gn_Cyan_Bawah

        data_gn_cyan_bawah = get_data_gn_cyan_bawah_from_db(id_selected)

        data_sub_gn_cyan_bawah = get_data_sub_gn_cyan_bawah_from_db(1) # Sub_ID untuk Sub_Gn_Cyan_Bawah selalu 1


        if not data_gn_cyan_bawah or not data_sub_gn_cyan_bawah:

            messagebox.showerror("Error", "Data tidak ditemukan. \nInput ID harus 1, 2, 3, atau 4")

            return


        # Kosongkan entry sebelumnya

        entry_bass.delete(0, tk.END)

        entry_trebel_biasa.delete(0, tk.END)

        entry_trebel_aneh.delete(0, tk.END)

        entry_sub_bass.delete(0, tk.END)

        entry_sub_trebel_aneh.delete(0, tk.END)


        if level_gn_selected in range(1, 13):

            if nada_selected == "bass":

                # Tampilkan nilai Bass yang telah disesuaikan berdasarkan progres

                 if progres_selected == 1:

               # Tampilkan nilai bass dari Gn_Cyan_Bawah

                    entry_bass.insert(0, data_gn_cyan_bawah[2]) # bass ID 1        

                    entry_sub_bass.insert(0, data_sub_gn_cyan_bawah[2]) # bass Sub_ID 1 

                 else:

                # Tampilkan nilai yang telah disesuaikan berdasarkan progres

                    adjusted_bass = adjust_bass_value(data_gn_cyan_bawah[2], progres_selected - 0, mode_selected)

                    entry_bass.insert(0, adjusted_bass)

                    entry_sub_bass.insert(0, adjust_bass_value(data_sub_gn_cyan_bawah[2], progres_selected - 0), mode_selected)   

                                               

            elif nada_selected == "trebel_biasa" and level_gn_selected in [1, 2, 3, 5, 6, 7, 9, 10, 11]:

                # Tampilkan nilai Trebel_Biasa yang telah disesuaikan berdasarkan progres

                adjusted_trebel_biasa = adjust_value(data_gn_cyan_bawah[3], progres_selected - 1, mode_selected)

                entry_trebel_biasa.insert(0, adjusted_trebel_biasa)


            elif nada_selected == "trebel_aneh" and level_gn_selected in [4, 8, 12]:

                # Tampilkan nilai Trebel_Aneh yang telah disesuaikan berdasarkan progres

                adjusted_trebel_aneh = adjust_value(data_gn_cyan_bawah[4], progres_selected - 1, mode_selected)

                entry_trebel_aneh.insert(0, adjusted_trebel_aneh)

                entry_sub_trebel_aneh.insert(0, adjust_value(data_sub_gn_cyan_bawah[4], progres_selected - 1, mode_selected))


            else:

                messagebox.showerror("Error", "Masukkan input yang benar untuk Nada atau Level_Gn.")


            messagebox.showinfo("Success", "Data berhasil diambil dan disesuaikan")


        else:

            messagebox.showerror("Error", "Level_Gn harus dalam rentang 1-12.")


    except ValueError:

        messagebox.showerror("Error", "ID, Level_Gn, dan Progres harus berupa angka")


    finally:

        # Bersihkan atau reset entry dan combobox setelah data dipilih

        entry_level_gn.delete(0, 'end')

        entry_id.delete(0, 'end')

        progres_combobox.set('')

        mode_combobox.set('')

        nada_combobox.set('')


# Definisikan elemen-elemen GUI lainnya seperti Entry, Combobox, dan Button di sini

# Misalnya:

entry_level_gn = tk.Entry(root)

entry_level_gn.grid(row=0, column=1)

entry_id = tk.Entry(root)

entry_id.grid(row=1, column=1)

# Combobox for Progres, Mode, and Nada

progres_var = tk.StringVar()

progres_combobox = ttk.Combobox(root, textvariable=progres_var)

progres_combobox['values'] = (1, 2, 3)

progres_combobox.grid(row=2, column=1)


mode_var = tk.StringVar()

mode_combobox = ttk.Combobox(root, textvariable=mode_var)

mode_combobox['values'] = ('Naik', 'Turun')

mode_combobox.grid(row=3, column=1)


nada_var = tk.StringVar()

nada_combobox = ttk.Combobox(root, textvariable=nada_var)

nada_combobox['values'] = ('bass', 'trebel_biasa', 'trebel_aneh')

nada_combobox.grid(row=4, column=1)


separator = ttk.Separator(root, orient='horizontal')

separator.grid(row=5, column=0, sticky="ew", pady=15)


entry_bass = tk.Entry(root)

entry_bass.grid(row=6, column=1)

entry_sub_bass = tk.Entry(root)

entry_sub_bass.grid(row=7, column=1)

entry_trebel_biasa = tk.Entry(root)

entry_trebel_biasa.grid(row=8, column=1)

entry_trebel_aneh = tk.Entry(root)

entry_trebel_aneh.grid(row=9, column=1)

entry_sub_trebel_aneh = tk.Entry(root)

entry_sub_trebel_aneh.grid(row=10, column=1)


separator = ttk.Separator(root, orient='horizontal')

separator.grid(row=11, column=0, sticky="ew", pady=15)


# Tombol untuk memilih

 nada

pilih_button = tk.Button(root, text="Pilih Nada", bg="lightgreen", command=pilih_nada)

pilih_button.grid(row=12, column=1)


root.mainloop()




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