• Tidak ada hasil yang ditemukan

MODUL 1 VARIABEL, TIPE DATA DAN OPERATOR 8/04/ INSTALASI SOFTWARE PHYTON

N/A
N/A
Protected

Academic year: 2022

Membagikan "MODUL 1 VARIABEL, TIPE DATA DAN OPERATOR 8/04/ INSTALASI SOFTWARE PHYTON"

Copied!
88
0
0

Teks penuh

(1)

8/04/2019

MODUL 1

VARIABEL, TIPE DATA DAN OPERATOR

1. INSTALASI SOFTWARE PHYTON

Python dapat diinstal dengan mudah. Langkah pertama yang harus dilakukan adalah mendownload python-3.5.0-amd64 atau versi lain yang sesuai dengan kebutuhan dari situsnya di python.org. Ukuran Python terbaru untuk semua versi sekitar 29 MB. Setelah download selesai, cukup double click untuk menjalankan program instalasinya.

Gambar di atas memperlihatkan jendela pertama dari program instalasi Python. Tidak ada yang sangat perlu dikonfigurasi kecuali satu hal, yaitu mamastikan “Add Python 3.5 to PATH” dalam kondisi terpilih (dicentang). Ini maksudnya adalah menambahkan program Python ke dalam PATH dari sistem Windows sehingga dimana pun berada program Python dapat dipanggil untuk mengeksekusi modul-modul yang ditulis mengukuti kaidah bahasa pemrograman Python.

Anda dapat mengarahkan kursor dan klik mouse pada “Install Now” agar instalasi segera dilakukan. Mudahkan bukan? Namun jika adan ingin melakukan beberapa kustomisasi

(2)

(tidak dianjurkan bagi pemula di Windows) maka boleh memilih “Customize installation”. Ini diperlukan misalnya untuk menginstal Python ke dalam direktori selain C:\Users\Nama_User\AppData\Local\Programs\ Python\Python35. Anda akan memperoleh jendela seperti dibawah dan cukup klik Next untuk berpindah ke jendela berikutnya, yaitu jendela Advanced Options.

A. Menggunakan IDLE (Python Shell)

Instalasi Python, selain memberikan kita file-file untuk menjalankan (eksekusi, compile) modul- modul Python, juga menyediakan sebuah program yang sangat penting, yaitu IDLE. IDLE ini dapat digunakan untuk menjalankan perintah Python baris demi baris, selain dapat digunakan untuk menuliskan kemudian mengeksekusi kode program Python yang lengkap.

Untuk menjalankan python shell, cukup anda tuliskanm python3 ke dalam terminal.

Berikut adalah tampilan IDLE dari python

Pada python anda dapat menjalankan instruksi langsung melalui Python IDLE.

Berikut adalah contoh baris intruksi yang langsung dituliskan pada IDLE

>>> nama = ‘ucok’

(3)

>>> nama

>>> print(nama)

>>> umur = 20

>>> print(nama,”berumur”,umur,”tahun”)

2. MEMBUAT DAN EKSEKUSI KODE PROGRAM PADA PYTHON

Program di dalam python dibuat dengan cara membuat file berekstensi .py. Dalam file inilah anda menulis kode atau perintah yang kita inginkan. Program Text Editor atau IDE Python yang digunakan untuk menulis kode Phyton bias apa saja, tergantung dari kebiasaan dan kenyamanan anda. Di windows anda dapat menggunakan Notepad++, PyScripter, Geany dan lain-lain.

A. Membuat kode program

Untuk membuat kode program dengan nama hello.py, langkah-langkah yang diperlukan adalah sebagai berikut

1. Buat direktori tempat penyimpanan Anda 2. Jalankan program teks editor

3. Tuliskan kode sebagai berikut print(“Hello World!”)

4. Simpan file tersebut dengan nama hello.py

3. VARIABEL DAN OBJEK

Python merupakan Bahasa dengan dynamic typing yaitu variabelnya tidak dibatasi oleh tipe datanya. Sebagai contoh, vairabel yang sudah diisi dengan tipe bilangan bulat bias diisi dengan bilangan riil, string, ataupun tipe data yang lain.

>>> x = 9

>>> type(x)

<class ‘int’>

>>> x = true

>>> type(x)

<class ‘bool’>

>>> x = ‘contoh’

>>> type(x)

<class ‘str’>

(4)

Pada contoh kode di atas, variable x awalnya berisi tipe data integer (int). Dimana selanjutnya variable tersebut digunakan untuk menampung nilai dari tipe data lain (bool dan str), sehingga satu variable dapat berubah-ubah tipe datanya sesuai dengan kebutuhan.

Coba eksekulisah kode berikut pada computer anda.

>>> x = 9

>>> id(x) 10106080

>>>

id pada potongan kode di atas merupakan sebuah identitas unik yang dimiliki oleh setiap variable. Cara mendapatkan id adalah dengan menggunakan perintah id(‘nama_variabel’). Untuk setiap variable jika memiliki nilai yang sama maka python akan menunjuk nilai yang sama untuk variable yang berbeda. Coba eksekusi potongan kode berikut pada computer anda.

>>> x = 9

>>> id(x) 10106080

>>> y = 9

>>> id(y) 10106080

>>>

Dari potongan kode di atas, jika kita memanggil id untuk variable x maupun y maka akan muncul id yang sama. Hal ini menunjukkan bahwa variable x maupun y memiliki id referensi yang sama karena niali pada varibel x maupun y adalah sama-sama sebuah onjek yang bernilai 9.

TIPS!

Cobalah rubah nilai varibel y dengan nilai lain dan panggil id nya, apakah masih memiliki id yang sama?

Berdasarkan potongan kode yang telah anda buat sebelumnya yang memiliki id yang sama. Jika anda menggunakan perintah del untuk menghapus variable y, maka yang akan dihapus adalah referensinya saja, bukan objek ‘9’ yang tadi ditunjuk oleh variable x dan y. Coba eksekusi kode berikut pada computer anda

>>> x = 9

(5)

>>> id(x) 10106080

>>> y = 9

>>> id(y) 10106080

>>> del y

>>> y

Traceback (most recent call list):

File ”<pyshell#16>”, line 1, in <module>

Y

NameError: name ’y’ is not defined

>>> x 9

>>> id(x) 10106080

>>>

Berdasarkan kode program yang telah anda buat, tambahkan kode berikut

>>> x = True

Dengan menambahkan kode baris di atas, maka referensi objek varibel x akan dipindahkan dari objek ‘9’ ke objek ‘True’. Dengan demikian objek lama (9) akan diklaim sebagai sampah karena objek tersebut tidak ditunjuk oleh variable apapun.

4. PYTHON BERSIFAT CASE-SENSITIVE

Penulisan kode program pada pythonbersifat case sensitive. Dengan demikian misal variable Posisi akan berbeda dengan variable posisi. Coba eksekusilan program berikut

>>> posisi = (300,300)

>>> posisi (300,300)

>>>

>>> Posisi

(6)

File ”<pyshell#16>”, line 1, in <module>

Posisi

NameError: name ’Posisi’ is not defined

5. PEIRNTAH PROGRAM (STATEMENT)

Pada python stiap kode program yang dituliskan tidak harus diakhiri dengan sebuah statement (biasanya tanda titik koma) seperti pada Java dan C. Titik koma pada python hanya diberikan pada saat ada dua atau lebih statement pada satu baris yang sama.

Tuliskan kode berikut pada computer anda.

>>> a = 1; b = 2; c = 3

>>> print(a); print(b); print(c) 1

2 3

>>>

Secara umum perintah program ditulis dalam satu baris kode, tetapi jika perintah yang dituliskan panjang maka anda dapat memecah perintah tersebut menjadi beberapa baris.

Dimana setiap baris harus dihubungkan dengan tanda backslash (\). Coba tuliskan program berikut pada computer anda.

>>> x = 9

>>> if isiinstance(x,int) and \ x > 0 and \

x % 2 == 1;

print(“%d adalah bilangan bulat gasnjil positif” %x) 9 adalah bilangan bulat ganjil positif

>>>

Tetapi tanda backslah tidak diperlukan jika kita menulis perintah kode dalam bentuk array atau kode yang terdapat diantara tanda (…), […] atau {…}. Tuliskan kode berikut pada computer anda.

>>> print(“Pemrograman GUI” +

“dengan Python dan PyQt”)

Pemrograman GUI dengan Python dan PyQt

(7)

>>> data = [ 100,

200, 300 ]

>>> kamus = { ‘one’:’satu’, ‘two’:’dua’, ‘three’:’tiga’

}

>>> data >>> kamus

