Cara Membuat Text Editor Python PyQt5 – pesonainformatika.com, halo halo, belajar bahasa pemrograman python lagi, kita upgrade pengetahuan kita, sama seperti pembahasan sebelumnya kita akan belajar bagaimana cara membuat aplikasi desktop menggunakan library PyQt5.
pada studi kasus kali ini kita akan belajar membuat aplikasi text editor sederhana menggunakan python dengan library PyQt5, untuk instalasi dan setup virtual environtment bisa dilihat di postingan sebelumnya.
Seperti Apa Project yang Kita Buat
dalam kasus ini kita akan membuat text editor mirip notepad jika kamu menggunakan windows, atau mirip GNOME Text Edit (Linux), mengapa memilih project ini..?, seperti yang kita tau bahwa text editor selalu ada di setiap sistem operasi, baik itu komputer, android, IOS dan masih banyak lagi, project ini bisa jadi penyemangat buat yang suka ngoding.
Persiapan Project
ada beberapa persiapan sebelum membuat project ada beberapa hal yang harus dipersiapkan seperti
- Membuat Virtual Environtment Project
- Instalasi PyQt5
Membuat Virtual Environtment
kita bisa membuat virtual environtment menggunakan 2 cara yaitu menggunakan virtualenv dan menggunakan python langsung berikut caranya
python3 -m venv text_edit_env
virtualenv -p python3 text_edit_env
setelah terinstall jika menggunakan windows aktifkan dengan perintah
\text_edit_env\Scripts\activate.bat
jika menggunakan linux aktivkan dengan perintah
source ./text_edit_env/bin/activate
Instalasi PyQt5
kita dapat instal dengan mudah menggunakan pip dengan perintah
pip install PyQt5
atau bisa lihat di website pypi untuk perintah instalasinya
Membuat Text Editor
setelah melakukan beberapa persiapan untuk membuat project sekarang kita membuat file python misal bernama main.py, kemudian import modul yang dibutuhkan
import sys
# import module from pyqt
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QHBoxLayout
from PyQt5.QtWidgets import QTextEdit, QLabel, QShortcut, QFileDialog, QMessageBox
from PyQt5.QtGui import QKeySequence
from PyQt5 import Qt
selanjutnya kita membuat class untuk konfigurasi window pada aplikasi kita
class Window(QWidget):
def __init__(self):
super().__init__()
selanjutnya kita inisialisasi path file yang aakn kita gunakan untuk menentukan file yang dibuka, kita buat di bawah fungsi def __init__(self)
self.file_path = None
selanjutnya kita buat konfigurasi shortcut untuk membuka file dan menyimpan file buat dalam fungsi def __init__(self)
""" config shortcut """
# open new file shortcut
self.open_new_file_shortcut = QShortcut(QKeySequence('Ctrl+O'), self)
self.open_new_file_shortcut.activated.connect(self.open_new_file)
# save current file shortcut
self.save_current_file_shortcut = QShortcut(QKeySequence('Ctrl+S'), self)
self.save_current_file_shortcut.activated.connect(self.save_current_file)
selanjutnya kita konfigurasi window dan setting text editor area
""" Configure Window for App """
vbox = QVBoxLayout()
window_title_text = 'Untitled File'
self.title = QLabel(window_title_text)
self.title.setWordWrap(True)
self.title.setAlignment(Qt.Qt.AlignCenter)
vbox.addWidget(self.title)
self.setLayout(vbox)
# text editor area
self.scrollable_text_area = QTextEdit()
vbox.addWidget(self.scrollable_text_area)
sekarang kita tentu membutuhkan sebuah fungsi untuk membuka file, agar saat kita menekan sebuah shortcut bisa seperti text editor
# function to open new file
def open_new_file(self):
self.file_path, filter_type = QFileDialog.getOpenFileName(self, "Open New File", "", "All Files (*)")
if self.file_path:
with open(self.file_path, 'r') as f:
file_content = f.read()
self.title.setText(self.file_path)
self.scrollable_text_area.setText(file_content)
else:
self.invalid_path_alert_message()
kemudian kita buat fungsi untuk menyimpan file yang sudah di edit menggunakan aplikasi kita
# function to save current file
def save_current_file(self):
if not self.file_path:
new_file_path, filter_type = QFileDialog.getOpenFileName(self, "Save this file as..", "", "All Files (*)")
if new_file_path:
self.file_path = new_file_path
else:
self.invalid_path_alert_message()
return False
file_contents = self.scrollable_text_area.toPlainText()
with open(self.file_path,'w') as f:
f.write(file_contents)
self.title.setText(self.file_path)
nah satu langkah lagi kita konfigurasi window popup agar ketika kita mengeklik tombol silang untuk exit akan muncul popup peringatan untuk menyimpan file
# function to handle closeed application warning
def closeEvent(self, event):
messageBox = QMessageBox()
title = "Exit Application"
message = """ "WARNING !!\n\nIf you quit without saving, any changes made to the file
will be lost.\n\nSave file before quitting?"""
reply = messageBox.question(self, title, message, messageBox.Yes | messageBox.No | messageBox.Cancel, messageBox.Cancel)
if reply == messageBox.Yes:
return_value = self.save_current_file()
if return_value == False:
event.ignore()
elif reply == messageBox.No:
event.accept()
else:
event.ignore()
selanjutnya kita handle error yang akan muncul
def invalid_path_alert_message(self):
messageBox = QMessageBox()
messageBox.setWindowTitle("Invalid File, Please select a valid file")
messageBox.exec()
nah terakhir kita buat agar aplikasi kita bisa dijalankan
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
window.showMaximized()
sys.exit(app.exec_())
jika kita jalankan maka hasilnya akan seperti ini
Final Code
berikut adalah source code studi kasus pada materi pembahasan kali ini
import sys
# import module from pyqt
from PyQt5.QtWidgets import QWidget, QApplication, QVBoxLayout, QHBoxLayout
from PyQt5.QtWidgets import QTextEdit, QLabel, QShortcut, QFileDialog, QMessageBox
from PyQt5.QtGui import QKeySequence
from PyQt5 import Qt
# setting window for application
class Window(QWidget):
def __init__(self):
super().__init__()
self.file_path = None
""" config shortcut """
# open new file shortcut
self.open_new_file_shortcut = QShortcut(QKeySequence('Ctrl+O'), self)
self.open_new_file_shortcut.activated.connect(self.open_new_file)
# save current file shortcut
self.save_current_file_shortcut = QShortcut(QKeySequence('Ctrl+S'), self)
self.save_current_file_shortcut.activated.connect(self.save_current_file)
""" Configure Window for App """
vbox = QVBoxLayout()
window_title_text = 'Untitled File'
self.title = QLabel(window_title_text)
self.title.setWordWrap(True)
self.title.setAlignment(Qt.Qt.AlignCenter)
vbox.addWidget(self.title)
self.setLayout(vbox)
# text editor area
self.scrollable_text_area = QTextEdit()
vbox.addWidget(self.scrollable_text_area)
# function to open new file
def open_new_file(self):
self.file_path, filter_type = QFileDialog.getOpenFileName(self, "Open New File", "", "All Files (*)")
if self.file_path:
with open(self.file_path, 'r') as f:
file_content = f.read()
self.title.setText(self.file_path)
self.scrollable_text_area.setText(file_content)
else:
self.invalid_path_alert_message()
# function to save current file
def save_current_file(self):
if not self.file_path:
new_file_path, filter_type = QFileDialog.getOpenFileName(self, "Save this file as..", "", "All Files (*)")
if new_file_path:
self.file_path = new_file_path
else:
self.invalid_path_alert_message()
return False
file_contents = self.scrollable_text_area.toPlainText()
with open(self.file_path,'w') as f:
f.write(file_contents)
self.title.setText(self.file_path)
# function to handle closeed application warning
def closeEvent(self, event):
messageBox = QMessageBox()
title = "Exit Application"
message = """ "WARNING !!\n\nIf you quit without saving, any changes made to the file
will be lost.\n\nSave file before quitting?"""
reply = messageBox.question(self, title, message, messageBox.Yes | messageBox.No | messageBox.Cancel, messageBox.Cancel)
if reply == messageBox.Yes:
return_value = self.save_current_file()
if return_value == False:
event.ignore()
elif reply == messageBox.No:
event.accept()
else:
event.ignore()
def invalid_path_alert_message(self):
messageBox = QMessageBox()
messageBox.setWindowTitle("Invalid File, Please select a valid file")
messageBox.exec()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
window.showMaximized()
sys.exit(app.exec_())
semoga bermanfaat dan mencoba, ikuti studi kasus lainya di pesonainformatika ada beberapa bahasa pemrograman lainya seperti Java, Python C++
people who use linux and people who are friendly