Langsung ke konten utama

ALTERNATIF LAIN UNTUK MENGGANTIKAN CARA KONGRUENSI ANTAR DUA DATA

ALTERNATIF LAIN UNTUK MENGGANTIKAN CARA KONGRUENSI ANTAR DUA DATA


 Mari kita coba alternatif lain untuk mengambil data Trebel terpilih dari tabel Gn_Cyan_Atas dan dari tabel Sub_Gn_Cyan_Atas yang masing_masing memiliki kolom: Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5. Lalu menampilkan data tersebut di entry_trebel dan entry_sub_trebel.

 Untuk data dari tabel Gn_Cyan_Atas, ketentuan di setiap data kolom Trebel, berlaku:

1. jika level_gn_selected adalah [1, 4, 6, 11]: untuk id_selected  = 1:

1a. Jika progres 1 dan mode Naik, maka jika data kolom Trebel_1 id 1 terpilih akan menjadi data kolom Trebel_1 id 1 (data kolom Trebel_1 id 1 di progres 1 adalah tetap).

1b. Jika progres 2 dan mode Naik, maka jika data kolom Trebel_1 id 1 terpilih akan menjadi data kolom Trebel_1 id 2 kemudian setiap digit (karakter angkanya)  dikurang 2.

1c. Jika progres 3 dan mode Naik, maka jika data kolom Trebel_1 id 1 terpilih akan menjadi data kolom Trebel_1 id 3 kemudian setiap digit (karakter angkanya) dikurang 4.


2. Jika level_gn_selected adalah [1, 4, 6, 11] untuk id_selected = 1:

2a. Jika progres 1 dan mode Turun, maka jika data kolom Trebel_1 id 1 terpilih akan menjadi data kolom Trebel_1 id 1 (data terpilih Trebel_1 id 1 di progres 1 adalah tetap).

2b. Jika progres 2 dan mode Turun, maka jika data kolom Trebel_1 id 1 terpilih akan menjadi data kolom Trebel_1 id 3 kemudian setiap digit (karakter angkanya) dikurang 3.

2c. Jika progres 3 dan mode Turun, maka jika data kolom Trebel_1 id 1 menjadi data kolom Trebel_1 id 2 kemudian setiap digit (karakter angkanya) dikurang 3.


3. Jika level_gn_selected adalah [2, 7, 9, 12]: untuk id_selected = 2:  

3a. jika progres 1 dan mode Naik, maka jika data kolom Trebel_1 id 2 terpilih akan menjadi data kolom Trebel_1 id 2 (data terpilih Trebel_1 id 2 di progres 1 adalah tetap).

3b. Jika progres 2 dan mode Naik, maka jika data kolom Trebel_1 id 2 terpilih akan menjadi data kolom Trebel_1 id 3 kemudian setiap digit (karakter angka) dikurang 2.

3c. Jika progres 3 dan mode Naik, maka jika data kolom Trebel_1 id 2 terpilih akan menjadi data kolom Trebel_1 id 1 kemudian setiap digit (karakter angka) dikurang 1.


4. Jika level_gn_selected adalah [2, 7, 9, 12]: untuk id_selected = 2:    

4a. jika progres 1 dan mode Turun, maka jika data kolom Trebel_1 id 2 terpilih akan menjadi data kolom Trebel_1 id 2 (data terpilih Trebel_1 id 2 di progres 1 adalah tetap).

4b. Jika progres 2 dan mode Turun, maka jika data kolom Trebel_1 id 2 terpilih akan menjadi data kolom Trebel_1 id 1 kemudian setiap digit (karakter angkanya dikurang 0).

4c. Jika progres 3 dan mode Turun, maka jika data kolom Trebel_1 id 2 terpilih akan menjadi data kolom Trebel_1 id 3 kemudian setiap digit (karakter angkanya dikurang 3).


5. . Jika level_gn_selected adalah [3, 5, 8, 10]: untuk id_selected = 3:      

5a. Jika progres 1 dan mode Naik, maka jika data kolom Trebel_1 id 3 terpilih akan menjadi data kolom Trebel_1 id 3 (data terpilih Trebel_1 id 3 di progres 1 adalah tetap).

5b. Jika progres 2 dan mode Naik, maka jika data kolom Trebel_1 id 3 terpilih akan menjadi data kolom Trebel_1 id 1, kemudian setiap digit (karakter angka) ditambah 1.

5c. Jika progres 3 dan mode Naik, maka jika data kolom Trebel_1 id 3 terpilih akan menjadi data kolom Trebel_1 id 2, kemudian setiap digit (karakter angka) dikurang 1.


6. Jika level_gn_selected adalah [3, 5, 8, 10]: untuk id_selected = 3:        

6a. Jika progres 1 dan mode Turun, maka jika data kolom Trebel_1 id 3 terpilih akan menjadi data kolom Trebel_1 id 3 (data terpilih Trebel_1 id 3 di progres 1 adalah tetap).

6b. Jika progres 2 dan mode Turun, maka jika data kolom Trebel_1 id 3 terpilih akan menjadi data kolom Trebel_1 id 2, kemudian setiap karakter angkanya dikurang 0.

6c. ika progres 3 dan mode Turun, maka jika data kolom Trebel_1 id 3 terpilih akan menjadi data kolom Trebel_1 id 1, kemudian setiap digit (karakter angkanya) dikurang 0.

Hal yang sama di atas juga berlaku untuk data kolom Trebel_2, Trebel_3, Trebel_4, dan Trebel_5, di setiap id.


Untuk data dari tabel Sub_Gn_Cyan_Atas, ketentuan di setiap data kolom Trebel, berlaku:

1. jika level_gn_selected adalah [1, 4, 6, 11]: untuk sub_id_selected = 1:      

1a. Jika progres 1 dan mode Naik,, maka jika data kolom Trebel_1 sub_id 1 terpilih akan menjadi data kolom Trebel_1 sub_id 1 (data kolom Trebel_1 sub_id 1 di progres 1 adalah tetap).