6. TIPE NUMERIK

Seperti Bahasa pemrograman lain, python mendukung bebrapa tipe data, salah satunya dalah tipe data numerik yang meliputi bilangan bulat, bilangan riil.

A. Bilangan Bulat

Dalam python terapat dua tipe bilangan bulat yaitu int dan bool. Selain tipe integral primitive python juga dapat menggunakan bilangan integral dengan basis decimal (10), biner (2), octal (8) maupun heksadesimal (16). Tuliskan kode program berikut pada computer anda

>>> # bilangan biner

>>> a = 0b1001

>>> # bilangan oktal

>>> b = 0o23

>>> # bilangan heksadesimal

>>> c = 0x2f

>>> a

>>> b

>>> c

(8)

Tipe bilangan bulat yang kedua adalah tipe Boolean, dimana seperti yang telah kita ketahui tipe data boleean bernilai true atau false saja. Tuliskan kode program berikut pada computer anda.

>>> a = True

>>> type(a)

<class ‘bool’>

>>> int(a)

Proses perhitungan dan penambahan bilangan pada python akan menghasilkan objek baru, hal ini terlihat dari id nya.

>>> a = 15

>>> id(a)

???

>>> a += 5

>>> a

>>> id(a)

???

B. Bilangan Riil

Untuk tipe bilangan riil, python menyediakan tipe float, decimal.Decimal dan complex. Type bilangan float menggunakan titik untuk tanda desimalnya.

>>> a = 123.456

>>> a

???

>>> a * 2

>>>

Sedangkan untuk tipe decimal hampir sama dengan tipe data float, akan ntetapi tipe decimal digunakn untuk melakukan perhitungan dengan nilai koma yang lebih presisi.

7. TIPE STRING

Tipe data string dalam python direpresentasikan dengan tipe str. Objek string dapat dibuat dengan tiga cara yaitu:

 Menggunakan tanda pertik tunggal

(9)

 Menggunakan tanda petik ganda

 Menggunakan tanda petik tunggal ataupun ganda yang direpetisi sebanyak tiga kali

Coba tuliskan kode baris berikut dan eksekusilah variabelnya!

>>> s1 = ‘pemrograman python’

>>> s2 = “pemrograman python 2”

>>> s3 = ’’’pemrograman . . . python 3’’’

Objek dalam string tidak dapat dirubah, tiap karakter di dalam string dapat diakses dengan tanda [] diikuti nomor array-nya. Berdasarkan variable yang telah anda buat sebelumnya buatlah kode program berikut, apa hasilnya?, lakukan dengan variable yang lainnya

>>> s1[0], s1[1], s1[2]

dalam string kita dapat memberikan kareakter khusus antara lain \n untuk memberikan enter, \’ untuk membnerikan petik tunggal, \t untuk memberikan tab. Pada dasrnya karakter khusus dalam phyton harus diawali dengan backslash (\) diikuti dengan karakter khususnya. Coba tuliskan kode program berikut pada computer anda!

>>> data = ‘p001\tspidol\t\t9000\np002\tpensil\t\t6000’

>>> print(data)

Python juga dapat menggabungkan dua objek string menjadi satu dengan operator +.

Dengan kode yang telah anda tuliskan sebelumnya gabungkan dengan string berikut dan lihat hasilnya!.

>>> data = ‘\tharga\n’ + data

>>> print(data) A. Membandingkan String

Untuk membandingkan kesamaan string python menggunakan operator ==.

Sedangkan untuk membandingkan id objek string menggunakan is. Selain kedua operator tersebut, python juga dapat menggunakan operator lainnya untuk membandingkan tipe data string. Tuliskan kode program berikut dan gumakan operator >, <=, >=, apa yang dihasilkan?

>>> s1 = ‘python’

>>> s2 = ‘PYTHON’

>>> s1 == s2

>>> s1 != s2

(10)

>>> s1 < s2 B. Mengekstrak Substring

Substring di dalam string dapat diekstrak dengan menggunakan operator slice (:) dengan menyertakan indeks awal dan akhir sebagai penanda. Tuliskan kode program dibawah ini.

>>> s = ‘Pemrograman Python dan PyQt’

>>> s1 = s[0:11]

>>> s1

>>> len(s1)

Kode tersebut mengambil substring dari variable s mulai dari indeks ke 0 sampai indeks ke 11. Jika kita tidak menyertakan indeks maka string yang akan diekstrak adalah sepanjang string tersebut / string sisanya. Tuliskan kode program berikut dan lihat hasilnya!

>>> s = s[:11]

>>> s = s[:8]

>>> s = s[8:]

>>> s = s[0:11:2]

>>> s = s[0:11:1]

>>> s = s[0:11:3]

C. Membuat String dengan format tertentu

Phyton pada dasarnya juga dapat memnggabungkan tipoe data atau format lain ke dalam string yang telah dibuat. Antara lain dengan menggunakan $d, %f, %s dan lain sebagainya. Tuliskan kode program berikut pada computer anda!

>>> s = 'balonku ada %d, kempes %d tinggal %f' % (5,1,4.5)

>>> s

8. TIPE KOLEKSI

Tipe koleksi biasa disebut dengan tipe container. Beberapa tie koleksi antara lain list, dictionary, tuple dan set.

Objek list dibuat dengan menggunakan tanda [], setiap objek yang berada di dlamnya dipisahkan dengan menggunakan koma dan dapat terdiri dari berbagai macam tipe data.

(11)

>>> list = ['balon', 'budi', 'ada', 5]

Model dan cara akses list dapat digabungkan dengan fungsi perulangan dasar seperti for, while dan lain sebagainya.

>>> for item in list:

print (item)

Untuk menghapus atau merubah elemen pada list anda dapat menggunakan perintah del[‘indeks_list’] sedangkan untuk merubah dapat menggunakan perintah namaList[‘indeks’] = value baru. Untuk menambahkan elemen pada list anda dapat menggunakan perintah extend([list])’. Coba rubahlah list yang anda buat dengan perintah berintah tersebut!

(12)

MODUL 2

STRUKTUR KONTROL DAN FUNGSI

1. BLOK PROGRAM DI DALAM PYTHON

Blok program dalam python tidak diawali seperti blok program lain, python. Pemisah antar kondisi di python ditandai dengan (:)

>>> for i in range(4):

print(i, end=' ')

2. STRUKTUR PEMILIHAN

Bentuk umum struktur pemilihan adalah sebagai berikut.

If kondisi:

Aksi

Sedangkan untuk dua kondisi masukkan klausa else dan elif untuk kondisi lebih dari dua.

If kondisi:

Aksi1 Else:

Aksi2

Untuk kondisi lebih dari dua If kondisi:

Aksi1 Elif kondisi2:

Aksi2 Else:

Kondisi3

Tuliskan kode program berikut pada computer anda

>>> if x == 3:

... print('balonku ada %d' %x) ... else:

... print('balonku tidak %d' %x)

(13)

Buatlah kondisi tersebut ke dalam tiga kondisi!

3. STRUKTUR PENGULANGAN

Terdapat dua model perulangan pada python, yang pertama dengan for dan yang kedua dengan while. Tuliskan kode program berikut pada computer anda!

>>> for i in range(10, -1, -2):

... print(i, end='\n')

Rubahlah nilai -1 dengan 2, apa yang terjadi?. Selanjurnya rubahlan nilai -2 menjadi -1, apa yang terjadi?, apa guna masing-masing parameter tersebut?. Rubahlah range menjadi kode berikut, perhatikan apa yang terjadi!

range(10) range(5, 20) range(-10, 15, 2)

Sedangkan perulangan menggunakan while adalah sebgai berikut!

>>> while i < 10:

... print(i, end='\n') ... i = i+1

4. PENANGANAN EKSEPSI

Python memiliki dua struktur penanganan eksepsi yaitu menggunakan try..except dan try..finally tuliskan contoh penanganan try..except berikut di computer anda!

>>> try:

... a = int(input('masukkan nilai a: ')) ... b = int(input('masukkan nilai b: ')) ... print('%d / %d = %.2f' %(a,b,c)) ... except ZeroDivisionError as e:

... print('ERROR: Tidak boleh dibagi 0') Berikut contoh program untuk penanganan eksepsi try..finally

>>> try:

(14)

... f = open('contoh.txt','r') ... lines = f.readlines() ... for line in lines:

... print(line, end='\n') ... except IOError as e:

... print('ERROR: File Hilang') ... finally:

... if f: f.close()

5. FUNGSI

A. Fungsi Global

Fungsi global merupakan fungsi yang dapt dipanggil oleh fungsi lain. Tulis contoh program berikut!

