• Tidak ada hasil yang ditemukan

Fungsi Pada Objek

Dalam dokumen Belajar Python 1 (Halaman 116-126)

self.setCaption() berarti objek ber-class FormRelasi terse-but menggunakan fungsi setCaption() yang berasal dari leluhurnya. Fungsi ini memberikan nilai pada caption4 di suatu form.

Sedangkan self.show() berguna untuk menampilkannya. Tanpa ini, form tidak ditampilkan namun program tetap ber-jalan karena exec_loop() diber-jalankan. Coba saja Anda hapus self.show() dan jalankan kembali program tersebut. Kalau Anda kesulitan menghentikannya (tampak hang) lakukan saja perintah ini di console yang lain:

14.4. FUNGSI PADA OBJEK 117 $ killall python

show() dan setCaption() dipanggil pada saat penciptaan yang juga dapat dipanggil sesudahnya:

hello1.py ---01| from qt import * 02| 03| class FormHello(QWidget): 04| def __init__(self): 05| QWidget.__init__(self) 06| self.setCaption("Hello World !") 07| 08| app = QApplication([]) 09| fm = FormHello() 10| fm.show() 11| app.setMainWidget(fm) 12| app.exec_loop()

Bab 15

Visual Class

QWidget memang class untuk membuat form, form yang seder-hana. Namun sebenarnya ia merupakan leluhur semua objek-tampak (visual object). 1

Dalam istilah Qt, visual object disebut sebagai widget. Buku ini juga menggunakan istilah yang sama untuk menyebut objek-tampak, yaitu QWidget dan keturunannya.

15.1 Buku Alamat

Berikut ini form yang diniatkan untuk pengisian buku alamat. Anda akan diperkenalkan dengan berbagai class untuk

mema-1Lihat kembali halaman 84 tentang istilah object & class.

sukkan data (editor), menampilkan tulisan (label), maupun un-tuk melaksanakan perintah tertentu (button).

relasi1.py ---01| from qt import * 02| 03| class FormRelasi(QWidget): 04| def __init__(self): 05| QWidget.__init__(self) 06| self.resize(268,194) 07| self.setCaption("Relasi") 08| labelNama = QLabel(self) 09| labelNama.setGeometry(10,10,65,20) 10| labelNama.setText("Nama") 11| labelAlamat = QLabel(self) 12| labelAlamat.setGeometry(10,40,65,20) 13| labelAlamat.setText("Alamat") 14| self.editNama = QLineEdit(self) 15| self.editNama.setGeometry(90,10,160,20) 16| self.editAlamat = QTextEdit(self) 17| self.editAlamat.setGeometry(90,40,160,102) 18| buttonSimpan = QPushButton(self) 19| buttonSimpan.setGeometry(90,150,80,24) 20| buttonSimpan.setText("Simpan") 21| self.show() 22| 23| app = QApplication([]) 24| fm = FormRelasi()

15.1. BUKU ALAMAT 121 25| app.setMainWidget(fm)

26| app.exec_loop()

27| print "Nama", fm.editNama.text() 28| print "Alamat", fm.editAlamat.text() Class yang dimaksud adalah:

QLabel untuk menampilkan tulisan. Sifatnya read-only, se-hingga pengguna (user) tidak dapat berinteraksi lang-sung.

QLineEdit tempat menuliskan masukan (input) dari penggu-na. Pada contoh berikut dipakai untuk menampung Nama.

QTextEdit mirip QLineEdit, tetapi dengan kemampuan lebih dari satu baris masukan (multiline), misalnya untuk menampung Alamat.

QPushButton tombol yang biasanya dipakai untuk perintah ter-tentu. Nanti dipakai untuk perintah menyimpan da-ta.

Sedangkan fungsi berikut ini selain dimiliki QWidget juga terwarisi oleh keempat class tersebut.

resize() mengubah ukuran form yang membutuhkan masukan berupa dua bilangan bulat yang mewakili panjang dan lebar form dalam satuan pixel.

Gambar 15.1: Form Alamat

setGeometry() menentukan posisi dan ukuran widget. Dua angka pertama merupakan posisi yang ditentukan dari sudut kiri atas form. Sedangkan dua angka berikutnya merupakan ukuran (besarnya) objek la-bel tersebut.

Pengisian Nama menggunakan class QLineEdit yang hanya mam-pu menammam-pung masukan sebanyak satu baris saja, karena me-mang kebutuhannya seperti itu. Berbeda dengan Alamat yang menggunakan QTextEdit yang sanggup lebih dari satu baris, bahkan dengan kemampuan berganti baris secara otomatis (au-towarp).