1b. Jika progres 2 dan mode Naik, maka jika data kolom Trebel_1 sub_id 1 terpilih akan menjadi data kolom Trebel_1 sub_id 1 kemudian setiap digit (karakter angka) dikurang 1

1c. Jika progres 3 dan mode Naik, maka jika data kolom Trebel_1 sub_id 1 terpilih akan menjadi data kolom Trebel_1 sub_id 1 kemudian setiap digit (karakter angka) dikurang 2.

2. jika level_gn_selected adalah [1, 4, 6, 11]: untuk sub_id_selected = 1:      

2a. Jika progres 1 dan mode Turun, maka jika data kolom Trebel_1 sub_id 1 terpilih akan menjadi data kolom Trebel_1 sub_id 1 (data terpilih Trebel_1 sub_id 1 di progres 1 adalah tetap).

2b. Jika progres 2 dan mode Turun, maka jika data kolom Trebel_1 sub_id 1 terpilih akan menjadi data kolom Trebel_1 sub_id 1, kemudian setiap digit (karakter angka dikurang 1).

2c. Jika progres 3 dan mode Turun, maka jika data kolom Trebel_1 sub_id 1 terpilih akan menjadi data kolom Trebel_1 sub_id 1 kemudian setiap digit (karakter angka) dikurang 2.

Hal yang sama di atas juga berlaku untuk data kolom Trebel_2, Trebel_3, Trebel_4, dan Trebel_5, di setiap sub_id..

Dari uraian di atas, tolong buatkan fungsi pilih_nada, dan fungsi proses_trebel yang sesuai atau fungsi adjust_trebel_value


Baik, mari kita implementasikan dua fungsi: `pilih_nada` untuk memilih nilai Trebel yang sesuai dari tabel berdasarkan progres dan mode, dan `adjust_trebel_value` untuk menyesuaikan nilai berdasarkan ketentuan yang telah Anda berikan.

### Fungsi `pilih_nada`

Fungsi ini akan menentukan nilai Trebel yang akan digunakan berdasarkan ID, Progres, dan Mode.

### Fungsi `adjust_trebel_value`

Fungsi ini akan menyesuaikan nilai Trebel yang dipilih sesuai dengan progres dan mode, mengurangi atau menambah digit angka berdasarkan aturan yang diberikan.


```python

def adjust_trebel_value(trebel_value, adjustment):

    """Fungsi untuk menyesuaikan nilai Trebel dengan menambah atau mengurangi setiap digitnya."""

    adjusted_value = []

    for digit in trebel_value:

        if digit.isdigit(): # Pastikan hanya karakter angka yang diubah

            adjusted_digit = int(digit) + adjustment

            adjusted_value.append(str(adjusted_digit))

        else:

            adjusted_value.append(digit) # Tetap biarkan karakter non-angka

    return ''.join(adjusted_value)


def pilih_nada(trebel_id, progres, mode):

    """

    Fungsi untuk memilih nada Trebel berdasarkan ID, Progres, dan Mode.

    """

    if trebel_id == 1:

        if progres == 1:

            return "Trebel_1_ID1"

        elif progres == 2:

            if mode.lower() == "naik":

                return adjust_trebel_value("Trebel_1_ID2", -2)

            elif mode.lower() == "turun":

                return adjust_trebel_value("Trebel_1_ID3", -3)

        elif progres == 3:

            if mode.lower() == "naik":

                return adjust_trebel_value("Trebel_1_ID3", -4)

            elif mode.lower() == "turun":

                return adjust_trebel_value("Trebel_1_ID2", -3)

    

    elif trebel_id == 2:

        if progres == 1:

            return "Trebel_1_ID2"

        elif progres == 2:

            if mode.lower() == "naik":

                return adjust_trebel_value("Trebel_1_ID3", -2)

            elif mode.lower() == "turun":

                return adjust_trebel_value("Trebel_1_ID1", 0)

        elif progres == 3:

            if mode.lower() == "naik":

                return adjust_trebel_value("Trebel_1_ID1", -1)

            elif mode.lower() == "turun":

                return adjust_trebel_value("Trebel_1_ID3", -3)

    

    elif trebel_id == 3:

        if progres == 1:

            return "Trebel_1_ID3"

        elif progres == 2:

            if mode.lower() == "naik":

                return adjust_trebel_value("Trebel_1_ID1", 1)

            elif mode.lower() == "turun":

                return adjust_trebel_value("Trebel_1_ID2", 0)

        elif progres == 3:

            if mode.lower() == "naik":

                return adjust_trebel_value("Trebel_1_ID2", -1)

            elif mode.lower() == "turun":

                return adjust_trebel_value("Trebel_1_ID1", 0)

    

    # Tambahkan logika untuk kolom Trebel_2, Trebel_3, Trebel_4, Trebel_5 jika diperlukan.

    return None


def proses_trebel(trebel_id1, trebel_id2, trebel_id3, progres, mode):

    """

    Fungsi untuk memproses Trebel_ID berdasarkan progres dan mode.

    """

    hasil1 = pilih_nada(trebel_id1, progres, mode)

    hasil2 = pilih_nada(trebel_id2, progres, mode)

    hasil3 = pilih_nada(trebel_id3, progres, mode)

    

    # Simpan hasilnya di entry_trebel atau tampilkan sesuai kebutuhan

    return hasil1, hasil2, hasil3

```


### Penjelasan Kode

1. **adjust_trebel_value**: Fungsi ini menyesuaikan nilai digit dari setiap karakter pada string `trebel_value` dengan penyesuaian yang ditentukan (`adjustment`). Hanya karakter angka yang disesuaikan.

2. **pilih_nada**: Fungsi ini memilih nilai Trebel yang tepat berdasarkan `trebel_id`, `progres`, dan `mode`. Nilai yang diambil kemudian disesuaikan menggunakan fungsi `adjust_trebel_value` sesuai dengan aturan yang telah Anda tentukan.