>>> def kali(a,b):

... c = a*b

... return c #masih di dlam fungsi

>>> z = kali (10,5) #di luar fungsi B. Fungsi Lokal

Fungsi local merupakan fungsi yang hanya dapat dipanggil di dalam main fungsi utamanya. Tulis contoh program berikut!

>>> def cetakBonus(daftar=[]):

... def hitungBonus(gaji):

... if gaji < 5000000:

... bonus = 0.05 * gaji ... elif 5000000 <= gaji < 7500000:

... bonus = 0.10 * gaji ... else:

... bonus = 0.15 * gaji ... return bonus

... for nama, gaji in daftar:

... b = hitungBonus(gaji)

(15)

... print('%s\t%d\t%.2f' %(nama,gaji,b)) Isilah data dengan isian berikut, selanjutnya panggillah funfgsi cetakBonus dan hitungBonus

>>> data = [ ('ucok', 4000000), ('Budi', 6000000), ('Wagiman', 8000000)]

>>> cetakBonus(data) #fungsi global

>>> hitungBonus(data) #fungsi local C. Fungsi Lambda

Fungsi lambda digunakan untuk fungsi pemrograman sederhana, fungsi kompleks yang menggunakan perlangan maupun fungsi kondisioanl khusus tidak dapat menggunakan fungsi lambda. Berikut contoh perbedaan fungsi normal dan fungsi lambda pada satu fungsi yang sama.

>>> # fungsi normal ... def maks(a,b):

... if a>b:

... return a ... else:

... return b

>>> maks(20,25)

>>> #fungsi lambda

... maks = lambda a, b: a if a>b else b

>>> maks (20,25) D. Metode

Metode aadalah fungsi yang didedinisikan dalam suatu kelas. Konsep pembentukan metode sama seperti fungsi normal yang didefinisikan di luar kelas. Dan sama seperti Bahasa pemrograman lain, nama kelas harus diawali dengan huruf capital.

>>> class Titik(object):

... def __init__(self, x=0, y=0):

... self.x = x ... self.y = y

(16)

... def pindah(self, x, y):

... self.x = x ... self.y = y ... def cetak(self):

... print('(%d,%d)' %(self.x, self.y))

>>> # membuat objek dari kelas titik

>>> t = Titik()

>>> # memanggil metode cetak

>>> t.cetak()

>>> # memanggil metode pindah

>>> t.pindah(5,10)

>>> t.cetak

(17)

MODUL 3

KELAS DAN MODUL

1. PRINSIP DASAR PEMROGRAMAN BERORIENTASI OBJEK

Pemrogrman berorientasi objek memiliki empat dasar yang pelru dipahami terlebih dahulu, berikut detail dari keempat dasar tersebut.

A. Abstraksi

Abstraksi adalah konsep penyembunyian informasi dalam suatu kelas. Abstraksi juga sering didefinisikan sebagai proses pemodelan kasus pemrograman menjadi satu kelas

B. Enkasulasi

Enkaspsulasi adalah pemodelan suatu permasalahan program menjadi satu kelas utama. Implementasinya dilakukan dengan cara membungkus daftar atribut dan metode menjadi entitas tunggal dengan na ma tertentu (kelas) dimana setiap kelas harus memiliki nama yang unik.

C. Pewarisan

Pewarisan dalah konsep yang mendefinisikan kelas baru yang diwariskan dari kelas lain yang telah ada. Kelas turunan dari kelas induk memiliki sifat sifat yang sama dengan kelas induknya. Tetapi di dalam pewarisan anda dapat mendefinisikan sifat- sifat baru ke dalam kelas turunannya.

D. Polimorfisme

Polimorfisme merupakan konsep yang diartikan sebagai kemampuan suatu objek untuk mengungkapkan banyak hal yang berbeda melalui satu cara yang sama.

2. MENDEFINISIKAN KELAS

Kelas merupakan suatu tipe data yang berisi atribut dan metode. Misalkan jika anda ingin memodelkan bangun persegi panjang ke dalam suatu kelas maka anda dapat membuat data panjang dan lebar sebagai atribut kelas dan hitungLuas() dan hitungKeliling() sebagai metodenya. Setiap kelas memiliki metode __init__() yang berfungsi untuk melakukan inisialisasi nilai atribut tertentu yang dibutuhkan.

Tuliskan kode beris berikut dalam computer anda.

>>> class PersegiPanjang

def __init__(self, p, l):

(18)

# mendefiniskan atribut kelas

self.panjang = p

self.lebar = l

def ubahPanjang (self, p):

self.panjang = p

def ubahLebar (self, l):

self.lebar = l

def hitungLuas(self):

return self.panjang * self.lebar def hitungKeliling(self):

return 2 * (self.panjang + self.lebar) def cetakLuas(self):

print(‘Luas persegi Panjang = %.2f’ % self.hitungLuas())

def cetakKaliling(self):

print(‘Keliling persegi Panjang = %.2f’ % self.hitungKeliling())

Buatlah kelas bangun yang lain seperti kelas lingkaran, dan kelas kerucut!

3. MEMBUAT OBJEK

Objek merupakan instance dari suatu kelas. Untuk membuat objek suatu kelas pada python syntax sebagai berikut.

namaObjek = namaKelas(parameter kelas)

sedangkan untuk eksekusi dari objek yang telah dibuat adalah dengan syntazx sebagai berikut.

namaObjek.namaMethod(parameter)

Tuliskan kode program berikut untuk membuat objek dari kelas yang telah kita buat sebelumnya.

>>> class PersegiPanjang

def __init__(self, p, l):

# mendefiniskan atribut kelas

self.panjang = p

(19)

self.lebar = l

def ubahPanjang (self, p):

self.panjang = p

def ubahLebar (self, l):

self.lebar = l

def hitungLuas(self):

return self.panjang * self.lebar def hitungKeliling(self):

return 2 * (self.panjang + self.lebar) def cetakLuas(self):

print(‘Luas persegi Panjang = %.2f’ % self.hitungLuas())

def cetakKaliling(self):

print(‘Keliling persegi Panjang = %.2f’ % self.hitungKeliling())

>>> # membuat objek dari kelas persegi Panjang >>> objek = persegiPanjang (10, 8)

>>> # memanggil metode cetakLuas() >>> objek.cetakLuas()

Luas persegi Panjang = 80.00

>>> # memanggil metode cetakKeliling()

>>> objek.cetakKeliling()

Keliling persegi Panjang = 36.00

Kelas persegiPanjang yang anda telah buat dapat digunakan untuk membuat beberapa objek. Dimana meskipun setiap objek dari kelas yang sama memiliki atribut yang sama, tetapi nilai atribut untuk masing-masing objek dapat berbeda. Pada kode program yang telah anda buat sebelumnya anda telah membuat objek dengan nilai atribut parameter Panjang 10 dan lebar 8. Selanjutnya anda dapat membuat objek lain dengan nilai atribut dan parameter yang berbeda, missal objek2 dengan Panjang 6 dan lebar 4.

Buatlah beberapa objek dari kelas lingkaran dan kelas kerucut yang telah anda buat!

4. ATRIBUT STATIS

(20)

Atribut statis biasa disebut dengan class variable, sedangkan atribut normal disebut dengan instance /object variable. Dengan demikian nilai atribut dapat berbeda untuk masing-masing objek. Atribut statis harus didefinisikan di luar metode dan tanpa diawali dengan self. Buatlah sebuah atribut statis bernama counter untuk menghitung objek yang terdapat dalam setiap kelas dan inisialisasikan nilai awal dengan 0.

>>> class PersegiPanjang # atribut statis

counter = 0

def __init__(self, p, l):

# mendefiniskan atribut kelas

self.panjang = p

self.lebar = l

def ubahPanjang (self, p):

self.panjang = p

def ubahLebar (self, l):

self.lebar = l

def hitungLuas(self):

return self.panjang * self.lebar def hitungKeliling(self):

return 2 * (self.panjang + self.lebar) def cetakLuas(self):

print(‘Luas persegi Panjang = %.2f’ % self.hitungLuas())

def cetakKaliling(self):

print(‘Keliling persegi Panjang = %.2f’ % self.hitungKeliling())

Untuk memanggil atribut counter yang telah anda buat, anda dapat memanggilnya dengan syntax

namaKelas.namaAtribut_statis

Dari contoh tersebut maka pemanggilan atribut counter adlaah sebagai berikut.

persegiPanjang.counter

Tambahakan stribut statis pad akelas lingkaran dan kerucut yang telah anda buat, lalu buatlah beberapa objek dan eksekusilah atribut counter terbut, apa yang terjadi?