setText() pada QLabel dan QPushButton merupakan fungsi untuk mengisikan teks. Fungsi yang sama juga terdapat pada objek lain yang memiliki tempat untuk tulisan, seperti halnya pada QLineEdit dan QTextEdit.

Pencetakan Nama dan Alamat pada akhir program ingin menunjukkan bagaimana mendapatkan nilai yang sudah dima-sukkan pemakai. Seperti juga setText(), text() dimiliki oleh objek lain yang memiliki tempat untuk tulisan, seperti QLabel dan QPushButton.

15.1. BUKU ALAMAT 123

15.1.1 Parent dan Child

Kembali membahas istilah. Parent merupakan wadah2 objek. Objek inilah yang disebut sebagai child. Pada contoh di atas dikatakan bahwa labelNama berwadah FormRelasi. Perhatikan baris:

labelNama = QLabel(self)

dimana self merupakan wadah bagi QLabel yang baru dibuat dengan nama variabel labelNama.

15.1.2 Parent dan Owner

Pembuatan editNama dan editAlamat menggunakan kata self di depannya. Ini artinya class FormRelasi memiliki dua objek tersebut. Atau dikatakan FormRelasi sebagai pemilik (owner) keduanya. Sedangkan labelNama, labelAlamat, dan tombol-Simpan bukan milik class FormRelasi tetapi milik fungsi __init__(),3

namun tetap ber-wadah pada FormRelasi. Jadi, self.editNama = ...

berarti variabel editNama dimiliki self, sedangkan, ... = QLineEdit(self)

berarti QLineEdit tersebut berwadah pada self.

Sehingga bisa saja suatu objek dimiliki objek A namun berwadah objek B, meski hal ini jarang diterapkan.

2Lihat pembahasan mengenai wadah di halaman 123.

15.1.3 Dengan Atau Tanpa self

Bagaimana kita menentukan suatu objek dimiliki oleh class atau cukup dimiliki oleh fungsi didalamnya ? Kalau mengambil jalan aman sebaiknya semua dimiliki oleh class (dengan awalan self). Namun kalau Anda merasa repot karena terlalu banyak kata self yang ditulis gunakan pedoman berikut ini:

Gunakan awalan self apabila objek tersebut akan dipakai oleh blok lain diluar fungsi yang membuat-nya.

Kebanyakan objek bisa diterapkan dengan pedoman di atas, na-mun ada beberapa yang bisa menyebabkan segmentation fault.4

15.1.4 Modul qt

Modul qt berisi banyak class dan fungsi yang sering dipakai pada contoh-contoh program berikutnya. Oleh karena itu kita hindari penulisan

import qt

dan sebagai gantinya gunakan from qt import *

agar tidak perlu menyebutkan nama modul didepan class yang digunakan.

4Segmentation fault: kesalahan program yang sering disebabkan masalah manajemen memori. Kesalahan ini cukup fatal karena tidak ter-deteksi oleh programnya itu sendiri.

15.1. BUKU ALAMAT 125

15.1.5 String Atau QString

QString digunakan untuk penanganan string, dan tergolong se-bagai non-visual class5. Objek ini banyak terdapat pada berba-gai properti objek seperti caption(), text(), dsb. Juga sebaberba-gai parameter masukan setCaption(), setText(), dst.

Kita bisa menuliskan baris berikut:

self.editNama.setText( QString("Nuryadi") ) sama hasilnya dengan:

self.editNama.setText( "Nuryadi" )

dimana editor bertipe QLineEdit, misalnya. Namun jangan harapkan hal yang sama ketika kita ingin mengolah text() de-ngan perintah standar Python lainnya mengenai string, misal-nya penggunaan operator tambah (+) seperti:

s = "Nama " + self.editNama.text()

karena ini merupakan kesalahan dimana tipe string ditambahkan dengan QString. Untuk mengatasinya gunakan proses format string:

s = "Nama %s" % self.editNama.text() atau bisa juga dengan

s = "Nama " + str(self.editNama.text())

dan sampai di sini s tetap bertipe string dan bukan QString. Bila Anda menggunakan print untuk mencetak QString maka hal ini tidak perlu dilakukan dimana penggabungan bisa dengan koma, seperti contoh di atas. Karena sifat print sudah seperti fungsi str() maupun string formatting %.

Dalam dokumen Belajar Python 1 (Halaman 116-126)

Dokumen terkait