3. **proses_trebel**: Fungsi ini mengatur proses pengambilan dan penyesuaian nilai Trebel untuk tiga ID yang berbeda. Hasil dari setiap pemrosesan disimpan di dalam variabel hasil1, hasil2, dan hasil3, yang kemudian dapat ditampilkan di `entry_trebel` atau digunakan sesuai dengan kebutuhan.

Anda dapat menambahkan lebih banyak logika ke dalam `pilih_nada` jika Anda juga ingin mengelola kolom lain seperti `Trebel_2`, `Trebel_3`, dll. Fungsi ini dirancang untuk memudahkan proses penyesuaian data berdasarkan kondisi yang telah Anda tentukan.


 Tolong perbaiki kode berikut karena muncul error':

Exception in Tkinter callback

Traceback (most recent call last):

  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/tkinter/__init__.py", line 1948, in __call__

    return self.func(*args)

           ^^^^^^^^^^^^^^^^

  File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 126, in pilih_nada

    trebel_value = proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel)

                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 102, in proses_trebel

    return adjust_trebel_value(trebel_value, -1 if mode_selected == 'turun' else 1)

           ^^^^^^^^^^^^^^^^^^^

NameError: name 'adjust_trebel_value' is not defined

Exception in Tkinter callback

Traceback (most recent call last):

  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/tkinter/__init__.py", line 1948, in __call__

    return self.func(*args)

           ^^^^^^^^^^^^^^^^

  File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 126, in pilih_nada

    trebel_value = proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel)

                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

  File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 102, in proses_trebel

    return adjust_trebel_value(trebel_value, -1 if mode_selected == 'turun' else 1)

           ^^^^^^^^^^^^^^^^^^^

NameError: name 'adjust_trebel_value' is not defined


Berikut kodenya:

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")


# Buat frame_top di dalam inner_frame

frame_top = tk.Frame(root)

frame_top.grid(row=0, column=0, pady=10)


# Definisikan entry untuk level_gn dan id, dan combobox di bawah 

label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")

label_level_gn_selected.grid(row=1, column=0, padx=0, pady=7)

entry_level_gn = tk.Entry(frame_top)

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


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

label_id_selected.grid(row=2, column=0, padx=0, pady=7)

entry_id = tk.Entry(frame_top)

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


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

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

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=0, pady=7)


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

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

mode_var = tk.StringVar()

mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])

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


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

label_nada.grid(row=5, column=0, padx=0, 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=0, pady=5)


def update_combobox_trebel(event):

    # Reset combobox_trebel

    combobox_trebel.grid_remove()

    combobox_trebel['values'] = []


    # Cek nilai yang dipilih pada combobox_nada

    nada_selected = nada_combobox.get()

    if nada_selected == "Trebel":

        # Jika Trebel dipilih, tambahkan opsi untuk combobox_trebel

        combobox_trebel['values'] = ["Trebel_1", "Trebel_2", "Trebel_3", "Trebel_4", "Trebel_5"]

        combobox_trebel.grid(row=6, column=1, padx=10, pady=10)

    else:

        combobox_trebel.grid_remove()


# Label untuk combobox Trebel

label_trebel = ttk.Label(frame_top, text="Pilih Trebel:")

label_trebel.grid(row=6, column=0, padx=10, pady=10)


# Combobox Trebel (Kosongkan awalnya)

combobox_trebel = ttk.Combobox(frame_top, state="readonly")

combobox_trebel.grid_remove()


# Tambahkan callback pada perubahan nilai di combobox_nada

nada_combobox.bind("<<ComboboxSelected>>", update_combobox_trebel)


def validate_level_gn():

    try:

        level_gn = int(entry_level_gn.get())


        if 1 <= level_gn <= 12:

            id_map = {1: 1, 2: 2, 3: 3, 4: 1, 5: 3, 6: 1, 7: 2, 8: 3, 9: 2, 10: 3, 11: 1, 12: 2}

            valid_id = id_map.get(level_gn)

            messagebox.showinfo("Info", f"Lanjut dengan memasukkan input ID = {valid_id}")

            set_id_entry(valid_id)

        else:

            raise ValueError("Input Level Gn adalah 1 hingga 12")

    except ValueError as e:

        messagebox.showerror("Error", str(e))

        reset_entries()


def set_id_entry(valid_id):

    entry_id.config(state='normal')

    entry_id.delete(0, tk.END)

    entry_id.insert(0, valid_id)

    entry_id.config(state='readonly')


def reset_entries():

    entry_level_gn.delete(0, tk.END)

    entry_id.config(state='normal')

    entry_id.delete(0, tk.END)


validate_button = tk.Button(frame_top, text="Validasi Level Gn", bg="yellow", command=validate_level_gn)

validate_button.grid(row=1, column=2, padx=0, pady=7)


def proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel):

    # Fungsi proses Trebel berdasarkan logika tertentu (logika perlu disesuaikan)

    trebel_value = data_gn_cyan_atas[index_trebel]

    return adjust_trebel_value(trebel_value, -1 if mode_selected == 'turun' else 1)


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()

        trebel_selected = combobox_trebel.get().lower() if nada_selected == "trebel" else None


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

        cursor = conn.cursor()


        cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))

        data_gn_cyan_atas = cursor.fetchone()


        cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (1,))

        data_sub_gn_cyan_atas = cursor.fetchone()


        conn.close()


        if data_gn_cyan_atas and trebel_selected:

            index_trebel = int(trebel_selected.split('_')[1]) - 1

            trebel_value = proses_trebel(level_gn_selected, progres_selected, mode_selected, data_gn_cyan_atas, index_trebel)

            sub_trebel_value = proses_trebel(level_gn_selected, progres_selected, mode_selected, data_sub_gn_cyan_atas, index_trebel)

            

            if trebel_value is not None and sub_trebel_value is not None:

                entry_trebel.delete(0, tk.END)

                entry_trebel.insert(0, ''.join(trebel_value))

                entry_sub_trebel.delete(0, tk.END)

                entry_sub_trebel.insert(0, ''.join(sub_trebel_value))            


                messagebox.showinfo("Info Trebel", f"Trebel Value: {trebel_value}\nSub Trebel Value: {sub_trebel_value}")

            else:

                messagebox.showerror("Error", "Nilai Trebel tidak ditemukan atau tidak valid.")

        else:

            messagebox.showerror("Error", "Nilai Trebel tidak ditemukan atau tidak valid.")

    except ValueError:

        messagebox.showerror("Error", "Input tidak valid.")

        