(21)

5. METODE STATIS

Metode statis dalam python dpat langsung dipanggil dari nama kelasnya, tanpa harus membuat objek terlebih dahulu untuk kelas dari objek yang bersangkutan. Tetapi metode statis dapat juga dipanggil melalui objek kelas. Untuk membuat sebuah metode statis, anda dapat menggunakan statement @staticmethod. Tuliskan contoh kode program berikut pada computer anda!

>>> class Aritmatika @staticmethod

def tambah(a, b):

return a + b @staticmethod def kurang(a, b):

return a – b @staticmethod def bagi(a, b):

return a / b

@staticmethod

def bagi_int(a, b):

return a // b

@staticmethod

def pangket(a, b):

return a ** b

coba panggil method yang telah anda buat melalui nama kelas langsung dan melalui objek kelas, amati perbedaannya!.

6. PEWARISAN

Pewarisan kelas dalam python dapat didefinisikan dengan syntax berikut.

namaObjek = namaKelas(parameter kelas)

Metode statis dalam python dpat langsung dipanggil dari nama kelasnya, tanpa harus membuat objek terlebih dahulu untuk kelas dari objek yang bersangkutan. Tetapi metode statis dapat juga dipanggil melalui objek kelas. Untuk membuat sebuah metode statis, anda dapat menggunakan statement @staticmethod. Tuliskan contoh kode program berikut pada computer anda!

(22)

7. METODE ABSTRAK DAN KELAS ABSTRAK

Metode abstrak adalah metode yang tidak memiliki implementasi. Kelas abstrak tidak dapat dibuat objeknya. Metode abstrak yang dimiliki oelh kelas abstrak harus diimplementasikan oleh kelas-kelas turunannya. Untuk mendefinisikan kelas abstrak pada python menggunakan ABCMeta dan @absrtactmethod. Tuliskan kode program berikut pada computer anda!

>>> from abc import ABCMeta,abstractmethod

>>>

>>> # kelas abstract

>>> class DuaDimensi(metaclass=ABCMeta):

@abstractmethod def luas(self):

pass

>>> # Kelas segiEmpat turunan dari kelas duaDimensi

>>> class SegiEmpat(DuaDimensi):

def __init__(self, p, l):

self.panjang = p self.lebar = l

# implementasi metode luas() def luas(self):

Return self.panjang * self.lebar

>>> # Kelas Segitiga turunan dari kelas DuaDimensi

>>> class Segitiga(DuaDimensi):

def __init__(self, a, t):

self.alas = a self.tinggi = t

# implementasi metode luas() def luas(self):

Return (self.alas * self.tinggi) / 2

>>> # Kelas Lingkaran turunan dari kelas DuaDimensi

>>> class Lingkaran(DuaDimensi):

def __init__(self, r):

(23)

self.jari2 = r

# implementasi metode luas() def luas(self):

import math

return math.pi * (self.jari2 ** 2)

Pada kelas DuaDimensi yang telah anda tuliskan di atas tersebut memiliki sebuah metode abstrak yaitu luas(), sehingga metode luas tersebut dapat diimplementasikan kedalam kelas-kelas turunan dari kelas DuaDimensi. Dimana untuk setiap kelas turunannya yang rtelah anda buat memiliki metode luas akan tetapi dengan implementasi yang berbeda- beda tergantung dari bangun ruangnya. Meskipun kelas abstrak tidak dapat dibuat instanisasinya (objeknya) tetapi kelas turunnya tetap dapat dibuat objek, dan dipanggil melalui objek yang telah dibuat.

8. POLIMORFISME

Polimorfisme adlah kemampuan suatu objek untuk melakukan banyak hal menggunakan satu cara yang sama. Tulislah kode program berikut pada computer anda.

>>> from abc import ABCMeta,abstractmethod

>>>

>>> # kelas abstract

>>> class DuaDimensi(metaclass=ABCMeta):

@abstractmethod def luas(self):

pass

>>> # Kelas segiEmpat turunan dari kelas duaDimensi

>>> class SegiEmpat(DuaDimensi):

def __init__(self, p, l):

self.panjang = p self.lebar = l

# implementasi metode luas() def luas(self):

Return self.panjang * self.lebar

>>> # Kelas Segitiga turunan dari kelas DuaDimensi

(24)

>>> class Segitiga(DuaDimensi):

def __init__(self, a, t):

self.alas = a self.tinggi = t

# implementasi metode luas() def luas(self):

Return (self.alas * self.tinggi) / 2

>>> # Kelas Lingkaran turunan dari kelas DuaDimensi

>>> class Lingkaran(DuaDimensi):

def __init__(self, r):

self.jari2 = r

# implementasi metode luas() def luas(self):

import math

return math.pi * (self.jari2 ** 2)

>>> # Membuat list kosong

>>> mylist = []

>>> # menambahkan objek segiEmpat ke dalam mylist

>>> mylist.append(SegiEmpat(10, 8))

>>> # menambahkan objek Segitiga ke dalam mylist

>>> mylist.append(Segitiga(3, 5))

>>> # menambahkan objek Lingkaran ke dalam mylist

>>> mylist.append(Lingkaran(4))

>>> Cek semua elemen mylist dan memanggil metode luas dari setiap objek yang ada di dalam mylist

>>> for obj in mylist:

If not issubclass(obj.__class__, DuaDimensi):

Raise TypeError(‘objek harus turunan dari DuaDimensi’) If isinstance(obj,SegiEmpat):

print(‘Luas Segi empat = ’, end=’’) elif isinstance(obj, segitiga):

(25)

print(‘Luas Segitiga = ‘, end=’’) else:

print(‘Luas Lingkaran = ’, end=’’) print(obj.luas())

perintah print(obj.luas()) akan memberikan hasil yang berbeda tergantung dari implementasi dari metode luas yang dimiliki oleh masing masing objek, dapar dilihat luas segitiga, segi empat, dan lingkaran dapat memberikan hasil yang berbeda hanya dengan memberikan satu periuntah print(obj.luas())

9. MEMECAH KODE MENJADI BEBRAPA FILE

(26)

MODUL 4

PENGENALAN PYQT

1. APA ITU PYQT

PyQt adalah framework untuk pembuatan GUI, sering disebut GUI toolkit, yang merupkan kumpulan library (berupa modul dan kelas) untuk memudahkan para pengguna Python dalam mengembangkan program visual menggunakan library Qt. PyQt merupakan implementasi dari library Qt yang ditulis dalam Bahasa Python. Qt itu sendiri adalah library GUI bersifat cross-platform yang aslinya ditulis dalam Bahasa C++. K Dekstop Environment (KDE), desktop environment untuk system operasi Linux, dikembangkan menggunakan library Qt. Saat ini, library Qt telah diimplementasikan oleh pihak ketiga ke beberapa Bahasa pemrograman lain, seperti Python (PyQt), Ruby (QtRuby), Java (QtJambi), dan C# (Qyoto). Namun, pada kenyataannya yang paling popular, aktif dikembangkan, dan banyak digunakan hanya Qt (untuk pengguna C++) dan PyQt (untuk pengguna PyQt).

A. Versi PyQt

Saat ini, versi PyQt yang aktif dikembangkan ada dua, yaitu PyQt4 dan PyQt5. PyQt4 adalah library untuk python yang merupakan cerminan dari library Qt 4 dan PyQt5 merupakan cerminan dari library Qt 5.

PyQt5 memiliki beberapa perbedaan dibandingkan dengan PyQt4, antara lain:

 Modul-modul dalam PyQt5 telah diorganisasi ulang. Sebagian modul yang ada di dalam PyQt4 telah dihapus di dalam PyQt5 (misal: QtScript), sebagian lagi ada yang dikelompokkan menjadi sub-modul (misal : QtGui dan QtWebKit)

 PyQt5 telah menambahkan beberapa modul yang sebelumnya tidak ada di dalam PyQt4, seperti QtBluetooth, QtPositioning, dan lain-lain.

 PyQt5 hanya mendukung penanganan signal dan slot gaya baru. Dalam PyQt5, kita tidak dapat menggunakan SIGNAL () dan SLOT (), seperti yang biasa dilakukan di dalam PyQt4.

 PyQt5 tidak mendukung semua bagian (kelas maupun fungsi) di dalam library Qt5 yang ditandai sebagai kelas maupun fungsi usang (obsolete).

Sama seperti PyQt4, PyQt5 juga dapat digunakan untuk Python 2.x dan Python 3.x.

Pada kenyatannya, PyQt4 dan Python 2 masih lebih banyak digunakan di dunia pengembangan program, khususnya untuk program-program yang bersifat open- source. Dalam buku ini, kita hanya akan membahas tentang teknologi terbaru, yaitu PyQt5 yang dipadukan dengan Python 3.

