LOGIKA YANG DITERAPKAN PADA DATA BASS DARI TABEL Gn_Cyan_Atas, DAN TABEL Sub_Gn_Cyan_Atas (Part-2)
Pada kode, tolong tambahkan fungsionalitas di setiap lwvel_gn yang diinput oleh user. Bila user menginput di entry_level_gn dan memasukkan angka inputan, yaitu:
1. Bila user menginput level_gn = 1, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 1". Sehingga user harus menginput di entry_id = 1 (tidak boleh menginput angka yang lain, selain 1).
2. Bila user menginput level_gn = 2, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 2". Sehingga user harus menginput di entry_id = 2 (tidak boleh menginput angka yang lain, selain 2).
3. Bila user menginput level_gn = 3, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 3". Sehingga user harus menginput di entry_id = 3 (tidak boleh menginput angka yang lain, selain 3)..
4. Bila user menginput level_gn = 4, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 1". Sehingga user harus menginput di entry_id = 1 (tidak boleh menginput angka yang lain, selain 1).
5. Bila user menginput level_gn = 5, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 3". Sehingga user harus menginput di entry_id = 3 (tidak boleh menginput angka yang lain, selain 3).
6. Bila user menginput level_gn = 6, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 1". Sehingga user harus menginput di entry_id = 1 (tidak boleh menginput angka yang lain, selain 1).
7. Bila user menginput level_gn = 7, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 2". Sehingga user harus menginput di entry_id = 2 (tidak boleh menginput angka yang lain, selain 2)..
8. Bila user menginput level_gn = 8, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 3". Sehingga user harus menginput di entry_id = 3 (tidak boleh menginput angka yang lain, selain 3).
9. Bila user menginput level_gn = 9, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 2". Sehingga user harus menginput di entry_id = 2 (tidak boleh menginput angka yang lain, selain 2).
10. Bila user menginput level_gn = 10, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 3". Sehingga user harus menginput di entry_id = 3 (tidak boleh menginput angka yang lain, selain 3).
11. Bila user menginput level_gn = 11, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 1". Sehingga user harus menginput di entry_id = 1 (tidak boleh menginput angka yang lain, selain 1)..
12. Bila user menginput level_gn = 12, maka tampilkan message_box dengan teks pesan "Lanjut dengan memasukkan input ID = 2". Sehingga user harus menginput di entry_id = 2 (tidak boleh menginput angka yang lain, selain 2).
Kemudian jika user menginput level_gn diluar range 1 hingga 12 yaitu bila user menginput level_gn = 0, atau level_gn >= 13, maka tampilkan message_box dengan teks pesan "Masukkan input yang benar. \nInput Level Gn adalah 1 hingga 12"
Baik, berikut adalah penambahan fungsionalitas pada kode Anda yang menyesuaikan perilaku berdasarkan input `level_gn` oleh user. Kode ini akan menampilkan pesan yang sesuai berdasarkan aturan yang Anda tentukan:
```python
import tkinter as tk
from tkinter import ttk, messagebox
root = tk.Tk()
root.title("Input Level Gn dan ID")
# Definisikan entry untuk level_gn dan id
entry_level_gn = tk.Entry(root)
entry_level_gn.pack(pady=10)
entry_id = tk.Entry(root)
entry_id.pack(pady=10)
# Fungsi untuk menampilkan messagebox dan memvalidasi input level_gn
def validate_level_gn():
try:
level_gn = int(entry_level_gn.get())
if level_gn == 1:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
elif level_gn == 2:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
elif level_gn == 3:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
elif level_gn == 4:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
elif level_gn == 5:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
elif level_gn == 6:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
elif level_gn == 7:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
elif level_gn == 8:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
elif level_gn == 9:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
elif level_gn == 10:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 3")
set_id_entry(3)
elif level_gn == 11:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 1")
set_id_entry(1)
elif level_gn == 12:
messagebox.showinfo("Info", "Lanjut dengan memasukkan input ID = 2")
set_id_entry(2)
else:
messagebox.showerror("Error", "Masukkan input yang benar.\nInput Level Gn adalah 1 hingga 12")
reset_entries()
except ValueError:
messagebox.showerror("Error", "Input harus berupa angka.")
reset_entries()
# Fungsi untuk mengatur entry ID dan mencegah input selain ID yang valid
def set_id_entry(valid_id):
entry_id.delete(0, tk.END)
entry_id.insert(0, valid_id)
entry_id.config(state='readonly') # Membatasi input hanya pada ID yang valid
# Fungsi untuk mereset entries jika input level_gn tidak valid
def reset_entries():
entry_level_gn.delete(0, tk.END)
entry_id.config(state='normal')
entry_id.delete(0, tk.END)
# Tambahkan tombol untuk memvalidasi level_gn
validate_button = tk.Button(root, text="Validate Level Gn", command=validate_level_gn)
validate_button.pack(pady=10)
# Menjalankan main loop
root.mainloop()
```
### Penjelasan:
1. **Fungsi `validate_level_gn()`**: Fungsi ini memeriksa input `level_gn` dan menampilkan pesan yang sesuai berdasarkan nilai yang diinput. Jika `level_gn` berada di luar rentang 1 hingga 12 atau input bukan angka, maka akan muncul pesan kesalahan dan entri akan direset.
2. **Fungsi `set_id_entry()`**: Fungsi ini mengatur input `ID` sesuai dengan aturan yang Anda tentukan, serta membatasi pengguna untuk hanya bisa menginput `ID` yang valid dengan mengatur state entry menjadi `readonly`.
3. **Fungsi `reset_entries()`**: Jika input `level_gn` tidak valid, maka entri akan direset.
4. **Interaksi GUI**: Pengguna menginput `level_gn` pada entry pertama, kemudian setelah menekan tombol "Validate Level Gn", pesan yang sesuai akan muncul, dan entry `ID` akan diatur agar sesuai dengan level yang diinput.
Anda dapat menjalankan kode ini di lingkungan tkinter untuk melihat hasilnya secara langsung.
Tolong tambahkan fungsi untuk menghapus secara otomatis semua inputan oleh user, termasuk inputan entry_level_gn hasil validasi..
Berikut contoh kodenya yang ditambahkan di baris akhir pada def pilih_nada():
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('')
Maksud saya, untuk membersihkan dan me_reset entry dan combobox setelah tombol pilih_nada ditekan oleh user (bukan setelah validasi selesai, tapi setelah tombol pilih_nada ditekan). Sehingga kode finally: # Bersihkan atau reset entry dan combobox setelah validasi selesai entry_level_gn.delete(0, 'end') entry_id.delete(0, 'end') progres_combobox.set('') mode_combobox.set('') nada_combobox.set('')Kode tersebut diletakkan dibagian baris terakhir dari fungsi def pilih_nada().
Tentu, saya akan menambahkan fungsi untuk menghapus secara otomatis semua inputan oleh user setelah validasi selesai. Saya akan menambahkan bagian kode yang membersihkan inputan user di akhir fungsi pilih_nada() yang telah ada, dengan menambahkan finally untuk memastikan entri selalu dibersihkan, terlepas dari hasil validasi.
Blok finally:
Bagian ini memastikan bahwa setelah tombol pilih_nada ditekan dan fungsi pilih_nada() selesai dijalankan, semua inputan pada entry dan combobox akan dihapus atau direset.
Berikut adalah cara menambahkan kode pembersihan di bagian akhir fungsi pilih_nada() dengan benar:
Modifikasi pada Fungsi pilih_nada()
.....
def pilih_nada():
try:
# Logika untuk memilih nada di sini
# (Tambahkan kode yang relevan untuk fungsi ini)
pass # Placeholder, gantikan dengan logika sebenarnya
finally:
# Bersihkan atau reset entry dan combobox setelah tombol pilih_nada ditekan
entry_level_gn.delete(0, 'end')
entry_id.delete(0, 'end')
progres_combobox.set('')
mode_combobox.set('')
nada_combobox.set('')
Penjelasan:
Bagian finally:
Kode dalam blok finally akan selalu dieksekusi setelah blok try selesai, baik hasilnya sukses ataupun gagal.Dalam hal ini, semua entry dan combobox akan direset atau dibersihkan setelah proses validasi level_gn, dan tombol pilih_nada ditekan.
Setelah user menginput level_gn, menyelesaikan validasi, dan menekan tombol pilih_nada, semua inputan pada entry_level_gn, entry_id, dan combobox akan otomatis dihapus atau direset, membuat user siap untuk memasukkan input baru.
Setelah menambah fungsi untuk membersihkan dan me_reset entry serta combobox, applikasi berjalan dengan baik, tapi setelah tombol pilih_nada ditekan, karakter angka pada entry_id yang read only hasil dari validasi tidak mau terhapus
Jika `entry_id` tidak terhapus atau direset setelah tombol `pilih_nada` ditekan, kemungkinan ada beberapa penyebab yang bisa terjadi, terutama karena `entry_id` dalam keadaan read-only. Untuk mengatasi masalah ini, ada beberapa pendekatan yang dapat Anda coba:
### Solusi 1: Menghapus Status Read-Only Sebelum Reset
Sebelum menghapus isi dari `entry_id`, Anda bisa sementara waktu menonaktifkan status read-only, kemudian menghapus isinya, dan mengembalikan status read-only kembali.
Berikut adalah langkah-langkahnya:
1. **Ubah Mode Read-Only Sementara Waktu:**
- Sebelum menghapus, ubah state dari `entry_id` menjadi normal (`'normal'`).
- Hapus isinya.
- Kembalikan state menjadi read-only (`'readonly'`).
### Contoh Kode:
```python
def pilih_nada():
try:
# Logika untuk memilih nada di sini
pass # Placeholder, gantikan dengan logika sebenarnya
finally:
# Menghapus status read-only sementara
entry_id.config(state='normal')
# Bersihkan atau reset entry dan combobox setelah tombol pilih_nada ditekan
entry_level_gn.delete(0, 'end')
entry_id.delete(0, 'end')
progres_combobox.set('')
mode_combobox.set('')
nada_combobox.set('')
# Kembalikan status read-only setelah menghapus isinya
entry_id.config(state='readonly')
reset_entries()
```
### Penjelasan:
- **`entry_id.config(state='normal')`**:
- Baris ini digunakan untuk mengubah state dari `entry_id` menjadi normal (non-read-only) sehingga bisa dihapus isinya.
- **`entry_id.config(state='readonly')`**:
- Setelah isinya dihapus, state dikembalikan menjadi read-only untuk mencegah pengguna melakukan input manual.
### Solusi 2: Menggunakan `update_idletasks()` untuk Memperbarui GUI
Jika masalah masih terjadi, Anda juga bisa menambahkan `self.update_idletasks()` di dalam metode `pilih_nada()` untuk memastikan bahwa semua pembaruan pada GUI dilakukan dengan benar sebelum state read-only diaktifkan kembali.
### Contoh Kode:
```python
def pilih_nada():
try:
# Logika untuk memilih nada di sini
pass # Placeholder, gantikan dengan logika sebenarnya
finally:
# Menghapus status read-only sementara
entry_id.config(state='normal')
# Bersihkan atau reset entry dan combobox setelah tombol pilih_nada ditekan
entry_level_gn.delete(0, 'end')
entry_id.delete(0, 'end')
progres_combobox.set('')
mode_combobox.set('')
nada_combobox.set('')
# Perbarui GUI sebelum mengembalikan state read-only
self.update_idletasks()
# Kembalikan status read-only setelah menghapus isinya
entry_id.config(state='readonly')
reset_entries()
```
Dengan mengikuti langkah-langkah di atas, `entry_id` seharusnya dapat dihapus dan direset dengan benar meskipun dalam kondisi read-only sebelumnya.
Selesai CRUD Data Bass....
Berlanjut ke ...
Komentar
Posting Komentar
This Message