#label dan entry

label_trebel_gn_cyan_atas = tk.Label(frame_top, text="Trebel Gn_Cyan_Atas:")

label_trebel_gn_cyan_atas.grid(row=10, column=0, padx=0, pady=7)

entry_trebel = tk.Entry(frame_top)

entry_trebel.grid(row=10, column=1, padx=0, pady=7)


label_trebel_sub_gn_cyan_atas = tk.Label(frame_top, text="Sub Trebel Gn_Cyan_Atas:")

label_trebel_sub_gn_cyan_atas.grid(row=11, column=0, padx=0, pady=7)

entry_sub_trebel = tk.Entry(frame_top)

entry_sub_trebel.grid(row=11, column=1, padx=0, pady=7)


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

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


# Tombol untuk menjalankan fungsi pilih_nada

button_pilih_nada = tk.Button(frame_top, text="Pilih Nada", bg="lightgreen", command=pilih_nada)

button_pilih_nada.grid(row=8, column=1, padx=0, pady=7)


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

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

      

root.mainloop()



Error yang muncul dalam kode tersebut disebabkan oleh pemanggilan fungsi `adjust_trebel_value`, yang ternyata tidak didefinisikan dalam kode Anda. Untuk mengatasi masalah ini, Anda perlu mendefinisikan fungsi `adjust_trebel_value`. Berikut adalah contoh implementasi untuk fungsi tersebut, yang dapat disesuaikan lebih lanjut sesuai kebutuhan logika program Anda:

```python
def adjust_trebel_value(trebel_value, adjustment):
    """
    Fungsi ini akan menyesuaikan nilai Trebel dengan penyesuaian yang diberikan.
    Parameter:
    - trebel_value: String yang berisi nilai trebel dari database.
    - adjustment: Integer yang menunjukkan apakah nilai akan ditambah atau dikurangi.

    Output:
    - adjusted_trebel: String yang berisi nilai trebel yang telah disesuaikan.
    """
    adjusted_trebel = []
    
    # Lakukan penyesuaian untuk setiap karakter angka dalam trebel_value
    for char in trebel_value:
        if char.isdigit():
            adjusted_char = str(int(char) + adjustment)
            adjusted_trebel.append(adjusted_char)
        else:
            adjusted_trebel.append(char)

    return ''.join(adjusted_trebel)

# Tambahkan fungsi ini di bagian atas kode sebelum pemanggilan proses_trebel
```

Penjelasan:
1. **adjust_trebel_value**: Fungsi ini menerima dua parameter, yaitu `trebel_value` (string dari nilai trebel) dan `adjustment` (integer yang menentukan penyesuaian, apakah nilai ditambah atau dikurangi).
2. **Logika**: Setiap karakter dalam `trebel_value` diperiksa. Jika karakter tersebut adalah digit (angka), nilai digit akan disesuaikan sesuai `adjustment` (ditambah atau dikurangi). Jika bukan digit, karakter dibiarkan tetap.

Dengan menambahkan fungsi ini ke dalam kode Anda, error terkait `adjust_trebel_value` akan teratasi. Berikut adalah versi terbaru dari kode Anda setelah perbaikan:

```python
def adjust_trebel_value(trebel_value, adjustment):
    adjusted_trebel = []
    for char in trebel_value:
        if char.isdigit():
            adjusted_char = str(int(char) + adjustment)
            adjusted_trebel.append(adjusted_char)
        else:
            adjusted_trebel.append(char)
    return ''.join(adjusted_trebel)

# Kode yang lain tetap sama...
```

Letakkan fungsi `adjust_trebel_value` ini di bagian atas kode Anda, sebelum `proses_trebel` dipanggil. Setelah itu, jalankan kembali program Anda. Semoga ini membantu menyelesaikan error yang Anda alami!



Tolong perbaiki kode berikut karena muncul pesan error':
Exception in Tkinter callback
Traceback (most recent call last):
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/tkinter/__init__.py", line 1948, in __call__
    return self.func(*args)
           ^^^^^^^^^^^^^^^^
  File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 175, in <lambda>
    pilih_nada_button = tk.Button(frame_top, text="Pilih Nada", command=lambda: pilih_nada(int(entry_id.get()), int(progres_var.get()), mode_var.get().lower()))
                                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: pilih_nada() takes 0 positional arguments but 3 were given
Exception in Tkinter callback
Traceback (most recent call last):
  File "/data/user/0/ru.iiec.pydroid3/files/aarch64-linux-android/lib/python3.11/tkinter/__init__.py", line 1948, in __call__
    return self.func(*args)
           ^^^^^^^^^^^^^^^^
  File "/data/user/0/ru.iiec.pydroid3/files/temp_iiec_codefile.py", line 175, in <lambda>
    pilih_nada_button = tk.Button(frame_top, text="Pilih Nada", command=lambda: pilih_nada(int(entry_id.get()), int(progres_var.get()), mode_var.get().lower()))
                                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
TypeError: pilih_nada() takes 0 positional arguments but 3 were given


Berikut kodenya:
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")

# Buat frame_top di dalam inner_frame
frame_top = tk.Frame(root)
frame_top.grid(row=0, column=0, pady=10)

# Definisikan entry untuk level_gn dan id, dan combobox di bawah 
label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")
label_level_gn_selected.grid(row=1, column=0, padx=0, pady=7)
entry_level_gn = tk.Entry(frame_top)
entry_level_gn.grid(row=1, column=1, padx=0, pady=7)