(27)

Dalam PyQt5, semua kelas dikelompokkan ke dalam modul. Berikut ini beberapa modul yang terdapat di dalam PyQt5.

QtCore QtNetwork QtWebWwidgets

QtGui QtPositioning QtXml

QtWidgets Enginio QtSvg

QtMultimedia QtWebSocket QtSql

QtBluetooth QtWebkit QtTest

Di antara modul-modul yang disebutkan di atas, tiga modul yang hampir selalu digunakan pada setiap program adalah QtCore, QtGui, dan QtWidgets. Modul QtCore berisi kelas-kelas inti dalam PyQt yang mendukung fungsionalitas program dan tidak berkaitan dengan GUI, seperti waktu, file dan direktori, beragam tipe data, stream, URL, tipe MIME, dan proses atau thread. Modul QtGui berisi kelas-kelas yang berhubungan dengan pembuatan form, penanganan event (dalam terminologi Qt disebut dengan “signal and slot”), pengaturan font, gambar 2D, dan teks. QtWidgets berisi kumpulan kelas yang berkaitan dengan kontrol-kontrol penyusun form. Modul- modul yang lain hanya diperlukan untuk kebutuhan spesifik, misalnya QtMultimedia hanya digunakan ketika kita ingin mengembangkan program yang berkaitan dengan audio dan video (misalnya media player), QtSql digunakan ketika kita ingin mengembangkan program yang melakukan pengaksesan data di dalam sistem database relasional.

B. Mendapatkan PyQt

PyQt memiliki dua jenis lisensi, yaitu GNU General Public Lisence (GPL) dan komersil.

Versi open-source (berlisensi GPL) hanya boleh digunakan untuk mengembangkan program-program yang juga bersifat open-source. Anda tidak diizinkan untuk digunakan untuk menggunakan PyQt versi open-source untuk mengembangkan program komersil maupun program yang bersifat closed-source. Dengan kata lain, ketika anda membuat program menggunakan PyQt versi open-source, maka program dan seluruh kodenya harus dibagikan secara bebas (tanpa biaya) ke public, sehingga orang lain juga dapat mengambil dan mengembangkan program tersebut.

Jika anda berniat untuk mengembangkan program komersial menggunakan PyQt, maka anda perlu membeli PyQt versi komersial. Dengan menggunakan PyQt versi komersial, anda bebas untuk menjual program yang anda buat dan menyembunyikan kodenya.

Dalam buku ini, semua materi pembahasan didemonstrasikan menggunakan PyQt versi open-source.

C. Catatan tentang lisensi PyQt

(28)

Polimorfisme adlah kemampuan suatu objek untuk melakukan banyak hal menggunakan satu cara yang sama. Tulislah kode program berikut pada computer anda.

2. INSTALASI PYQT

Sebelum melakukan instalasi PyQt, pastikan interpreter Python sudah terpasang di komputer Anda. Dalam buku ini, semua materi pembahasan di demonstrasikan menggunakan Python 3 dan PyQt 5.

Instalasi PyQt di lingkungan Windows sangat mudah dilakukan, yaitu dengan menjalankan file installer yang telah diunduh dari https://www.riverbankcomputing.com/. Semua yang dibutuhkan untuk proses pengembangan program akan terpasang, kecuali interpreter Python, yang sebelumnya harus dipasang secara terpisah.

Setelah selesai, library PyQt5 akan berada di dalam direktori C:\Python34\Lib\site- packages\PyQt5. Lokasi tersebut akan berbeda jika Anda melakukan instalasi Python 3 di dalam direktori lain.

3. PROGRAM GUI MINIMAL

Untuk memulai pembuatan kode program menggunakan PyQt, kita akan membuat sebuah form sederhana yang hanya memiliki satu label di dalamnya. Kode ditulis seperti bawah ini :

import sys

from PyQt5.QtWidgets import QApplication, QWidget, QLabel if __name__ == '__main__':

a = QApplication(sys.argv)

form = QWidget() form.resize(200, 100) form.move(300, 300)

form.setWindowTitle('GUI Minimal')

label = QLabel('Hello PyQt5') label.move(55,40)

label.setParent(form)

form.show()

a.exec_()

Perhatikan baris kode berikut :

(29)

Import sys

Modul sys perlu diimpor ke setiap program yang dibuat menggunakan PyQt karena kita akan memanggil sys.argv pada saat membuat objek dari kelas QApplication.

From PyQt5.QtWidgets import QApplication, QWidget, QLabel

Baris kode di atas akan mengimpor kelas QAppliccation, QWidget, dan QLabel. Kelas- kelas tersebut didefinisikan di dalam modul QtWidgets yang berada dalam paket PyQt5 a = QApplication(sys.argv)

Baris kode di atas berguna untuk membuat objek (instance) dari kelas QApplication.

Setiap program yang ditulis menggunakan PyQt harus memiliki objek tersebut.

form = QWidget ()

Baris kode di atas berguna untuk membuat objek dari kelas QWidget. Dalam contoh ini, objek tersebut diperankan sebagai form utama dari program yang kita buat.

For.resize(200,100)

Metode resize () pada kelas QWidgets berguna untuk mengubah ukuran form Form.move(300,300)

Metode move() pada kelas QWidget (dan kelas-kelas control lain) berguna untuk menentukan posisi atau koordinat form pada saat ditampilkan.

Pemanggilan metode resize() dan move() dapat diganti dengan setGeometry(), menjadi seperti berikut:

Form.setGeometry(300,300,200,100)

Baris kode di atas akan menentukan ukuran dan posisi form pada saat ditampilkan Form.setWindowTitle(‘GUI Minimal’)

Baris kode di atas berguna untuk menentukan judul form Label = Qlabel(‘Hello PyQt5’)

Label.move(55,40) Label.setparent(form)

Tiga baris kode di atas berguna untuk membuat label dan menempatkannya ke dalam form pada koordinat (55,40). Metode setParent() menentukan bahwa parent dari komponen label adalah form.

Form.show()

(30)

Baris di atas berguna untuk menampilkan form beserta kontrol-kontrol yang sudah ada di dalamnya.

a.exec_()

Baris kode di atas merupakan pengulangan utama (main loop) dari aplikasi. Dengan kode ini, form akan ditampilkan secara terus menerus sampai ada respon-respon tertentu dari user (pengguna program). Perlu diperhatikan bahwa metode exec_() diakhiri dengan tanda underscore karena dalam Python exec merupakan kata kunci dan memiliki arti lain.

Anda dapat membuat direktori baru untuk menyimpan file di atas, kemudian tambahkan mode execute ke dalam file tersebut

$ sudo chmod +x minimal.y

Untuk mengeksekusi file minimal.py tulis perintah berikut:

$ ./minimal.py

Agar lebih bersifat modular, bisa saja kode program di atas dibagi menjadi dua file, seperti berikut:

File Pertama, berisi kode pembuatan Form:

from PyQt5.QtWidgets import QWidget, QLabel class MinimalForm(QWidget):

def __init__(self):

super().__init__() self.setupUi()

def setupUi(self):

self.resize(200, 100) self.move(300, 300)

self.setWindowTitle('GUI Minimal')

self.label = QLabel('Hello PyQt5') self.label.move(55,40)

self.label.setParent(self) File kedua berisi kode utama.

import sys

from PyQt5.QtWidgets import QApplication from MinimalForm import *

if __name__ == '__main__':

a = QApplication(sys.argv)

minform = MinimalForm() minform.show()

(31)

a.exec_()

4. TAG HTML UNTUK TEKS

Dalam PyQt, kita diizinkan untuk mengunakan tag HTML untuk menentukan format teks yang tampil di dalam form; bisa berupa label, judul dari suatu tombol, item di dalam suatu list, dan sebagainya. Sebagai contoh, anda dapat menebalkan bagian teks tertentu menggunakan tag <b> .. </b>, teks miring dengan tag <i> .. </i>, garis bawah dengan tag

<u> .. </u>, judul dengan <h1> .. </h1>, dan penentuan warna, jenis, dan ukuran huruf (font) dengan tag <font> .. </font>. Contoh kode di bawah ini akan menunjukkan penggunaan beberapa tag tersebut.

from PyQt5.QtWidgets import QWidget, QLabel class TextForm(QWidget):

def __init__(self):

super().__init__() self.setupUi()

def setupUi(self):

self.resize(300, 200) self.move(300, 300)

self.setWindowTitle('Demo Tag HTML')

