From 7fed50ecbe2893ae03ec1946dfb2b7c5f6f2d3f0 Mon Sep 17 00:00:00 2001 From: Renaldi Arlin <13519114@std.stei.itb.ac.id> Date: Wed, 21 Apr 2021 15:47:16 +0700 Subject: [PATCH] Added add and change photo function --- src/app/ui/edit_account.py | 80 +++++++++++++++++++++++++++++++++----- 1 file changed, 71 insertions(+), 9 deletions(-) diff --git a/src/app/ui/edit_account.py b/src/app/ui/edit_account.py index 571a78e..8639c7a 100644 --- a/src/app/ui/edit_account.py +++ b/src/app/ui/edit_account.py @@ -10,13 +10,33 @@ import re from PyQt5 import QtCore, QtGui, QtWidgets from app.modules.auth import * from app.ui.util_ui import * +from app.ui.file_input_dialog import FileInput EMAIL_REGEX = re.compile(r"[^@]+@[^@]+\.[^@]+") +def choose_image(): + dg = FileInput() + file = dg.spawn(multiple=False) + with open(file, 'rb') as f: + return f.read() + +def convert_bytes_to_qimage(byte): + img = QtGui.QImage() + assert img.loadFromData(byte) + return img + +def convert_qimage_to_bytes(qimage): + bytes_array = QtCore.QByteArray() + buffer = QtCore.QBuffer(bytes_array) + buffer.open(QtCore.QIODevice.WriteOnly) + qimage.save(buffer, "png", quality=50) + + return bytes(bytes_array) class Ui_EditMember(object): def __init__(self, conn, id_member): self.conn = conn self.id_member = id_member + self.image = None def setupUi(self, EditMember): EditMember.setObjectName("EditMember") @@ -100,7 +120,6 @@ class Ui_EditMember(object): self.pic_profile = QtWidgets.QLabel(EditMember) self.pic_profile.setGeometry(QtCore.QRect(170, 20, 100, 100)) self.pic_profile.setText("") - self.pic_profile.setPixmap(QtGui.QPixmap("src/app/ui/assets/Images/default_user.png")) self.pic_profile.setScaledContents(True) self.pic_profile.setObjectName("pic_profile") self.button_change = QtWidgets.QPushButton(EditMember) @@ -108,6 +127,7 @@ class Ui_EditMember(object): self.button_change.setObjectName("button_change") self.retranslateUi(EditMember) + self.button_change.clicked.connect(self.change_image_handle) self.buttonBox.accepted.connect(self.okHandle) self.buttonBox.rejected.connect(EditMember.reject) QtCore.QMetaObject.connectSlotsByName(EditMember) @@ -135,6 +155,12 @@ class Ui_EditMember(object): self.textEdit_no_telp.setText(data["no_telp"]) self.lineEdit_password.setText(data["password"]) self.textEdit_deskripsi.setText(data["desc"]) + if data["foto_profil"] == None: + self.image = None + self.pic_profile.setPixmap(QtGui.QPixmap("src/app/ui/assets/Images/default_user.png")) + else: + self.image = convert_bytes_to_qimage(data["foto_profil"]) + self.pic_profile.setPixmap(QtGui.QPixmap.fromImage(self.image)) categories = [val[0] for val in get_kategori_member(self.conn, self.id_member)] for kategori in categories: @@ -146,7 +172,16 @@ class Ui_EditMember(object): self.checkBox_ekonomi.setChecked(True) elif kategori == "Kompetisi": self.checkBox_kompetisi.setChecked(True) - + + def change_image_handle(self): + pixmap = QtGui.QPixmap() + try: + qimage = convert_bytes_to_qimage(choose_image()) + self.image = qimage + self.pic_profile.setPixmap(QtGui.QPixmap.fromImage(qimage)) + except: + callInfoDialog("Failed importing image") + def okHandle(self): nama_dpn = self.textEdit_nama_depan.toPlainText() if len(self.textEdit_nama_depan.toPlainText()) > 0 else None nama_blkg = self.textEdit_nama_belakang.toPlainText() if len(self.textEdit_nama_belakang.toPlainText()) > 0 else None @@ -154,7 +189,8 @@ class Ui_EditMember(object): password = self.lineEdit_password.text() no_telp = self.textEdit_no_telp.toPlainText() if len(self.textEdit_no_telp.toPlainText()) > 0 else None desc = self.textEdit_deskripsi.toPlainText() if len(self.textEdit_deskripsi.toPlainText()) > 0 else None - + foto = convert_qimage_to_bytes(self.image) if self.image else None + try: if (not EMAIL_REGEX.match(email)): raise Exception("Invalid email") @@ -170,7 +206,7 @@ class Ui_EditMember(object): list_kategori.append("Kompetisi") edit_kategori_member(self.conn, self.id_member, list_kategori) - edit_account_member(self.conn, self.id_member, nama_dpn, nama_blkg, None, email, password, no_telp, desc) + edit_account_member(self.conn, self.id_member, nama_dpn, nama_blkg, foto, email, password, no_telp, desc) callInfoDialog("Successfully edited account") self.Dialog.close() @@ -182,6 +218,7 @@ class Ui_EditPenyelenggara(object): def __init__(self, conn, id_penyelenggara): self.conn = conn self.id_penyelenggara = id_penyelenggara + self.image = None def setupUi(self, EditPenyelenggara): EditPenyelenggara.setObjectName("EditPenyelenggara") @@ -253,8 +290,6 @@ class Ui_EditPenyelenggara(object): self.pic_profile = QtWidgets.QLabel(EditPenyelenggara) self.pic_profile.setGeometry(QtCore.QRect(170, 10, 100, 100)) - self.pic_profile.setText("") - self.pic_profile.setPixmap(QtGui.QPixmap("src/app/ui/assets/Images/default_user.png")) self.pic_profile.setScaledContents(True) self.pic_profile.setObjectName("pic_profile") @@ -263,6 +298,7 @@ class Ui_EditPenyelenggara(object): self.button_change.setObjectName("button_change") self.retranslateUi(EditPenyelenggara) + self.button_change.clicked.connect(self.change_image_handle) self.buttonBox.accepted.connect(self.okHandle) self.buttonBox.rejected.connect(EditPenyelenggara.reject) QtCore.QMetaObject.connectSlotsByName(EditPenyelenggara) @@ -285,7 +321,23 @@ class Ui_EditPenyelenggara(object): self.textEdit_email.setText(data["email"]) self.lineEdit_password.setText(data["password"]) self.textEdit_deskripsi.setText(data["desc"]) + if data["foto_profil"] == None: + self.image = None + self.pic_profile.setPixmap(QtGui.QPixmap("src/app/ui/assets/Images/default_user.png")) + else: + self.image = convert_bytes_to_qimage(data["foto_profil"]) + self.pic_profile.setPixmap(QtGui.QPixmap.fromImage(self.image)) + def change_image_handle(self): + pixmap = QtGui.QPixmap() + try: + qimage = convert_bytes_to_qimage(choose_image()) + self.image = qimage + self.pic_profile.setPixmap(QtGui.QPixmap.fromImage(qimage)) + except: + callInfoDialog("Failed importing image") + self.pic_profile.setPixmap(QtGui.QPixmap("src/app/ui/assets/Images/default_user.png")) + def okHandle(self): nama_org = self.textEdit_nama_org.toPlainText() if len(self.textEdit_nama_org.toPlainText()) > 0 else None pj = self.textEdit_pj.toPlainText() if len(self.textEdit_pj.toPlainText()) > 0 else None @@ -293,12 +345,22 @@ class Ui_EditPenyelenggara(object): password = self.lineEdit_password.text() no_wa = self.textEdit_no_wa.toPlainText() if len(self.textEdit_no_wa.toPlainText()) > 0 else None desc = self.textEdit_deskripsi.toPlainText() if len(self.textEdit_deskripsi.toPlainText()) > 0 else None - + foto = convert_qimage_to_bytes(self.image) if self.image else None + try: if (not EMAIL_REGEX.match(email)): raise Exception("Invalid email") - edit_account_penyelenggara(self.conn, self.id_penyelenggara, nama_org, pj, None, None, email, password, no_wa, desc) + edit_account_penyelenggara(self.conn, self.id_penyelenggara, nama_org, pj, foto, None, email, password, no_wa, desc) callInfoDialog("Successfully edited account") self.Dialog.close() except Exception as err: - callInfoDialog(str(err)) \ No newline at end of file + callInfoDialog(str(err)) + + def change_image_handle(self): + pixmap = QtGui.QPixmap() + try: + qimage = convert_bytes_to_qimage(choose_image()) + self.image = qimage + self.pic_profile.setPixmap(QtGui.QPixmap.fromImage(qimage)) + except: + callInfoDialog("Failed importing image") \ No newline at end of file -- GitLab