label_id_selected = tk.Label(frame_top, text="ID:")
label_id_selected.grid(row=2, column=0, padx=0, pady=7)
entry_id = tk.Entry(frame_top)
entry_id.grid(row=2, column=1, padx=0, pady=7)

label_progres = tk.Label(frame_top, text="Progres:")
label_progres.grid(row=3, column=0, padx=0, pady=7)
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=0, pady=7)

label_mode = tk.Label(frame_top, text="Mode:")
label_mode.grid(row=4, column=0, padx=0, pady=7)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])
mode_combobox.grid(row=4, column=1, padx=0, pady=7)

label_nada = tk.Label(frame_top, text="Nada:")
label_nada.grid(row=5, column=0, padx=0, 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=0, pady=5)

def update_combobox_trebel(event):
    # Reset combobox_trebel
    combobox_trebel.grid_remove()
    combobox_trebel['values'] = []

    # Cek nilai yang dipilih pada combobox_nada
    nada_selected = nada_combobox.get()
    if nada_selected == "Trebel":
        # Jika Trebel dipilih, tambahkan opsi untuk combobox_trebel
        combobox_trebel['values'] = ["Trebel_1", "Trebel_2", "Trebel_3", "Trebel_4", "Trebel_5"]
        combobox_trebel.grid(row=6, column=1, padx=10, pady=10)
    else:
        combobox_trebel.grid_remove()

# Label untuk combobox Trebel
label_trebel = ttk.Label(frame_top, text="Pilih Trebel:")
label_trebel.grid(row=6, column=0, padx=10, pady=10)

# Combobox Trebel (Kosongkan awalnya)
combobox_trebel = ttk.Combobox(frame_top, state="readonly")
combobox_trebel.grid_remove()

# Tambahkan callback pada perubahan nilai di combobox_nada
nada_combobox.bind("<<ComboboxSelected>>", update_combobox_trebel)

def validate_level_gn():
    try:
        level_gn = int(entry_level_gn.get())

        if 1 <= level_gn <= 12:
            id_map = {1: 1, 2: 2, 3: 3, 4: 1, 5: 3, 6: 1, 7: 2, 8: 3, 9: 2, 10: 3, 11: 1, 12: 2}
            valid_id = id_map.get(level_gn)
            messagebox.showinfo("Info", f"Lanjut dengan memasukkan input ID = {valid_id}")
            set_id_entry(valid_id)
        else:
            raise ValueError("Input Level Gn adalah 1 hingga 12")
    except ValueError as e:
        messagebox.showerror("Error", str(e))
        reset_entries()

def set_id_entry(valid_id):
    entry_id.config(state='normal')
    entry_id.delete(0, tk.END)
    entry_id.insert(0, valid_id)
    entry_id.config(state='readonly')

def reset_entries():
    entry_level_gn.delete(0, tk.END)
    entry_id.config(state='normal')
    entry_id.delete(0, tk.END)

validate_button = tk.Button(frame_top, text="Validasi Level Gn", bg="yellow", command=validate_level_gn)
validate_button.grid(row=1, column=2, padx=0, pady=7)

def adjust_trebel_value(trebel_value, adjustment):
    """Fungsi untuk menyesuaikan nilai Trebel dengan menambah atau mengurangi setiap digitnya."""
    adjusted_value = []
    for digit in trebel_value:
        if digit.isdigit(): # Pastikan hanya karakter angka yang diubah
            adjusted_digit = int(digit) + adjustment
            adjusted_value.append(str(adjusted_digit))
        else:
            adjusted_value.append(digit) # Tetap biarkan karakter non-angka
    return ''.join(adjusted_value)

def pilih_nada():
    """Fungsi untuk memilih nada Trebel berdasarkan ID, Progres, dan Mode."""
    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()
        trebel_selected = combobox_trebel.get().lower() if nada_selected == "trebel" else None

        conn = sqlite3.connect('DATAMUSIK.db')
        cursor = conn.cursor()

        cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))
        data_gn_cyan_atas = cursor.fetchone()

        cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (1,))
        data_sub_gn_cyan_atas = cursor.fetchone()

        conn.close()

        # Proses data trebel 
        if trebel_selected and data_gn_cyan_atas:
            index_trebel = int(trebel_selected.split('_')[1]) - 1
            trebel_value = data_gn_cyan_atas[index_trebel]
            sub_trebel_value = data_sub_gn_cyan_atas[index_trebel]
            
            if progres_selected == 1:
                trebel_value_final = adjust_trebel_value(trebel_value, 0)
            elif progres_selected == 2:
                trebel_value_final = adjust_trebel_value(trebel_value, -2 if mode_selected == "naik" else -3)
            elif progres_selected == 3:
                trebel_value_final = adjust_trebel_value(trebel_value, -4 if mode_selected == "naik" else -3)
            else:
                trebel_value_final = None
            
            if trebel_value_final:
                entry_trebel.delete(0, tk.END)
                entry_trebel.insert(0, trebel_value_final)
                
                # Hanya menampilkan Trebel dari Sub_Gn_Cyan_Atas jika relevan
                sub_trebel_final = adjust_trebel_value(sub_trebel_value, -1) if sub_trebel_value else None
                entry_sub_trebel.delete(0, tk.END)
                entry_sub_trebel.insert(0, sub_trebel_final)

                messagebox.showinfo("Info Trebel", f"Trebel Value: {trebel_value_final}\nSub Trebel Value: {sub_trebel_final}")
            else:
                messagebox.showerror("Error", "Nilai Trebel tidak ditemukan atau tidak valid.")
        else:
            messagebox.showerror("Error", "Data tidak valid atau Trebel tidak dipilih.")
    except ValueError:
        messagebox.showerror("Error", "Input tidak valid.")