self.label1 = QLabel('<h1>Hello <font color=red>PyQt5</font></h1>')

self.label1.move(10,10) self.label1.setParent(self)

self.label2 = QLabel('''

Teks ini dibuat dengan tag HTML. Teks dapat dijadikan

<b>tebal</b>,

<i>miring</i>, dan <u>bergaris bawah</i>

''')

self.label2.setWordWrap(True) self.label2.move(10,50)

self.label2.setParent(self)

import sys

from PyQt5.QtWidgets import QApplication from TextForm import *

if __name__ == '__main__':

a = QApplication(sys.argv)

form = TextForm() form.show()

(32)

a.exec_()

5. MENUTUP FORM

Pada contoh kode program yang telah kita buat sebelumnya, form hanya dapat ditutup melalui tombol silang (X) yang terdapat di dalam sudut kanan atau kiri atas. Pada kasus- kasus tertentu, terkadang kita ingin menutup suatu form melalui menu maupun tombol yang dibuat sendiri. Bagian ini akan menunjukkan cara untuk melakukan pekerjaan tersebut.

from PyQt5.QtWidgets import QWidget, QPushButton from OtherForm import *

class MainForm(QWidget):

def __init__(self):

super().__init__() self.setupUi()

def setupUi(self):

self.resize(300, 200) self.move(300, 300)

self.setWindowTitle('Demo Menutup Form')

self.button = QPushButton('Tampilkan Form Lain') self.button.move(50,50)

self.button.setParent(self)

self.button.clicked.connect(self.buttonClick) def buttonClick(self):

form = OtherForm() form.show()

import sys

from PyQt5.QtWidgets import QApplication from MinimalForm import *

if __name__ == '__main__':

a = QApplication(sys.argv)

minform = MinimalForm() minform.show()

a.exec_()

(33)

6. SIGNAL DAN SLOT DI PYQT5

Program berbasis GUI bekerja berdasarkan kejadian (event) tertentu. Ketika suatu event terjadi maka program akan mengeksekusi fungsi atau metode tertentu yang diperankan sebagai event-handler. Event terjadi pada control tertentu. Ketika hal ini terjadi, maka control bersangkutan disebut sebagai pengirim event atau sumber event (event source).

Pada saat yang suatu event terjadi, event source akan mengirim notifikasi ke control tujuan (event target). Dalam pemrograman GUI mekanisme ini disebut sebagai penanganan event atau event-handling. Dalam PyQt, event-handling disebut dengan istilah signal dan slot. Signal adalah jenis event yang terjadi pada event source dan slot adalah metode milik event target yang akan dieksekusi ketika event tersebut terjadi.

Untuk memahami mekanisme signal dan slot dalam PyQt, asumsikan kita telah memiliki dua objek di dalam form yang kita buat, misalnya button (objek dari kelas QPushButton) dan lineEdit (objek dari kelas QLineEdit). Pada contoh sederhana ini, kita ingin membersihkan teks di dalam lineEdit (lineEdit.clear()) ketika button di-klik (button.clicked). Pada saat button di-klik, maka:

 Objek button disebut event source

 Event clicked disebut signal

 Objek lineEdit disebut event target

 Metode clear() milik objek lineEdit disebut slot

Dalam PyQt4, mekanisme signal dan slot diimplementasikan menggunakan fungsi SIGNAL() dan SLOT(), seperti berikut:

Connect(EventSource, SIGNAL(NamaSignal), EventTarget, SLOT(NamaSlot))

PyQt5 tidak mendukung bentuk penulisan seperti di atas. Dalam PyQt5, signal dan slot ditulis seperti berikut:

EvenSource.NamaSignal.connect(EventTarget.NamaSlot) Berikut contoh program cara kerja signal dan slot pada PyQt5 :

#########################################################

# Nama file: MainForm.py

#########################################################

from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QLineEdit, QPushButton)

class MainForm(QWidget):

def __init__(self):

super().__init__() self.setupUi()

def setupUi(self):

(34)

self.resize(300, 100) self.move(300, 300)

self.setWindowTitle('Demo Signal dan Slot')

self.lineEdit = QLineEdit()

self.lineEdit.setText("Demo signal dan slot")

self.button1 = QPushButton('Bersihkan') self.button2 = QPushButton('Tutup')

hbox = QHBoxLayout()

hbox.addWidget(self.button1) hbox.addWidget(self.button2)

layout = QVBoxLayout()

layout.addWidget(self.lineEdit) layout.addLayout(hbox) self.setLayout(layout)

self.button1.clicked.connect(self.lineEdit.clear) self.button2.clicked.connect(self.close)

#########################################################

# Nama file: main.py

#########################################################

import sys

from PyQt5.QtWidgets import QApplication from MainForm import *

if __name__ == '__main__':

a = QApplication(sys.argv)

form = MainForm() form.show()

a.exec_()

(35)

MODUL 5

WIDGET DALAM PYQT

1. KELAS QLABEL, QLINEEDIT, DAN QPUSHBUTTON

Kontrol dasar dalam pemrograman GUI adalah label, text box dan button. Dalam penggunaan PyQt ketiga control tersebut direpresentasikan dengan kelas QLabel, QLineEdit dan QPushButton. Kelas QLabel digunakan untuk menapilkan teks atau gambar di dalam form. Beberapa metode yang sering digunakan dalam kelas QLabel adalah sebagai berikut

Metode Fungsi

setText() Memasukkan teks ke dalam objek label setPixmap() Memasukkan gambar ke dalam objek

label

setNum() Memasukkan nilai numerik ke dalam objek label

Clear() Mengosongkan teks di dalam objek label

Sedangkan kelas QLineEdit digunakan untuk menampilkan control input (text box /edit box). QLineEdit hanya mampu menampung teks satu baris saja. Jika text lebih dari satu baris maka anda harus menggunakan QTextEdit. Metode yang sering digunakan pada QLineEdit adalah sebagai berikut.

Metode Fungsi

setEchoMode()

Menentukan tampilan teks pada QLineEdit. Beberpa opsi yang dapat digunakan antara lain:

Normal, NoEcho, Password dan PasswordEchoOnEdit

maxLength() Menentukan karakter maksimal yang dapat dimasukkan ke dalam kontrol setText() Memasukkan teks ke dalam QLineEdit clear() Mengosongkan teks di dalam QLineEdit setReadOnly() Menjadikan control bersifat read only isReadOnly() Memeriksa apakah control bersifat read

only

(36)

setEnabled() Mengaktifkan control ketika melewati nilai true.

setFocus() Memindahkan focus ke control QLineEdit

Sedangkan signal yang sering digunakan pada kelas QLineEdit adalah sebagai berikut.

Metode Fungsi

textChanged() Aktivasi pada saat user memasukkan teks ke dalam control QLineEdit

returnPressed() Aktivasi pada saar user menekan tombol editingFinished() Aktivasi saat focus sudah meninggalkan

control QLineEdit

Kelas QPushButton digunakan untuk menampilkan tombol di dalam form. Untuk contoh penggunaan kelas QLabel, QLineEdit dan Qpush button tuliskan kode program berikut pada computer anda.

#########################################################

# Nama file: DemoQLineEdit.py

#########################################################

import sys

from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * class MainForm(QWidget):

def __init__(self):

super().__init__() self.setupUi()

def setupUi(self):

self.resize(400, 200) self.move(300, 300)

self.setWindowTitle('Demo QLabel, QLineEdit, dan QPushButton')

self.label1 = QLabel()

self.label1.setText('Bilangan pertama') self.numberEdit1 = QLineEdit()

vbox1 = QVBoxLayout()

vbox1.addWidget(self.label1) vbox1.addWidget(self.numberEdit1)

self.label2 = QLabel()

self.label2.setText('Bilangan kedua')

(37)

self.numberEdit2 = QLineEdit() vbox2 = QVBoxLayout()

vbox2.addWidget(self.label2) vbox2.addWidget(self.numberEdit2)

self.label3 = QLabel()

self.label3.setText('Hasil Perhitungan') self.resultEdit = QLineEdit()

self.resultEdit.setReadOnly(True) vbox3 = QVBoxLayout()

vbox3.addWidget(self.label3) vbox3.addWidget(self.resultEdit)

vbox4 = QVBoxLayout() vbox4.addLayout(vbox1) vbox4.addLayout(vbox2) vbox4.addLayout(vbox3) vbox4.addStretch()

self.addButton = QPushButton('&Tambah')

self.substractButton = QPushButton('&Kurang') self.mulButton = QPushButton('K&ali')

self.divButton = QPushButton('&Bagi') vbox5 = QVBoxLayout()

vbox5.addWidget(self.addButton)

