Salah satu kelebihan bahasa pemrograman dinamis Python adalah kemampuan untuk secara dinamis membuat antarmuka pengguna grafis (GUI) saat runtime.
Built-in library Tkinter memungkinkan Anda untuk membuat, menempatkan dan memindahkan berbagai elemen grafis untuk informasi kontrol, input dan output - widget.
Namun, perpustakaan Tkinter memiliki satu fitur, jika jumlah widget menjadi lebih besar daripada memungkinkan untuk menampilkan jendela dengan ukuran maksimal yang tersedia untuk layar monitor Anda, maka ada masalah mengakses area tersembunyi jendela.
Perpanjangan perpustakaan Tkinter built-in, perpustakaan Tix (Tk Interface Extension) dapat memecahkan masalah ini dengan bantuan widget ScrolledWindow - sebuah jendela dengan scrollbar.
Widget berguna kedua yang disertakan dengan perpustakaan Tix adalah tabbed window - NoteBook.
Namun, penggunaan widget ini dalam aplikasi berjendela dengan Python memiliki kekhasan tersendiri dalam menampilkan informasi dalam kasus bahwa widget internal tidak sesuai dengan ukuran jendela yang ditetapkan.
Pada artikel ini, kita akan melihat fitur ini saat mengatur GUI dinamis:
Contoh pertama adalah menempatkan widget ScrolledWindow di jendela aplikasi utama, dan dengan demikian semua widget lainnya akan ditempatkan secara otomatis di dalamnya.
Contoh kedua adalah menempatkan widget ScrolledWindow hanya di tab widget NoteBook.
Contoh yang disajikan di sini diimplementasikan pada Python 2.7 dan sistem operasi Linux: Ubuntu 16.04LTS.
Saya berharap bahwa menerapkan contoh-contoh ini dalam versi Python Anda dan sistem operasi tidak akan menghadirkan kompleksitas untuk Anda.
Contoh No.1 - ScrolledWindow widget sebagai wadah utama dari keseluruhan aplikasi.
#!/usr/bin/python
import Tix as tx
root=tx.Tk()
root.geometry("800x600+0+10")
swr=tx.ScrolledWindow(root)
swr.pack(fill=tx.BOTH, expand=1)
nb=tx.NoteBook(swr.window)
nb.pack(fill=tx.BOTH, expand=1)
for i in range(1,21):
nb.add("tab"+str(i),label="Tab "+str(i))
for k in range(1,39):
l=tx.Label(nb.tab1,text="label "+str(k))
l.pack()
for k in range(1,29):
l=tx.Label(nb.tab2,text="label "+str(k))
l.pack(side=tx.LEFT)
root.mainloop()
Hasil skenario No.1 dapat dilihat pada tiga figur berikut:
Gambar 1
Tampilan awal aplikasi No.1 setelah diluncurkan.
Ini terlihat otomatis terjadinya scroll bar dari kanan dan di bagian bawah jendela utama.
Karena ukuran total yang ditempati widget NoteBook lebih besar dari pada jendela akar asli (800x600) karena jumlah Tab yang ditentukan pada siklus pertama dan jumlah Label yang ditentukan dalam dua siklus berikutnya.
Angka ini menunjukkan bahwa dari 20 tab yang ditentukan, hanya 15 yang ditempatkan di jendela utama, dan hanya 31 dari 39 label yang ditentukan pada tab pertama berada.
Gambar 2
Tab kedua di negara bagian awal hanya menampilkan 16 label dari 28.
Posisi scroll bar tetap tidak berubah.
Gambar 3
Memindahkan scroll bar bagian bawah ke kanan Anda dapat melihat bahwa jendela utama tidak hanya mencakup semua tab widget NoteBook namun juga semua tag ditempatkan di tab kedua.
Contoh No.2 - Widget ScrolledWindow terletak di dalam setiap tab widget NoteBook.
#!/usr/bin/python
import Tix as tx
root=tx.Tk()
root.geometry("800x600+0+10")
swm = []
nb=tx.NoteBook(root)
nb.pack(fill=tx.BOTH, expand=1)
for i in range(1,21):
nb.add("tab"+str(i),label="Tab "+str(i))
sw=tx.ScrolledWindow(eval("nb.tab"+str(i)))
swm.append(sw)
sw.pack(fill=tx.BOTH, expand=1)
for k in range(1,39):
l=tx.Label(swm[0].window,text="label "+str(k))
l.pack()
for k in range(1,29):
l=tx.Label(swm[1].window,text="label "+str(k))
l.pack(side=tx.LEFT)
root.mainloop()
Hasil skenario No.2 dapat dilihat pada tiga tokoh berikut ini:
Gambar 4
Tampilan awal dari aplikasi No.2 setelah peluncuran.
Bilah gulir hanya muncul di sebelah kanan tab Tab1, karena jumlah tanda vertikal lebih besar dari ukuran asli jendela utama.
Gambar 5
Tab kedua hanya menampilkan scroll bar bagian bawah, karena pada tab ini labelnya diposisikan secara horizontal.
Gambar 6
Memindahkan scroll bar ke kanan, Anda bisa melihat semua label di ujung jendela, namun Anda tidak dapat mengakses tab dengan angka lebih besar dari 15.
Jadi, dalam varian No.2, scroll bar hanya menyediakan akses dalam tab.
Jika jumlah tab lebih besar dari pada ukuran horizontal jendela utama, maka tidak akan ada akses ke sana.
Karena itu, jika jumlah tab widget NoteBook tidak terlalu besar melebihi batas tampilan jendela utama, maka varian yang dianggap lokasi dari widget ScrolledWindow cukup bisa diterima.
Mencoba menyatukan kedua varian tersebut telah menghasilkan hasil yang sama seperti Contoh No.1, karena jendela widget ScrolledWindow mengembang hingga ukuran maksimal yang ditempati oleh benda-benda yang ditempatkan di dalamnya.
Saya berharap bahwa contoh-contoh ini akan membantu Anda dalam merancang aplikasi jendela Anda dengan Python.