# Label dan entry untuk menampilkan hasil Trebel
label_trebel_gn_cyan_atas = tk.Label(frame_top, text="Trebel Gn_Cyan_Atas:")
label_trebel_gn_cyan_atas.grid(row=10, column=0, padx=0, pady=7)
entry_trebel = tk.Entry(frame_top)
entry_trebel.grid(row=10, column=1, padx=0, pady=7)

label_sub_trebel_gn_cyan_atas = tk.Label(frame_top, text="Sub Trebel Gn_Cyan_Atas:")
label_sub_trebel_gn_cyan_atas.grid(row=11, column=0, padx=0, pady=7)
entry_sub_trebel = tk.Entry(frame_top)
entry_sub_trebel.grid(row=11, column=1, padx=0, pady=7)

# Tombol untuk memilih nada dan menampilkan nilai Trebel
pilih_nada_button = tk.Button(frame_top, text="Pilih Nada", command=lambda: pilih_nada(int(entry_id.get()), int(progres_var.get()), mode_var.get().lower()))
pilih_nada_button.grid(row=12, column=0, columnspan=2, pady=10)

# Tombol untuk reset entries
reset_button = tk.Button(frame_top, text="Reset", command=reset_entries)
reset_button.grid(row=13, column=0, columnspan=2, pady=10)

# Menjalankan aplikasi

root.mainloop()


Kira kira kodenya seperti berikut:
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")

# Buat frame_top di dalam inner_frame
frame_top = tk.Frame(root)
frame_top.grid(row=0, column=0, pady=10)

# Definisikan entry untuk level_gn dan id, dan combobox di bawah 
label_level_gn_selected = tk.Label(frame_top, text="Level Gn:")
label_level_gn_selected.grid(row=1, column=0, padx=0, pady=7)
entry_level_gn = tk.Entry(frame_top)
entry_level_gn.grid(row=1, column=1, padx=0, pady=7)

label_id_selected = tk.Label(frame_top, text="ID:")
label_id_selected.grid(row=2, column=0, padx=0, pady=7)
entry_id = tk.Entry(frame_top)
entry_id.grid(row=2, column=1, padx=0, pady=7)

label_progres = tk.Label(frame_top, text="Progres:")
label_progres.grid(row=3, column=0, padx=0, pady=7)
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=0, pady=7)

label_mode = tk.Label(frame_top, text="Mode:")
label_mode.grid(row=4, column=0, padx=0, pady=7)
mode_var = tk.StringVar()
mode_combobox = ttk.Combobox(frame_top, textvariable=mode_var, values=["naik", "turun"])
mode_combobox.grid(row=4, column=1, padx=0, pady=7)

label_nada = tk.Label(frame_top, text="Nada:")
label_nada.grid(row=5, column=0, padx=0, 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=0, pady=5)

def update_combobox_trebel(event):
    # Reset combobox_trebel
    combobox_trebel.grid_remove()
    combobox_trebel['values'] = []

    # Cek nilai yang dipilih pada combobox_nada
    nada_selected = nada_combobox.get()
    if nada_selected == "Trebel":
        # Jika Trebel dipilih, tambahkan opsi untuk combobox_trebel
        combobox_trebel['values'] = ["Trebel_1", "Trebel_2", "Trebel_3", "Trebel_4", "Trebel_5"]
        combobox_trebel.grid(row=6, column=1, padx=10, pady=10)
    else:
        combobox_trebel.grid_remove()

# Label untuk combobox Trebel
label_trebel = ttk.Label(frame_top, text="Pilih Trebel:")
label_trebel.grid(row=6, column=0, padx=10, pady=10)

# Combobox Trebel (Kosongkan awalnya)
combobox_trebel = ttk.Combobox(frame_top, state="readonly")
combobox_trebel.grid_remove()

# Tambahkan callback pada perubahan nilai di combobox_nada
nada_combobox.bind("<<ComboboxSelected>>", update_combobox_trebel)

def validate_level_gn():
    try:
        level_gn = int(entry_level_gn.get())

        if 1 <= level_gn <= 12:
            id_map = {1: 1, 2: 2, 3: 3, 4: 1, 5: 3, 6: 1, 7: 2, 8: 3, 9: 2, 10: 3, 11: 1, 12: 2}
            valid_id = id_map.get(level_gn)
            messagebox.showinfo("Info", f"Lanjut dengan memasukkan input ID = {valid_id}")
            set_id_entry(valid_id)
        else:
            raise ValueError("Input Level Gn adalah 1 hingga 12")
    except ValueError as e:
        messagebox.showerror("Error", str(e))
        reset_entries()

def set_id_entry(valid_id):
    entry_id.config(state='normal')
    entry_id.delete(0, tk.END)
    entry_id.insert(0, valid_id)
    entry_id.config(state='readonly')

def reset_entries():
    entry_level_gn.delete(0, tk.END)
    entry_id.config(state='normal')
    entry_id.delete(0, tk.END)

validate_button = tk.Button(frame_top, text="Validasi Level Gn", bg="yellow", command=validate_level_gn)
validate_button.grid(row=1, column=2, padx=0, pady=7)

def adjust_trebel_value(trebel_value, adjustment):
    """Fungsi untuk menyesuaikan nilai Trebel dengan menambah atau mengurangi setiap digitnya."""
    adjusted_value = []
    for digit in trebel_value:
        if digit.isdigit(): # Pastikan hanya karakter angka yang diubah
            adjusted_digit = int(digit) + adjustment
            adjusted_value.append(str(adjusted_digit))
        else:
            adjusted_value.append(digit) # Tetap biarkan karakter non-angka
    return ''.join(adjusted_value)