vbox5.addWidget(self.substractButton) vbox5.addWidget(self.mulButton)

vbox5.addWidget(self.divButton) vbox5.addStretch()

layout = QHBoxLayout() layout.addLayout(vbox4) verticalLine = QFrame();

verticalLine.setFrameShape(QFrame.VLine) verticalLine.setFrameShadow(QFrame.Sunken) layout.addWidget(verticalLine)

layout.addLayout(vbox5) self.setLayout(layout)

self.addButton.clicked.connect(self.addButtonClick)

self.substractButton.clicked.connect(self.substractButtonClick )

self.mulButton.clicked.connect(self.mulButtonClick) self.divButton.clicked.connect(self.divButtonClick)

def calculate(self, operator):

a = float(self.numberEdit1.text())

b = float(self.numberEdit2.text()) if operator == '+': c = a + b

elif operator == '-': c = a - b

(38)

elif operator == '*': c = a * b else: c = a / b

self.resultEdit.setText(str(c)) def addButtonClick(self):

self.calculate('+')

def substractButtonClick(self):

self.calculate('-') def mulButtonClick(self):

self.calculate('*') def divButtonClick(self):

self.calculate('/') if __name__ == '__main__':

a = QApplication(sys.argv)

form = MainForm() form.show()

a.exec_()

2. KELAS QTEXTEDIT

Kelas QTextEdit berfungsi untuk memasukkan data teks yang jumlahnya lebih dari satu baris. Metode yang dapat digunakan dalam QTextEdit adalah setDocument() untuk mengisi teks ke dalam control dan method document() untuk mengambil teks dalam control. Dalam dokumen control QTextEdit bertipe QTextDocument, yang dapat dikonversi ke string menggunakan metode toPlainText(). Untuk contoh penggunaan kelas QTextEdit tuliskanlah kode program ini ke dalam computer anda.

#########################################################

# Nama file: DemoQTextEdit.py

#########################################################

import sys

from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * class MainForm(QWidget):

def __init__(self):

super().__init__() self.setupUi()

def setupUi(self):

(39)

self.resize(400, 200) self.move(300, 300)

self.setWindowTitle('Demo QTextEdit')

self.label1 = QLabel()

self.label1.setText('No. HP') self.phoneEdit = QLineEdit()

vbox1 = QVBoxLayout()

vbox1.addWidget(self.label1) vbox1.addWidget(self.phoneEdit)

self.label2 = QLabel()

self.label2.setText('Pesan') self.messageEdit = QTextEdit() vbox2 = QVBoxLayout()

vbox2.addWidget(self.label2)

vbox2.addWidget(self.messageEdit)

vbox3 = QVBoxLayout() vbox3.addLayout(vbox1) vbox3.addLayout(vbox2)

self.sendButton = QPushButton('&Kirim SMS') self.cancelButton = QPushButton('&Batal') hbox = QHBoxLayout()

hbox.addStretch()

hbox.addWidget(self.sendButton) hbox.addWidget(self.cancelButton)

layout = QVBoxLayout() layout.addLayout(vbox3) horizontalLine = QFrame();

horizontalLine.setFrameShape(QFrame.HLine) horizontalLine.setFrameShadow(QFrame.Sunken) layout.addWidget(horizontalLine)

layout.addLayout(hbox) self.setLayout(layout) if __name__ == '__main__':

a = QApplication(sys.argv)

form = MainForm() form.show()

a.exec_()

3. KELAS QRADIOBUTTON DAN QCHECKBOX

(40)

Untuk menampilkan control yang diigunakan sebagai pilihan, anda dapat menggunakan kelas QRadioButton atau QCheckBox. Beberapa metode yang digunakan dalam QRadioButton adalah sebgai berikut.

Metode Fungsi

isChecked() Memberikan nilai true jika control radio button aktof

seticon() Menampilkan gambar icon pada rkontrol radio button

setText() Memasukkan teks ke dalam control setChecked() Mengaktifkan control radio button

Sedangkan signal yang sering digunakan dalam kelas QRadioButton adalah sebagai berikut.

Metode Fungsi

toggled() Aktivasi saat control radio button berubah

clicked() Aktivasi saat user melakukan klik pada control radio button

Untuk contoh control penggunaan QRadioButton tuliskan kode profram berikut pada computer anda.

#########################################################

# Nama file: DemoQRadioButton.py

#########################################################

import sys

from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * class MainForm(QWidget):

def __init__(self):

super().__init__() self.setupUi()

def setupUi(self):

self.resize(400, 150) self.move(300, 300)

self.setWindowTitle('Demo QRadioButton')

self.label1 = QLabel()

(41)

self.label1.setText('Bilangan pertama') self.numberEdit1 = QLineEdit()

self.label2 = QLabel()

self.label2.setText('Bilangan kedua') self.numberEdit2 = QLineEdit()

grid = QGridLayout()

grid.addWidget(self.label1, 0, 0) grid.addWidget(self.numberEdit1, 0, 1) grid.addWidget(self.label2, 1, 0) grid.addWidget(self.numberEdit2, 1, 1)

self.addRadio = QRadioButton() self.addRadio.setText('&Tambah') self.addRadio.setChecked(True)

self.substractRadio = QRadioButton() self.substractRadio.setText('&Kurang') self.mulRadio = QRadioButton()

self.mulRadio.setText('K&ali') self.divRadio = QRadioButton() self.divRadio.setText('&Bagi') hbox = QHBoxLayout()

hbox.addWidget(self.addRadio)

hbox.addWidget(self.substractRadio) hbox.addWidget(self.mulRadio)

hbox.addWidget(self.divRadio)

self.resultLabel = QLabel('<b>Hasil penjumlahan: </b>')

self.calculateButton = QPushButton('Hitung')

layout = QVBoxLayout() layout.addLayout(grid) layout.addLayout(hbox)

layout.addWidget(self.resultLabel) layout.addWidget(self.calculateButton) layout.addStretch()

self.setLayout(layout)

self.addRadio.clicked.connect(

lambda: self.resultLabel.setText('<b>Hasil penjumlahan: </b>'))

self.substractRadio.clicked.connect(

lambda: self.resultLabel.setText('<b>Hasil pengurangan: </b>'))

