Anda di halaman 1dari 10

Laporan Praktikum

Algoritma dan Pemrograman


PyQt5: Layout

Asisten :
Fahri Dwi Hariyadi 11211037

Ghina Suhaimah Amin 12221059

Disusun Oleh :
Zain Achmad Kahfi 05221022

Iqbal Fahrian 03221053

Andi Mahdia Ainia 05221038

Josi Masjaya R. 05221005

Ragil Siratramdani 08221022


Alfandi Yusuf Prabowo 03221004

15 Mei 2023
Dasar Teori

Pada minggu ini kami praktikum modul 13 yang berjudul PyQt5 : LayOut. Tujuan
dilakukannya praktikum modul ini yaitu praktikan diharapkan mampu menggunakan layout pada
PyQt5.
CORELAP (Computerized Relationship Layout Technique) yaitu salah satu dari algoritma
konstruksi yang menentukan penyusunan tata letak yang setiap departemen prinsip kerjanya
menggunakan perhitungan TCR (Total Closeness Rating). TCR merupakan jumlah nilai-nilai
numerik yang menyatakan hubungan kedekatan antardepartemen. Hubungan ini terlihat dari
huruf masing- masing yang telah diberi bobot. Bobot kedekatan yang digunakan yaitu:
A = 6 (Mutlak harus dekat)
B = 5 (Sangat penting didekatkan) I = 4 (Penting didekatkan)
O = 3 (Dapat didekatkan)
U = 2 (Tidak penting didekatkan) X = 1 (Dihindari untuk didekatkan)

Termasuk hal yang penting dalam pemrograman berbasis GUI adalah managemen layout.
Managemen layout adalah suatu teknik atau cara bagaimana kita meletakkan widget-widget di
atas window. Managemen layout tersebut bisa dilakukan dengan dua cara: dengan absolute
positioning atau layout classes[1].
• Absolute Positioning
Yaitu dengan cara kita mendefinisikan widget-widget dengan koordinat-koordinat absolute
secara manual. Kita bisa menempatkan tombol di koordinat tertentu, lalu menempatkan widget
lain di koordinat yang lain. Akan tetapi, dengan absolute positioning, ada beberapa kekurangan
yang harus kita ketahui terlebih dahulu [2]. Ukuran dan posisi dari widget tidak akan berpindah
dan berubah apa bila ukuran window berubah.Penampilan aplikasi kemungkinan besar akan
berbeda di platform yang berbeda. Jika kita mengganti font, itu bisa merusak/mengganggu
kesuluruhan penampilan layout. Jika kita berkeinginan untuk mengubah tampilan layout, maka
kita perlu mengubah satu-persatu widget yang ada pada layout. Dan ini akan menghabiskan waktu
serta tenaga yang banyak.

Layout Classes
Dengan menggunakan kelas layout, memanajemen layout pada window jadi lebih mudah dan
praktis. Ini adalah cara yang direkomendasikan. Management layout pada PySide yang paling
dasar adalah dengan menggunakan kelas PySide.QtGui.QHBoxLayout dan QtGui.QVBoxLayout.
Keduanya menatawidget secara horizontal dan vertikal di window.

Box Layout
Kelas Pyside.QtGui.QBoxLayout menempatkan widget-widget pada window secara horizontal
atau secara vertikal [4]. Ia mengambil ruang kosong dari parent layout, lalu membagi-baginya
menjadi kotak-kotak, dan tiap kotak-kotak tersebut akan diisi oleh widget.
1
2
Source Code

No. Kalku.py

1. import sys

2. from functools import partial

3. from PyQt5.QtCore import Qt

4. from PyQt5.QtWidgets import QGridLayout

5. from PyQt5.QtWidgets import QPushButton

6. from PyQt5.QtWidgets import QVBoxLayout

7. from PyQt5.QtWidgets import QMainWindow

8. from PyQt5.QtWidgets import QWidget

9. from PyQt5.QtWidgets import QLineEdit

10. from PyQt5.QtWidgets import QApplication

11. class CalcUI(QMainWindow):

12. def init (self):

13. super(). init ()

14. self.setWindowTitle("Kalkulator")

15. self.setFixedSize(300, 300)

16. self.generalLayout = QVBoxLayout()

17. self._centralWidget = QWidget(self)

18. self.setCentralWidget(self._centralWidget)

19. self._centralWidget.setLayout(self.generalLayout)

20. self._createDisplay()

21. self._createButton()

22. def _createDisplay(self):

23. self.display = QLineEdit()

24. self.display.setFixedHeight(35)

25. self.display.setAlignment(Qt.AlignRight)

26. self.display.setReadOnly(True)

3
27. self.generalLayout.addWidget(self.display)

28. def _createButton(self):

29. self.buttons = {}

30. buttonsLayout = QGridLayout()