def pilih_nada():
    """Fungsi untuk memilih nada Trebel berdasarkan ID, Progres, dan Mode."""
    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()
        trebel_selected = combobox_trebel.get().lower() if nada_selected == "trebel" else None    
    
        conn = sqlite3.connect('DATAMUSIK.db')
        cursor = conn.cursor()

        cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Gn_Cyan_Atas WHERE ID = ?", (id_selected,))
        data_gn_cyan_atas = cursor.fetchone()

        cursor.execute("SELECT Trebel_1, Trebel_2, Trebel_3, Trebel_4, Trebel_5 FROM Sub_Gn_Cyan_Atas WHERE Sub_ID = ?", (1,))
        data_sub_gn_cyan_atas = cursor.fetchone()

        conn.close()

        # Proses data trebel 
        if trebel_selected and data_gn_cyan_atas:
            index_trebel = int(trebel_selected.split('_')[1]) - 1
            trebel_value = data_gn_cyan_atas[index_trebel]
            sub_trebel_value = data_sub_gn_cyan_atas[index_trebel]
            
            if progres_selected == 1:
                trebel_value_final = adjust_trebel_value(trebel_value, 0)
            elif progres_selected == 2:
                trebel_value_final = adjust_trebel_value(trebel_value, -2 if mode_selected == "naik" else -3)
            elif progres_selected == 3:
                trebel_value_final = adjust_trebel_value(trebel_value, -4 if mode_selected == "naik" else -3)
            else:
                trebel_value_final = None
            
            if trebel_value_final:
                entry_trebel.delete(0, tk.END)
                entry_trebel.insert(0, trebel_value_final)
                
                # Hanya menampilkan Trebel dari Sub_Gn_Cyan_Atas jika relevan
                sub_trebel_final = adjust_trebel_value(sub_trebel_value, -1) if sub_trebel_value else None
                entry_sub_trebel.delete(0, tk.END)
                entry_sub_trebel.insert(0, sub_trebel_final)

                messagebox.showinfo("Info Trebel", f"Trebel Value: {trebel_value_final}\nSub Trebel Value: {sub_trebel_final}")
            else:
                messagebox.showerror("Error", "Nilai Trebel tidak ditemukan atau tidak valid.")
        else:
            messagebox.showerror("Error", "Data tidak valid atau Trebel tidak dipilih.")
    except ValueError:
        messagebox.showerror("Error", "Input tidak valid.")

# Label dan entry untuk menampilkan hasil Trebel
label_trebel_gn_cyan_atas = tk.Label(frame_top, text="Trebel Gn_Cyan_Atas:")
label_trebel_gn_cyan_atas.grid(row=10, column=0, padx=0, pady=7)
entry_trebel = tk.Entry(frame_top)
entry_trebel.grid(row=10, column=1, padx=0, pady=7)

label_sub_trebel_gn_cyan_atas = tk.Label(frame_top, text="Sub Trebel Gn_Cyan_Atas:")
label_sub_trebel_gn_cyan_atas.grid(row=11, column=0, padx=0, pady=7)
entry_sub_trebel = tk.Entry(frame_top)
entry_sub_trebel.grid(row=11, column=1, padx=0, pady=7)

# Tombol untuk memilih nada dan menampilkan nilai Trebel
pilih_nada_button = tk.Button(frame_top, text="Pilih Nada", command= pilih_nada)
pilih_nada_button.grid(row=12, column=0, columnspan=2, pady=10)

# Tombol untuk reset entries
reset_button = tk.Button(frame_top, text="Reset", command=reset_entries)
reset_button.grid(row=13, column=0, columnspan=2, pady=10)

# Menjalankan aplikasi
root.mainloop()

Namun pemilihan data Trebel terpilih berdasarkan progres dan mode adalah masih salah. Tolong perbaiki kode agar memenuhi kesesuaian logikaa yang diterapkan berikut ini:
Untuk data dari Gn_Cyan_Atas, ketentuan di setiap kolom Trebel, berlaku:

1. jika data Trebel terpilih dari id 1, maka 

1a. Jika progres 1 dan jika mode Naik atau Turun, maka data Trebel_1 id 1 menjadi data Trebel_1 id 1 (data Trebel terpilih di progres 1 adalah tetap).

Jika progres 2 mode Naik, maka data Trebel_1 id 1 menjadi data Trebel_1 id 2 yang setiap karakter angkanya dikurang 2.

Jika progres 3 mode Naik, maka data Trebel_1 id 1 menjadi data Trebel_1 id 3 yang setiap karakter angkanya dikurang 4.



1b. jika progres 1 dan mode Turun, maka data terpilih Trebel_1 id 1 menjadi data Trebel_1 id 1 (data Trebel terpilih di progres 1 adalah tetap).

Jika progres 2 mode Turun, maka data Trebel_1 id 1 menjadi data Trebel_1 id 3 yang setiap karakter angkanya dikurang 3.

Jika progres 3 mode Turun, maka data Trebel_1 id 1 menjadi data Trebel_1 id 2 yang setiap karakter angkanya dikurang 3.



2. jika data Trebel terpilih dari id 2, maka 

2a. jika progres 1 dan mode Naik, maka data Trebel_1 id 2 menjadi data Trebel_1 id 2 (data Trebel terpilih di progres 1 adalah tetap).

Jika progres 2 mode Naik, maka data Trebel_1 id 2 menjadi data Trebel_1 id 3 yang setiap karakter angkanya dikurang 2..

Jika progres 3 mode Naik, maka data Trebel_1 id 2 menjadi data Trebel_1 id 1 yang setiap karakter angkanya dikurang 1.



2b. jika progres 1 dan mode Turun, maka data terpilih Trebel_1 id 2 menjadi data Trebel_1 id 2 (data Trebel terpilih di progres 1 adalah tetap).

Jika progres 2 mode Turun maka data Trebel_1 id 2 menjadi data Trebel_1 id 1 yang setiap karakter angkanya dikurang 0.

Jika progres 3 mode Turun, maka data Trebel_1 id 2 menjadi data Trebel_1 id 3 yang setiap karakter angkanya dikurang 3.



3. jika data Trebel terpilih dari id 3, maka 

3a. jika progres 1 dan mode Naik, maka data Trebel_1 id 3 menjadi data Trebel_1 id 3 (data Trebel terpilih di progres 1 adalah tetap).