self.mulRadio.clicked.connect(

lambda: self.resultLabel.setText('<b>Hasil perkalian:

</b>'))

self.divRadio.clicked.connect(

lambda: self.resultLabel.setText('<b>Hasil pembagian:

</b>'))

(42)

self.calculateButton.clicked.connect(self.calculateButtonClick )

def calculateButtonClick(self):

a = float(self.numberEdit1.text()) b = float(self.numberEdit2.text())

if self.addRadio.isChecked(): c = a + b

elif self.substractRadio.isChecked(): c = a - b elif self.mulRadio.isChecked(): c = a * b

else: c = a / b

index = str(self.resultLabel.text()).index(':') s = str(self.resultLabel.text())[:index+1]

self.resultLabel.setText('%s %.2f %s' % (s, c, '</b>')) if __name__ == '__main__':

a = QApplication(sys.argv)

form = MainForm() form.show()

a.exec_()

Sedangkan metode yang sering digunakan untuk Kelas QCheckBox adalah sebagai berikut.

Metode Fungsi

isChecked() Memberikan nilai true jika control check box button aktof

seticon() Menampilkan gambar icon pada kontrol check box

setText() Memasukkan teks ke dalam control setChecked() Mengaktifkan control check box

Tuliskan kode program berikut pada computer anda untuk contoh implementasi dari check box.

#########################################################

# Nama file: DemoQCheckBox.py

#########################################################

import sys

from PyQt5.QtGui import * from PyQt5.QtCore import *

(43)

from PyQt5.QtWidgets import * class MainForm(QWidget):

def __init__(self):

super().__init__() self.setupUi()

def setupUi(self):

self.resize(300, 100) self.move(300, 300)

self.setWindowTitle('Demo QCheckBox')

self.label = QLabel()

self.label.setText('Tentukan pilihan Anda:')

self.perlCheck = QCheckBox()

self.perlCheck.setText('Perl') self.pythonCheck = QCheckBox()

self.pythonCheck.setText('Python') self.rubyCheck = QCheckBox()

self.rubyCheck.setText('Ruby') self.phpCheck = QCheckBox() self.phpCheck.setText('PHP') hbox1 = QHBoxLayout()

hbox1.addWidget(self.perlCheck) hbox1.addWidget(self.pythonCheck) hbox1.addWidget(self.rubyCheck) hbox1.addWidget(self.phpCheck)

self.okButton = QPushButton('&OK') self.exitButton = QPushButton('Keluar') hbox2 = QHBoxLayout()

hbox2.addStretch()

hbox2.addWidget(self.okButton) hbox2.addWidget(self.exitButton)

layout = QVBoxLayout()

layout.addWidget(self.label) layout.addLayout(hbox1) horizontalLine = QFrame();

horizontalLine.setFrameShape(QFrame.HLine) horizontalLine.setFrameShadow(QFrame.Sunken) layout.addWidget(horizontalLine)

layout.addLayout(hbox2) layout.addStretch() self.setLayout(layout)

self.okButton.clicked.connect(self.okButtonClick) self.exitButton.clicked.connect(self.close)

def okButtonClick(self):

(44)

choices = []

if self.perlCheck.isChecked(): choices.append('Perl')

if self.pythonCheck.isChecked():

choices.append('Python')

if self.rubyCheck.isChecked(): choices.append('Ruby') if self.phpCheck.isChecked(): choices.append('PHP')

QMessageBox.information(self, 'Informasi', repr(choices))

if __name__ == '__main__':

a = QApplication(sys.argv)

form = MainForm() form.show()

a.exec_()

4. KELAS QCOMBOBOX DAN QFONTCOMBOBOX

Kelas QComboBox digunakan untuk menampilkan combo box pada GUI. Daftar metode yang sering digunakan dalam kelasQComboBox adalah sebagai berikut.

Metode Fungsi

setItemText() Mengubah text untuk pilihan dalam control QComboBox

removeItem() Menghapus item dalam

kontrolQComboBox

Clear() Menghapus semua item dalam

QComboBox

currentText() Mendapoatkan text dalam item yang sedang aktif

setCurrentIndex() Mengaktifkan item pada control ke indeks tertentu

Count() Mendapatkan jumlah item dalam control QComboBox

setMaxCount()

Menentukan jumlah item maksimum yang dapat dimasukkan dalam kontrolQComboBox

setEditable()

Menentukan text pada

kontrolQComboBox dapat dirubah atau tidak

addItem() Menambah satu item ke dalam control QComboBox

(45)

addItems() Menambahkan beberapa item ke dalam control QComboBox

itemText() Mendapatkan text item yang berada pada indeks tertentu

currentIndex() Mendapatkan indeks dari item yang sedang aktif

Untuk implementasi kelas dan control QComboBox tulislah kode program berikut pada computer anda!

#########################################################

# Nama file: DemoQComboBox.py

#########################################################

import sys

from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * class MainForm(QWidget):

def __init__(self):

super().__init__() self.setupUi()

def setupUi(self):

self.resize(300, 100) self.move(300, 300)

self.setWindowTitle('Demo QComboBox')

self.combo = QComboBox() for i in range(1,11):

self.combo.addItem('Item ke-%d' % i)

self.getTextButton = QPushButton('Ambil Teks')

layout = QVBoxLayout()

layout.addWidget(self.combo)

layout.addWidget(self.getTextButton) layout.addStretch()

self.setLayout(layout)

self.getTextButton.clicked.connect(self.getTextButtonClick)

def getTextButtonClick(self):

QMessageBox.information(self, 'Informasi', 'Anda memilih: ' + self.combo.currentText())

(46)

if __name__ == '__main__':

a = QApplication(sys.argv)

form = MainForm() form.show()

a.exec_()

Sedangkan kelas QFontComboBox merupakan turunan dari kelas QComboBox, yang digunakan secara khusus untuk menampilkan jenis font yang ada. Contoh implementasi kelas QTextComboBox adalah sebagai berikut!

#########################################################

# Nama file: DemoQFontComboBox.py

#########################################################

import sys

from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * class MainForm(QWidget):

def __init__(self):

super().__init__() self.setupUi()

def setupUi(self):

self.resize(300, 100) self.move(300, 300)

self.setWindowTitle('Demo QFontComboBox')

self.fontCombo = QFontComboBox() self.fontCombo.setEditable(False)

self.label = QLabel('Contoh Teks')

self.label.setFont(QFont('DejaVu Sans',18))

layout = QVBoxLayout()

layout.addWidget(self.fontCombo) layout.addWidget(self.label) layout.addStretch()

self.setLayout(layout)

self.fontCombo.activated.connect(self.fontComboActivated)

def fontComboActivated(self):

self.label.setFont(

QFont(self.fontCombo.currentText(), 18)

(47)

)

if __name__ == '__main__':

a = QApplication(sys.argv)

form = MainForm() form.show()

a.exec_()

5. KELAS QSPINBOX

Kelas QSpinBox digunakan untuk memasukkan tipe bilangan bulat. Kelas ini memungkinkan pengguna memasukkan inlai secara manual ataupuan dengan menggunakan tombol yang tersedia pad akelas control ini. Beberapa metode yang dapat digunakan pad akelas QSpinBox adalah sebagai berikut.

Metode Fungsi

setMinimum() Menentukan nilai minimum yang dapt dityampilkan

setMaximum() Menentukan nilai maksimum yang dpat ditampilkan

value() Mengambil nilai yang sedang aktif pada kontrolQSpinBox

setValue() Mengubah nilai yang sedang akti pad akontrol QSpinBox

setRange() Menentukan range nilai yang dapat ditampilkamn p[ada control QSpinBox setSingleStep() Menentukan selisih dari nilai sebelumnya

atau nilai berikutnya

Tuliskan kode program berikut pada konputer anda untuk membuat kelas QSpinBox.

#########################################################

# Nama file: DemoQSpinBox.py

#########################################################

import sys

from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * class MainForm(QWidget):

def __init__(self):

(48)

super().__init__() self.setupUi()

def setupUi(self):

self.resize(300, 100) self.move(300, 300)

self.setWindowTitle('Demo QSpinBox')

self.fontLabel = QLabel('Jenis huruf') self.fontCombo = QFontComboBox()

self.fontCombo.setEditable(False)

self.sizeLabel = QLabel('Ukuran huruf') self.sizeSpinBox = QSpinBox()

self.sizeSpinBox.setRange(8,20) self.sizeSpinBox.setSingleStep(1) self.sizeSpinBox.setValue(18)

self.sampleLabel = QLabel('Contoh Teks')

self.sampleLabel.setFont(QFont('DejaVu Sans',18))

layout = QGridLayout()

layout.addWidget(self.fontLabel, 0, 0) layout.addWidget(self.fontCombo, 0, 1) layout.addWidget(self.sizeLabel, 1, 0) layout.addWidget(self.sizeSpinBox, 1, 1)

layout.addWidget(self.sampleLabel, 2, 0, 1, 2) #layout.addStretch()

self.setLayout(layout)

self.fontCombo.activated.connect(self.changeFont) self.sizeSpinBox.valueChanged.connect(self.changeFont)

def changeFont(self):

self.sampleLabel.setFont(

QFont(self.fontCombo.currentText(), self.sizeSpinBox.value())

)

if __name__ == '__main__':

a = QApplication(sys.argv)

form = MainForm() form.show()

a.exec_()

6. KELAS QDATEEDIT, QTIMEEDIT, DAN QDATETIMEEDIT

Referensi

Dokumen terkait

Telah diserahkan perkara penagihannya kepada Pengadilan Negeri atau instansi pemerintah yang menangani piutang negara; atau adanya perjanjian tertulis mengenai

Berdasarkan hasil pengamatan dan perhitungan yang dilakukan pada sampel yang diteliti dalam 6 periode pengamatan, telah dihasilkan bahwa jumlah kejadian Missfile pada

Anda juga akan menerima Bukti Penerimaan Negara (BPN) yang akan dikirim ke akun SIMPONI dan emaii anda. Simpanlah Tanda Bukti Setor/struk/BPN untuk dipergunakan

Karena pelaksanaan audit investigatif atas kecurangan berhubungan dengan hak-hak individual pihak-pihak lainnya, maka audit investigatif harus dilakukan setelah

Akan tetapi mempunyai beberapa perbedaan yaitu bentuk penyampaian soal yang ada diaplikasi, objek, pokok bahasan tentang pengenalan Asmaul Husna, aplikasi yang

Agrobacterium-perantara transformasi genetika merupakan teknologi yang paling banyak digunakan untuk mengekspresikan protein rekombinan (yang dikode dari DNA hasil rekayasa

Salah satu upaya untuk mengembalikan kekuatan otot dan keadaan normal dengan melakukan senam nifas.Tujuan penelitian: untuk mengetahui kekuatan otot perut post

Hasil penelitian memperlihatkan bahwa peningkatan umur defoliasi dari 30 menjadi 45 dan 60 hari pada rumput gajah umur dua tahun mengakibatkan peningkatan hasil hijauan segar,