31. buttons = {'7': (0, 0), '8': (0, 1), '9':

32. (0, 2), '/': (0, 3), 'C': (0, 4), '4': (1, 0), '5': (1,
1), '6': (1, 2), '*': (1, 3), '(': (1, 4), '1': (2,

33. (2, 1), '3': (2, 2), '-': (2, 3), ')': (2, 4), '0': (3,
0), '00': (3, 1),'.': (3, 2), '+': (3, 3), '=': (3,

34.

35. for btnText, position in buttons.items():

36. self.buttons[btnText] = QPushButton(btnText)

37. self.buttons[btnText].setFixedSize(40, 40)

38. buttonsLayout.addWidget(self.buttons[btnText],

39. position[0], position[1])

40.

41. self.generalLayout.addLayout(buttonsLayout)

42. def setDisplayText(self, text):

43. self.display.setText(text)

44. self.display.setFocus()

45. def displayText(self):

46. return self.display.text()

47. def clearDisplay(self):

48. self.setDisplayText('')

49.

50. class CalcController:

51. def init (self, model, views):

52. self._views = views


53. self._evaluate = model

54. self._connectSignals()

55. def _calculateResult(self):

56. result =
self._evaluate(expression=self._views.displayText())

57. self._views.setDisplayText(result)

58. def _buildExpression(self, sub_exp):

4
59. if self._views.displayText() == ERROR_MSG:

60. self._views.clearDisplay()

61. expression = self._views.displayText() + sub_exp

62. self._views.setDisplayText(expression)

63. def _connectSignals(self):

64. for btnText, btn in self._views.buttons.items():

65. if btnText not in {'=': 'C'}:

66. btn.clicked.connect(partial(self._buildExpression,
btnText))

67.

68.
self._views.buttons['='].clicked.connect(self._calculateResult)

69.

70.
self._views.display.returnPressed.connect(self._calculateResult)

71.
self._views.buttons['C'].clicked.connect(self._views.clearDisplay)

72.

73. ERROR_MSG = 'Errors'

74. def evaluateExpressionModel(expression):

75. try:

76. result = str(eval(expression, {}, {}))

77. except Exception:

78. result = ERROR_MSG

79. return result

80.

81. def main():

82. pycalc = QApplication(sys.argv)

83. views = CalcUI()

84. views.show()

85. model = evaluateExpressionModel

86. CalcController(model=model, views=views)


87.
88. sys.exit(pycalc.exec_())

89. if name == ' main ':

90. main()

5
Screenshot
1. Tampilan awal program, ketika user menjalankan program, program akan menampilkan layout kalkulator yang
siap digunakan.

Tampilan program, ketika user mengkalkulasi angka maka program akan memproses perhitungan tersebut
dan menghasilkansebuah hasil sebagai berikut.

6
Pembahasan
Kalkulator.py
No. Penjelasan

1-10 Import modul yang dibutuhkan untuk program kalkulator sederhana

11-13 Membuat class Bernama CalcUI yang akan berisi layout aplikasi kalkulator

14-15 Membuat konfrgurasi windows

16-19 Konfigurasi widget dan layout untuk setiap widget

20-21 Membuat tampilan layer display dan tombol

22-27 Membuat fungsi untuk menampilkan layar display pada kalkulator

28-41 Membuat fungsi untuk menampilkan tombol (button) yang umum tersedia pada kalkulator

42-49 Program untuk menampilkan input berupa tombol yang di klik oleh user ke output pada
display

50-54 Membuat class Bernama CalcController yang akan berisi operasi matematika serta
koneksi antar class

55-62 Menjalankan fungsi untuk menampilkan hasil pada display

63-72 Konektivitas antara button dan display

73-80 Program yang menjalankan fungsi error handling

81-90 Definisi terhadap fungsi agar program dapat dijalankan

7
Kesimpulan
Adapun kesimpulan yang dapat diperoleh dalam praktikum Algoritman dan Pemrograman yaitu, PyQt merupakan
suatu lintasan GUI perangkat Qt yang mengikat Python, dan diimplementasikan sebagai plug-in. Selain itu, PyQt
juga menyediakan sejumlah widget seperti tombol, label, textbox dan lain lain yang diperlukan untuk merancang
sebuah GUI. PyQt5 memiliki istilah widget yang digunakan Qt sebagai objek antarmuka utama. Pengguna dapat
berinteraksi langsung dengan antarmuka pengguna grafis melalui widget yang disediakan oleh PyQt5. Antarmuka
dapat terdiri dari beberapa widget yang dipasang di jendela utama. PyQt5 memiliki metode untuk penempatan
widget secara otomatis yang disebut layout. Ada berbagai jenis layout, seperti horizontal, vertikal, dan grid.
Pengaturan widget dapat dioptimalkan menggunakan tata letak.

Saran
Saran saya adalah agar kakak asdos serta asprak tetap semangat dalam menjalankan
amanahnya mengajari kami mengenai pemrograman. Mohon maaf apabila selama praktikum
kami ada kesalahan dan terimakasih telah mengajari kami para praktikan. Sekian terimakasih.

8
Daftar Pustaka

Huda, N. (2017, September). Management Layout Pada PySide. Retrieved from jagongoding:
https://jagongoding.com/python/pyside/management-layout-pada-pyside/

Anda mungkin juga menyukai