From 42c29bbb461a9f9ba5bc2a47ac6270ec32abbcd3 Mon Sep 17 00:00:00 2001 From: Josep Marcello <13519164@std.stei.itb.ac.id> Date: Tue, 20 Apr 2021 20:05:15 +0000 Subject: [PATCH] File input dialog --- src/app/ui/file_input_dialog.py | 48 +++++++++++++++++++++++++++ src/app/ui/tambah_acara_ui.py | 58 +++++++++++++++++++++------------ 2 files changed, 86 insertions(+), 20 deletions(-) create mode 100644 src/app/ui/file_input_dialog.py diff --git a/src/app/ui/file_input_dialog.py b/src/app/ui/file_input_dialog.py new file mode 100644 index 0000000..7d0f403 --- /dev/null +++ b/src/app/ui/file_input_dialog.py @@ -0,0 +1,48 @@ +from PyQt5 import QtWidgets + + +class FileInput(QtWidgets.QWidget): + def __init__(self): + super().__init__() + self.title = 'Masukkan file-file gambar Anda' + self.left = 10 + self.top = 10 + self.width = 640 + self.height = 480 + + def spawn(self, multiple: bool): + self.setWindowTitle(self.title) + self.setGeometry(self.left, self.top, self.width, self.height) + if multiple: + files = self.openFileNamesDialog() + else: + files = self.openFileNameDialog() + + self.show() + + return files + + def openFileNameDialog(self): + options = QtWidgets.QFileDialog.Options() + options |= QtWidgets.QFileDialog.DontUseNativeDialog + fileName, _ = QtWidgets.QFileDialog.getOpenFileName( + self, + "QFileDialog.getOpenFileName()", + "", + "All Files (*);;Python Files (*.py)", + options=options) + if fileName: + print(fileName) + + def openFileNamesDialog(self): + options = QtWidgets.QFileDialog.Options() + options |= QtWidgets.QFileDialog.DontUseNativeDialog + files, _ = QtWidgets.QFileDialog.getOpenFileNames( + self, + self.title, + "", + "Semua File (*);;File Gambar (*.png *.jpg *.jpeg)", + options=options) + + if files: + return files diff --git a/src/app/ui/tambah_acara_ui.py b/src/app/ui/tambah_acara_ui.py index 9936164..a1c465f 100644 --- a/src/app/ui/tambah_acara_ui.py +++ b/src/app/ui/tambah_acara_ui.py @@ -2,6 +2,8 @@ from PyQt5 import uic, QtWidgets, QtGui, QtCore import sys, os from app.modules.tambah_acara import tambah_acara from app.db import init_db +from file_input_dialog import FileInput + class TambahAcaraWindow(QtWidgets.QMainWindow): def __init__(self, conn, id_penyelenggara, id_acara=None): @@ -12,7 +14,8 @@ class TambahAcaraWindow(QtWidgets.QMainWindow): - kuota_pendaftar: int - waktu: datetime (year, month, date, hour, minute) - harga: int - - kategori: list[str], nilai yang boleh: Teknologi, Motivasi, Ekonomi, Kompetisi + - kategori: list[str], nilai yang boleh: Teknologi, Motivasi, + Ekonomi, Kompetisi - foto: list[bytes] isi file foto - link: str - syarat: str @@ -47,7 +50,11 @@ class TambahAcaraWindow(QtWidgets.QMainWindow): self.__get_data_from_db(data_acara=data_acara, cur=cur) self.__current_image_counter = 0 - self.__photos = list() if data_acara['foto'] is None else data_acara['foto'] + self.__photos =\ + list() if data_acara['foto'] is None else data_acara['foto'] + # self.__penyelenggara = data_acara['id_penyelenggara'] # ga boleh None + self.__penyelenggara = 1 + self.__id_acara = data_acara['id_acara'] # setting default image self.__default_img = QtGui.QImage() @@ -86,11 +93,12 @@ class TambahAcaraWindow(QtWidgets.QMainWindow): data_acara['kategori'].append(kategori[0]) def __set_image(self): - self.image.setPixmap( - QtGui.QPixmap.fromImage( - self.__photos[self.__current_image_counter] - ) - ) + if len(self.__photos) == 0: + self.image.setPixmap(QtGui.QPixmap.fromImage(self.__default_img)) + else: + self.image.setPixmap( + QtGui.QPixmap.fromImage( + self.__photos[self.__current_image_counter])) def __next_image(self): try: @@ -113,10 +121,7 @@ class TambahAcaraWindow(QtWidgets.QMainWindow): Fungsi untuk mengisi form data, foto, serta kategori acara ''' # Ngeset foto - if data_acara['foto'] is None: - self.image.setPixmap(QtGui.QPixmap.fromImage(self.__default_img)) - else: - self.__set_image + self.__set_image() # Ngeset isi form if data_acara['nama_acara'] is not None: @@ -127,7 +132,9 @@ class TambahAcaraWindow(QtWidgets.QMainWindow): self.input_waktu.setMinimumDateTime(QtCore.QDateTime.currentDateTime()) if data_acara['waktu'] is not None: - # ex: self.input_waktu.setDateTime(datetime.strptime('2100-05-12 23:59', '%Y-%m-%d %H:%M')) + # ex: + # self.input_waktu.setDateTime( + # datetime.strptime('2100-05-12 23:59', '%Y-%m-%d %H:%M')) # asumsi udah pasti date time self.input_waktu.setDateTime(data_acara['waktu']) else: @@ -140,8 +147,7 @@ class TambahAcaraWindow(QtWidgets.QMainWindow): self.input_link.setText(data_acara['link']) if data_acara['deskripsi'] is not None: - self.input_deskripsi.insertPlainText( - data_acara['deskripsi']) + self.input_deskripsi.insertPlainText(data_acara['deskripsi']) if data_acara['syarat'] is not None: self.input_syarat.insertPlainText(data_acara['syarat']) @@ -181,7 +187,8 @@ class TambahAcaraWindow(QtWidgets.QMainWindow): kategori=self.__get_checked_kategori(), nama_acara=self.input_nama_acara.text(), kuota_pendaftar=self.input_kuota.value(), - waktu=self.input_waktu.dateTime().toPyDateTime().replace(microsecond=0), + waktu=self.input_waktu.dateTime().toPyDateTime().replace( + microsecond=0), harga=self.input_harga.value(), link=self.input_link.text(), deskripsi=self.input_deskripsi.toPlainText(), @@ -191,21 +198,32 @@ class TambahAcaraWindow(QtWidgets.QMainWindow): def __save_data(self): if self.__is_form_valid(): if tambah_acara(**self.__get_form_data(), conn=self.__conn): - self.close() # sekarang exit aja dlu + self.close() # sekarang exit aja dlu else: self.__alert(text="Gagal menambahkan data.", info="Silakan hubungi pembuat aplikasi.", title="Terjadi kegagalan") else: self.__alert(text="Ada data yang belum diisi.", - info="Perhatikan, data dengan * merah adalah wajib dan minimal sebuah kategori terpilih.", + info="Perhatikan, data dengan * merah adalah wajib\ + dan minimal sebuah kategori terpilih.", title="Data acara kurang") def __input_image(self): - pass + dg = FileInput() + files = dg.spawn(multiple=True) + for file in files: + content = b'' + with open(file, 'rb') as f: + content = f.read() + img = QtGui.QImage() + assert img.loadFromData(content) + self.__photos.append(img) + self.__set_image() def __is_form_valid(self): - return self.input_nama_acara is not None and self.input_nama_acara.text() != ""\ + return self.input_nama_acara is not None\ + and self.input_nama_acara.text() != ""\ and self.input_waktu is not None\ and self.input_harga is not None\ and len(self.__get_checked_kategori()) != 0 @@ -217,4 +235,4 @@ class TambahAcaraWindow(QtWidgets.QMainWindow): msg.setInformativeText(info) msg.setWindowTitle(title) msg.setStandardButtons(QtWidgets.QMessageBox.Ok) - msg.exec_() \ No newline at end of file + msg.exec_() -- GitLab