Jika progres 2 mode Naik, maka data Trebel_1 id 3 menjadi data Trebel_1 id 1 yang setiap karakter angkanya ditambah 1.

Jika progres 3 mode Naik, maka data Trebel_1 id 3 menjadi data Trebel_1 id 2 yang setiap karakter angkanya dikurang 1.



3b. jika progres 1 dan mode Turun, maka data terpilih Trebel_1 id 3 menjadi data Trebel_1 id 3 (data Trebel terpilih di progres 1 adalah tetap).

Jika progres 2 mode Turun, maka data Trebel_1 id 3 menjadi data Trebel_1 id 2 yang setiap karakter angkanya dikurang 0.

Jika progres 3 mode Turun, maka data Trebel_1 id 3 menjadi data Trebel_1 id 1 yang setiap karakter angkanya dikurang 0.

Hal yang sama di atas juga berlaku untuk data dari kolom Trebel_2, Trebel_3, Trebel_4, atau Trebel_5.


Untuk data dari Sub_Gn_Cyan_Atas, ketentuan di setiap kolom Trebel, berlaku:

1. jika data Trebel terpilih dari id 1, maka 

1a. Jika progres 1 dan jika mode Naik atau Turun, maka data Trebel_1 id 1 menjadi data Trebel_1 id 1 (data Trebel terpilih di progres 1 adalah tetap).

Jika progres 2 mode Naik, maka data Trebel_1 id 1 menjadi data Trebel_1 id 1 yang setiap karakter angkanya dikurang 1

Jika progres 3 mode Naik, maka data Trebel_1 id 1 menjadi data Trebel_1 id 1 yang setiap karakter angkanya dikurang 2.

1b. jika progres 1 dan mode Turun, maka data terpilih Trebel_1 id 1 menjadi data Trebel_1 id 1 (data Trebel terpilih di progres 1 adalah tetap).

Jika progres 2 mode Turun, maka data Trebel_1 id 1 menjadi data Trebel_1 id 1 yang setiap karakter angkanya dikurang 1.

Jika progres 3 mode Turun, maka data Trebel_1 id 1 menjadi data Trebel_1 id 1 yang setiap karakter angkanya dikurang 2.

Hal yang sama di atas juga berlaku untuk data dari kolom Trebel_2, Trebel_3, Trebel_4, atau Trebel_5.

Komentar

Postingan populer dari blog ini

Cara Download Aplikasi (.apk) Playstore Berbayar Jadi Gratis

  Langsung ke isi Menu Alutekno  »  Android  »  Cara Download Aplikasi (.apk) Playstore Berbayar Jadi Gratis Cara Download Aplikasi (.apk) Playstore Berbayar Jadi Gratis Download Aplikasi (Apk) Berbayar jadi Gratis di Playstore  – Pengguna smartphone Android semakin tahun semakin berkembang pesat begitu juga jumlah aplikasi yang telah di publish di playstore semakin meningkat pula. ADVERTISEMENT Daftar Isi Cara Download Aplikasi Playstore Berbayar Jadi Gratis 1. Download Aplikasi Blackmart Alpha 2. Menggunakan Lucky Patcher 3. Mencari File .apk Berbayar dari Situs File Sharing ADVERTISEMENT Aplikasi yang ada di playstore terbagi menjadi dua kategory yaitu yang gratis dan berbayar, aplikasi gratis biasanya terdapat iklan di dalamnya sehingga developer bisa mendapatkan uang untuk mengembangkan aplikasi yang telah di buatnya. Sedangkan Aplikasi berbayar atau premium biasanya tidak terdapat iklan dan mempunyai fitur yang lebih lengkap dibandingkan dengan aplika...

Cara Membuat Form Login Menggunakan HTML&CSS

  Upgrade Responses (2) Sukma Riadi Pakpahan What are your thoughts?  Cancel Respond Agustinus Giri Hartono 3 months ago Aku dah coba, tapi bagian bawah kotak login masih putih. Bagaimana supaya background sama dengan gradasi hijau? di >> body { background: -webkit-linear-gradient(bottom, #2dbd6e, #a6f77b); background-repeat: no-repeat; } 1 1 Arif Firmansyah 3 months ago terima kasih banyak boss cara menjelaskan sangat detail banget….saya berhasil membuat halaman login yang di jelaskan tadi, saya ingin penjelasannya lagi bagaimana cara masuk ke login dan membuat halaman baru karena saya masih pemula Welcome back. You are signed in as  srpakpahansst@gmail.com .  Not you? Tutorial Mendesain Form Login Menggunakan HTML&CSS Kimiyuki Yukawa Follow Mar 25, 2019  · 9 min read Tentu kita tidak asing lagi dengan istilah  login  dalam dunia  website . Halaman  login  sendiri dibuat untuk memberikan akses kepada  user...

PANDUAN CARA INSTALL WORDPRESS DI PC LOCALHOST [OFFLINE]

READY..! START BLOGGING WITH WORDPRESS..? Trending: 15+ Tema WordPress untuk... 15 Sumber Backlink Grati... Jual Tema WordPress Prem... Panduan Lengkap Cara Men... 5 Tema WordPress Terbaik... ALL ABOUT All About WORDPRESS Tutorial DESIGN All About THEMES Download LINUX Tutorial FOREX Forex DEALS Must See HOW TO START A BLOG? Panduan Membuat Blog Hanya 30 Menit Home  »  CMS  »  Panduan Cara Install WordPress di PC Localhost [Offline] PANDUAN CARA INSTALL WORDPRESS DI PC LOCALHOST [OFFLINE] Centerklik  |  CMS ,  WordPress Panduan Cara Install WordPress di PC Localhost [Offline]  – Jika Anda ingin memiliki blog gratis bisa membuat blog pada layanan gratis seperti blogger atau  membuat blog di WordPress.com . Keduanya memang gratis baik dari penggunaan domain maupun hosting, tapi tentunya sesuatu yang gratis tidak akan pernah di beri akses penuh dan masih banyak batasan, Dengan...