class mainwindow(QWidget): def __init__(self, data_path, parent=None): super(mainwindow, self).__init__(parent) folders = os.listdir(data_path) self.mainLayout = QGridLayout(self) self.btn_layout = QGridLayout() self.buttons = [] for num, folder in enumerate(folders): i = num % 4 j = num // 4 folder_button = QPushButton(folder) self.buttons.append(folder_button) self.btn_layout.addWidget(folder_button, j, i) folder_button.setFixedSize(200, 30) folder_button.clicked.connect(partial(self.dispatcher, folder)) self.main_minue = QPushButton("back") self.btn_layout.addWidget(self.main_minue, 0, 0) self.main_minue.setFixedSize(200, 30) self.main_minue.hide() self.main_minue.clicked.connect(partial(self.main_layout, folder)) self.projectView = QTableView() self.mainLayout.addWidget(self.projectView, 1, 0) self.projectView.showMaximized() self.projectView.hide() self.listWidget = QListWidget(self) self.mainLayout.addWidget(self.listWidget, 1, 0) self.listWidget.hide() self.status_push = QPushButton("Status") self.btn_layout.addWidget(self.status_push, 0, 2) self.status_push.setFixedSize(200, 30) self.status_push.hide() self.search_push = QPushButton("Search") self.btn_layout.addWidget(self.search_push, 0, 1) self.search_push.setFixedSize(200, 30) self.search_push.hide() self.search_push.clicked.connect(partial(self.search_fn, folder)) self.search_counter = 0 txt = "please entre search text" self.search_lable = QLabel(txt) self.btn_layout.setContentsMargins(0, 0, 0, 0) self.btn_layout.addWidget(self.search_lable, 1, 0) self.search_lable.setFixedSize(200, 30) self.search_lable.hide() self.comboBox = QComboBox() self.comboBox.setObjectName(("comboBox")) self.btn_layout.addWidget(self.comboBox, 1, 2) self.comboBox.hide() self.search_line_edit = QLineEdit(self) self.btn_layout.addWidget(self.search_line_edit, 1, 1) self.search_line_edit.hide() self.search_line_edit.setFixedSize(200, 30) self.status_push.clicked.connect(self.show_status) self.back_push = QPushButton("Back") self.back_push.clicked.connect(partial(self.close_all, folder)) self.back_push.setFixedSize(200, 30) self.show_report = QPushButton("Show Report") self.show_report.clicked.connect(self.get_report) self.show_report.setFixedSize(200, 30) self.btn_layout.addWidget(self.back_push, 0, 0) self.btn_layout.addWidget(self.show_report, 0, 1) self.mainLayout.addLayout(self.btn_layout, 0, 0) self.back_push.hide() self.show_report.hide() self.setGeometry(0, 0, 1000, 1000) self.imageLabel = QLabel(self) self.imageLabel.hide() self.setWindowTitle("Stations") self.mainLayout.addWidget(self.imageLabel, 1, 0) def search_fn(self, folder): filename = main_path + "/" + folder + "/" + folder + ".xls" df = pd.read_excel(filename) header = list(df) for h in header: self.comboBox.addItem(h) if self.search_counter == 0: self.search_line_edit.show() self.comboBox.show() self.search_counter += 1 else: txt = self.search_line_edit.text() self.search_lable.hide() if txt == "": self.search_lable.show() else: self.search_counter = 2 df = df.replace(np.nan, '', regex=True) df = df.applymap(str) h = str(self.comboBox.currentText()) df1 = df[df[h].str.contains(txt)] tmp_filename = "tmp/tmp.csv" df1.to_csv(tmp_filename, index=False) self.show_table(tmp_filename) def main_layout(self, folder): if self.search_counter == 1: self.search_counter = 0 self.search_line_edit.hide() self.search_line_edit.setText("") self.search_lable.hide() self.comboBox.hide() elif self.search_counter == 2: self.dispatcher(folder) self.search_counter = 1 self.search_line_edit.setText("") else: self.setWindowTitle("Stations") self.projectView.hide() self.status_push.hide() self.search_push.hide() for folder in self.buttons: folder.show() self.main_minue.hide() def dispatcher(self, folder): filename = main_path + "/" + folder + "/" + folder + ".xls" # self.filename = filename self.setWindowTitle(folder + " Stations") self.show_table(filename) def show_status(self): labels = 'Done', 'half year target' sizes = [35, 65] explode = (0.1, 0.0) fig1, ax1 = plt.subplots() ax1.pie(sizes, explode=explode, labels=labels, autopct='%1.1f%%', shadow=True, startangle=90) ax1.axis('equal') plt.show() def get_report(self): image_name = str(self.record[-1]) + ".jpg" if image_name in os.listdir("reports"): image_path = "reports" + "/" + image_name image = QtGui.QImage(image_path) self.qpixmap = QtGui.QPixmap.fromImage(image) self.imageLabel.setPixmap(self.qpixmap) else: img = Image.new('RGB', (700, 600), (0, 0, 0)) draw = ImageDraw.Draw(img) draw.text((60, 250), "No Photo To Display for station number " + str(self.record[-1]), fill='rgb(255, 255, 255)', font=ImageFont.truetype( "/usr/share/fonts/dejavu/DejaVuSans.ttf", 25)) img = img.convert("RGBA") data = img.tobytes("raw", "RGBA") qim = QtGui.QImage(data, img.size[0], img.size[1], QtGui.QImage.Format_ARGB32) pix = QtGui.QPixmap.fromImage(qim) self.imageLabel.setPixmap(pix) self.listWidget.clear() self.listWidget.close() self.show_report.hide() self.imageLabel.show() self.main_minue.hide() def show_table(self, filename): self.projectModel = PandasModel(filename) self.projectView.setModel(self.projectModel) self.projectView.doubleClicked.connect(self.show_details) self.projectView.show() self.status_push.show() self.search_push.show() self.main_minue.show() for folder in self.buttons: folder.hide() def show_details(self, clickedIndex): self.projectView.hide() self.status_push.hide() self.search_push.hide() self.search_line_edit.hide() self.search_lable.hide() self.comboBox.hide() self.main_minue.hide() df = self.projectModel._data header = list(df) self.record = df.values.tolist()[clickedIndex.row()] self.listWidget.clear() self.listWidget.show() self.back_push.show() self.show_report.show() txt = "" for h, d in zip(header, self.record): txt += str(h) + ": " + str(d) + "\n\n" it = QListWidgetItem(txt) font = QtGui.QFont() font.setBold(True) font.setWeight(200) font.setPointSize(12) it.setFont(font) it.setBackground(QtGui.QBrush(QtGui.QColor("lightblue"))) it.setTextAlignment(Qt.AlignRight) self.listWidget.addItem(it) def close_all(self, folder): self.search_line_edit.clear() self.search_counter = 0 self.listWidget.clear() self.listWidget.close() self.back_push.hide() self.show_report.hide() self.imageLabel.hide() filename = main_path + "/" + folder + "/" + folder + ".xls" self.show_table(filename)
class GUI: database = "NULL" testme = [] tabs = [] __active = None edit = None new = None version = "alpha" def __init__(self): self.MainWindowApp = QtWidgets.QApplication(sys.argv) self.__setPalette() self.MainWindow = QtWidgets.QMainWindow() self.ui = Ui_MainWindow() self.ui.setupUi(self.MainWindow) self.onTriggerHook() self.MainWindowApp.lastWindowClosed.connect(self.exit) self.MainWindow.show() sys.exit(self.MainWindowApp.exec_()) def __del__(self): logging.info("Bye") if self.database != "NULL": self.database.closeConnection() self.database = "NULL" else: pass self.__setActive(None) self.MainWindowApp.quit() def __setPalette(self): dark_stylesheet = qdarkstyle.load_stylesheet_pyqt5() self.MainWindowApp.setStyleSheet(dark_stylesheet) def onTriggerHook(self): self.ui.actionExit.triggered.connect(lambda: self.exit()) self.ui.actiondatabase.triggered.connect(lambda: self.fileNameOpen()) self.ui.menuImport.triggered.connect(lambda: self.importData()) self.ui.actionNew.triggered.connect(lambda: self.createNew()) self.ui.actionSave.triggered.connect(lambda: self.saveChanges()) self.ui.actionVersion.triggered.connect(lambda: self.popupHelp()) self.ui.actionEdit.triggered.connect(lambda: self.dbEdit()) def fileNameOpen(self): if self.database == "NULL": currentPath = pathlib.Path().absolute() self.fileName = QtWidgets.QFileDialog() opentFileName = self.fileName.getOpenFileName( self.fileName, "Open File", str(currentPath), "Database Files (*.db)") if str(opentFileName[0]) != "": self.database = Word(str(opentFileName[0])) self.plotDatabase() else: logging.info("Database exist!") def dbEdit(self): if self.database != "NULL": if self.__active == self.ui.graphicWidget: self.plotDatabaseClose() self.edit = DataEdit(self.database) self.MainWindow.setCentralWidget(self.edit.tabs) self.__setActive(self.edit) def saveChanges(self): if issubclass(self.__active.__class__, DataView): _deleted = self.__active.getDeleted() if len(_deleted) != 0: self.database.deleteRecords(_deleted) else: logging.info("Nothing to delete!") self.database.insertRecords(self.__active.getEdited()) else: logging.info("Nothing to be saved") def createNew(self): if self.__active == self.ui.graphicWidget: self.plotDatabaseClose() if self.database != "NULL": self.newLecture() else: self.newDatabase() def newLecture(self): if self.__active == self.edit: self.edit.addLecture() def newLecture_obsolete(self): if self.database != "NULL": self.new = NewSection() self.MainWindow.setCentralWidget(self.new.tabs) self.__setActive(self.new) self.new.tabs.show() def newDatabase(self): logging.debug("New database!") if self.__newDatabaseFile(): self.new = DataNew(self.database) self.MainWindow.setCentralWidget(self.new.tabs) self.__setActive(self.new) self.new.tabs.show() def __newDatabaseFile(self): if self.database != "NULL": del self.database self.database = "NULL" currentPath = pathlib.Path().absolute() self.newFile = QtWidgets.QFileDialog() opentFileName = self.newFile.getSaveFileName(self.newFile, "Save File", "newDtabase", "Database Files (*.db)") if str(opentFileName[0]) != "": logging.info("Created new file") self.database = Word(str(opentFileName[0])) return True def plotDatabase(self): self.ui.graphicWidget = pg.PlotWidget() self.MainWindow.setCentralWidget(self.ui.graphicWidget) self.__setActive(self.ui.graphicWidget) self.ui.graphicWidget.setTitle("Test Plot", color="w", size="8pt") self.ui.graphicWidget.setLabel('left', 'Origins', units='') self.ui.graphicWidget.setLabel('bottom', 'Weeks', units='') self.ui.graphicWidget.plot(self.__databaseGetRange(), self.__databaseShowProgress()) def __databaseGetRange(self): weeks = list(range(0, (self.database.getLectureID() + 1))) return weeks def __databaseShowProgress(self): lectures = self.database.getLectureID() progress = [] progress.append(0) for lectureID in range(1, lectures + 1): if lectureID < 2: progress.append(self.database.getLectureProgress(lectureID)) else: progress.append( self.database.getLectureProgress(lectureID) + progress[lectureID - 1]) return progress def plotDatabaseUpdate(self): if self.__active == self.ui.graphicWidget: self.ui.graphicWidget.plot(self.__databaseGetRange(), self.__databaseShowProgress()) else: self.plotDatabase() def plotDatabaseClose(self): self.ui.graphicWidget.close() def plotBarDatabase(self): # plot data: x, y values self.ui.graphicWidget = pg.plot() self.ui.graphicWidget.setTitle("Test Plot", color="w", size="8pt") self.ui.graphicWidget.setLabel('left', 'Origins', units='') self.ui.graphicWidget.setLabel('bottom', 'Weeks', units='') bg1 = pg.BarGraphItem(x=self.__databaseGetRange(), height=self.__databaseShowProgress(), width=0.2, brush='g') self.ui.graphicWidget.addItem(bg1) def importData(self): if self.database == "NULL": logging.warning("Open database first!") else: currentPath = pathlib.Path().absolute() self.fileName = QtWidgets.QFileDialog() opentFileName = self.fileName.getOpenFileName( self.fileName, "Import File", str(currentPath), "CSV Files (*.csv)") fileName = str(opentFileName[0]) if os.path.isfile(fileName): self.database.importCSV(fileName) else: logging.warning("File " + str(fileName) + " does not exist!") self.plotDatabaseUpdate() def popupEdit(self): if self.database == "NULL": logging.warning("Open database first!") else: self.listwidget = QListWidget() for i in range(1, len(self.__databaseGetRange())): self.listwidget.insertItem(0, "Lecture " + str(i)) self.listwidget.clicked.connect(self.clicked) self.listwidget.show() def popupHelp(self): helpWindow = QMessageBox() helpWindow.setWindowTitle("Help") helpWindow.setText(str(self.version)) helpWindow.setIcon(QMessageBox.Information) helpWindow.setStandardButtons(QMessageBox.Ignore) if self.__active == self.edit: helpWindow.setInformativeText( "See details, for avilable commands!") helpWindow.setDetailedText("No details") elif self.__active == self.new: helpWindow.setInformativeText( "See details, for avilable commands!") helpWindow.setDetailedText( "- ctrl + R : Add new row\n- ctrl + delete : Delete marked rows" ) else: if self.database == "NULL": helpWindow.setInformativeText( "The database is not loaded.\nTo load database go to file and see options." ) else: helpWindow.setInformativeText( "The database is loaded.\nYou can edit the database and add a new data." ) helpWindowHndler = helpWindow.exec_() def clicked(self): item = self.listwidget.currentItem() self.listwidget.close() def deleteData(self, lecture): # Add popup to edit (chosse the lecture id from list5 list ) self.database.deleteLecturesRecords(lecture) self.plotDatabaseUpdate() def exit(self): logging.info("Exit") self.MainWindowApp.quit() def __setActive(self, active): self.__active = active
class mainwindow(QWidget): def __init__(self, fileName, parent=None): super(mainwindow, self).__init__(parent) self.zoom_count = 0 self.zoom_flag = False self.CSV_fileName = fileName self.zoom_file_path = "photo_edit/zoom/temp.jpg" widget = QWidget() self.mainLayout = QGridLayout(widget) self.btn_layout = QGridLayout(self) self.push_layout = QGridLayout() self.Qtree = QTreeView() # self.Qtree.setStyleSheet('QTreeView {background-color: purple; color: white; border:5px;' # 'border-style:outset;border-color: white;selection-color: yellow}') self.model = QtGui.QStandardItemModel(self) self.setWindowTitle("Main") self.setFixedSize(700, 550) self.Qtree.doubleClicked.connect(self.show_details) self.add_patient_pushbotton = QPushButton("Add New Patient") # self.add_patient_pushbotton.setStyleSheet('QPushButton {background-color:yellow;border-style:outset;' # 'border-width:5px;border-color: white}') self.add_patient_pushbotton.clicked.connect(self.add_patient) self.add_patient_pushbotton.setFixedSize(200, 30) self.zoom_in_push = QPushButton("Zoom In") # self.zoom_in_push.setStyleSheet('QPushButton {background-color:yellow;border-style:outset;' # 'border-width:2px;border-color: white}') self.zoom_in_push.clicked.connect(self.zoom) self.zoom_out_push = QPushButton("Zoom Out") # self.zoom_out_push.setStyleSheet('QPushButton {background-color:yellow;border-style:outset;' # 'border-width:2px;border-color: white}') self.zoom_out_push.clicked.connect(self.zoom) self.brightness_push = QPushButton("Brightness") # self.brightness_push.setStyleSheet('QPushButton {background-color:yellow;border-style:outset;' # 'border-width:2px;border-color: white}') self.brightness_push.clicked.connect(self.brightness) self.sharpness_push = QPushButton("Sharpness") # self.sharpness_push.setStyleSheet('QPushButton {background-color:yellow;border-style:outset;' # 'border-width:2px;border-color: white}') self.sharpness_push.clicked.connect(self.sharpness) self.color_push = QPushButton("Color") # self.color_push.setStyleSheet('QPushButton {background-color:yellow;border-style:outset;' # 'border-width:2px;border-color: white}') self.color_push.clicked.connect(self.color) self.reset_push = QPushButton("Reset") # self.reset_push.setStyleSheet('QPushButton {background-color:yellow;border-style:outset;' # 'border-width:2px;border-color: white}') self.reset_push.clicked.connect(self.reset) self.close_push = QPushButton("Close") # self.close_push.setStyleSheet('QPushButton {background-color:yellow;border-style:outset;' # 'border-width:2px;border-color: white}') self.close_push.clicked.connect(self.end) self.save_push = QPushButton("Add") # self.save_push.setStyleSheet('QPushButton {background-color:yellow;border-style:outset;' # 'border-width:2px;border-color: white}') self.save_push.clicked.connect(self.write_to_csv) self.save_push.setFixedSize(200, 30) self.back_push = QPushButton("Cancel") # self.back_push.setStyleSheet('QPushButton {background-color:yellow;border-style:outset;' # 'border-width:2px;border-color: white}') self.back_push.clicked.connect(self.loadCsv) self.back_push.setFixedSize(200, 30) self.back1_push = QPushButton("Back") # self.back1_push.setStyleSheet('QPushButton {background-color:yellow;border-style:outset;' # 'border-width:2px;border-color: white}') self.back1_push.clicked.connect(self.loadCsv) self.back1_push.setFixedSize(200, 30) self.save_push.hide() self.back_push.hide() self.back1_push.hide() self.name_edit_line = QLineEdit() self.name_edit_line.setFixedHeight(50) self.age_edit_line = QSpinBox() self.age_edit_line.setFixedHeight(50) self.date_edit_line = QLineEdit() self.date_edit_line.setFixedHeight(50) self.photo_edit_line = QLineEdit() self.photo_edit_line.setFixedHeight(50) self.diagnose_edit_line = QLineEdit() self.diagnose_edit_line.setFixedHeight(100) # self.diagnose_edit_line.setFixedSize(360, 100) self.Name_label = QLabel("Name:") # self.Name_label.setFixedHeight(20) self.Age_label = QLabel("Age:") self.Date_label = QLabel("visit Date:") self.photo_label = QLabel("Upload Photo:") self.diagnose_label = QLabel("Diagnose:") self.name_edit_line.hide() self.Name_label.hide() self.Age_label.hide() self.age_edit_line.hide() self.date_edit_line.hide() self.Date_label.hide() self.photo_edit_line.hide() self.photo_label.hide() self.diagnose_label.hide() self.diagnose_edit_line.hide() self.scroll = QScrollArea() self.scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) self.scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn) self.scroll.setWidgetResizable(True) self.scroll.setWidget(widget) self.imageLabel = QLabel() self.listWidget = QListWidget(self) # self.listWidget.setStyleSheet('QListWidget{background-color: purple; color: white; border:5px;' # 'border-style:outset;border-color: white;selection-color: yellow}') self.listWidget.itemDoubleClicked.connect(self.image) self.listWidget.hide() self.Qtree.setModel(self.model) self.Qtree.hide() self.push_layout.addWidget(self.add_patient_pushbotton, 0, 0, 0, 1) self.push_layout.addWidget(self.zoom_in_push, 0, 0) self.push_layout.addWidget(self.zoom_out_push, 0, 1) self.push_layout.addWidget(self.brightness_push, 0, 2) self.push_layout.addWidget(self.sharpness_push, 0, 3) self.push_layout.addWidget(self.color_push, 0, 4) self.push_layout.addWidget(self.reset_push, 0, 5) self.push_layout.addWidget(self.close_push, 0, 6) self.push_layout.addWidget(self.save_push, 0, 0) self.push_layout.addWidget(self.back_push, 0, 1) self.push_layout.addWidget(self.back1_push, 0, 0) self.push_layout.addWidget(self.listWidget, 1, 0) self.btn_layout.addLayout(self.push_layout, 5, 0) self.btn_layout.addWidget(self.Name_label, 0, 0) self.btn_layout.addWidget(self.name_edit_line, 0, 1) self.btn_layout.addWidget(self.Age_label, 1, 0) self.btn_layout.addWidget(self.age_edit_line, 1, 1) self.btn_layout.addWidget(self.Date_label, 2, 0) self.btn_layout.addWidget(self.date_edit_line, 2, 1) self.btn_layout.addWidget(self.photo_label, 3, 0) self.btn_layout.addWidget(self.photo_edit_line, 3, 1) self.btn_layout.addWidget(self.diagnose_label, 4, 0) self.btn_layout.addWidget(self.diagnose_edit_line, 4, 1) self.btn_layout.addWidget(self.scroll) self.btn_layout.addWidget(self.Qtree, 0, 0) self.mainLayout.addWidget(self.imageLabel, 0, 0) self.scroll.hide() def loadCsv(self): self.model.clear() self.add_patient_pushbotton.show() self.back1_push.hide() self.listWidget.hide() self.name_edit_line.hide() self.Name_label.hide() self.Age_label.hide() self.age_edit_line.hide() self.date_edit_line.hide() self.Date_label.hide() self.photo_edit_line.hide() self.photo_label.hide() self.diagnose_label.hide() self.diagnose_edit_line.hide() self.save_push.hide() self.back_push.hide() self.zoom_out_push.hide() self.zoom_in_push.hide() self.close_push.hide() self.reset_push.hide() self.sharpness_push.hide() self.brightness_push.hide() self.color_push.hide() data = pd.read_csv(self.CSV_fileName) header = list(data) data = data.values.tolist() self.next_id = len(data) items = [QtGui.QStandardItem(str(l)) for l in header] self.model.appendRow(items) for lst in data: items = [QtGui.QStandardItem(str(l)) for l in lst] self.model.appendRow(items) self.Qtree.show() def show_details(self, signal): r = signal.row() - 1 if r >= 0: self.back1_push.show() self.listWidget.clear() data = pd.read_csv(self.CSV_fileName) data = data.values.tolist() self.d = data[r] txt = "id is: " + str(self.d[0]) + "\nname is: " + str(self.d[1]) + "\nage is: " + str( self.d[2]) + "\nDiagnoses: " + str( self.d[5]) \ + "\nPress to show the image" QListWidgetItem(txt, self.listWidget) self.listWidget.setGeometry(1, 1, 500, 200) self.Qtree.close() self.add_patient_pushbotton.hide() self.listWidget.show() else: pass def add_patient(self): self.Qtree.close() self.add_patient_pushbotton.hide() self.name_edit_line.clear() self.age_edit_line.clear() self.date_edit_line.clear() self.photo_edit_line.clear() self.diagnose_edit_line.clear() self.name_edit_line.show() self.Name_label.show() self.Age_label.show() self.age_edit_line.show() self.date_edit_line.show() self.Date_label.show() self.photo_edit_line.show() self.photo_label.show() self.diagnose_label.show() self.diagnose_edit_line.show() self.save_push.show() self.back_push.show() currentDT = datetime.datetime.now() self.date_edit_line.setText(str(currentDT)) def write_to_csv(self): name = self.name_edit_line.text() age = str(self.age_edit_line.value()) date = self.date_edit_line.text() image_name = "data/" + name + "_" + date + ".jpg" diag = self.diagnose_edit_line.text() l2 = [self.next_id, name, age, date, image_name, diag] data = pd.read_csv(self.CSV_fileName) header = list(data) l1 = data.values.tolist() dict = {} for i, key in enumerate(header): lst = [] for l in l1: lst.append(l[i]) lst.append(l2[i]) dict[str(key)] = lst df = pd.DataFrame(dict) df.to_csv(self.CSV_fileName, index=False) self.loadCsv() def image(self): self.scroll.show() self.listWidget.close() self.back1_push.hide() self.fileName_edit = "photo_edit/temp.jpg" try: image = Image.open(self.d[4]) image.save("photo_edit/temp.jpg") # self.scaleFactor = 0.0 self.scaleFactor = 1.0 fileName = self.d[4] if fileName: image = QtGui.QImage(fileName) # print(type(image)) if image.isNull(): QMessageBox.information(self, "Image Viewer", "Cannot load %s." % fileName) return self.qpixmap = QtGui.QPixmap.fromImage(image) self.imageLabel.setPixmap(self.qpixmap) self.imageLabel.show() except: # img = np.zeros((500,500,3)) # image = QtGui.QImage(img, img.shape[1],img.shape[0], img.shape[1] * 3, QtGui.QImage.Format_RGB888) img = Image.new('RGB', (700, 600), (0, 0, 0)) draw = ImageDraw.Draw(img) draw.text((200, 200), "No Photo To Display!", fill='rgb(255, 255, 255)', font=ImageFont.truetype( "/usr/share/fonts/dejavu/DejaVuSans.ttf", 25)) img.save(self.fileName_edit) img.save(self.d[4]) img = img.convert("RGBA") data = img.tobytes("raw", "RGBA") qim = QtGui.QImage(data, img.size[0], img.size[1], QtGui.QImage.Format_ARGB32) pix = QtGui.QPixmap.fromImage(qim) self.imageLabel.setPixmap(pix) self.imageLabel.show() self.add_patient_pushbotton.hide() self.zoom_out_push.show() self.zoom_in_push.show() self.close_push.show() self.reset_push.show() self.sharpness_push.show() self.brightness_push.show() self.color_push.show() def adjustScrollBar(self, scrollBar, scale): scrollBar.setValue( int(scale * scrollBar.value() + ((scale - 1) * scrollBar.pageStep() / 2))) def zoom(self): if "zoom" not in os.listdir("photo_edit"): os.mkdir("photo_edit/zoom") sender = self.sender() self.zoom_flag = True image = Image.open(self.fileName_edit) if sender == self.zoom_in_push: self.zoom_count += 1 else: self.zoom_count += -1 scale = 1.2 scale = (scale)**self.zoom_count self.adjustScrollBar(self.scroll.horizontalScrollBar(), scale) self.adjustScrollBar(self.scroll.verticalScrollBar(), scale) h = int(image.size[1] * scale) w = int(image.size[0] * scale) image = image.resize((w, h), Image.BICUBIC) image.save(self.zoom_file_path) self.imageLabel.clear() image = QtGui.QImage(self.zoom_file_path) self.qpixmap = QtGui.QPixmap.fromImage(image) self.imageLabel.setPixmap(self.qpixmap) def brightness(self): if self.zoom_flag: shutil.copy(self.zoom_file_path, self.fileName_edit) self.zoom_flag = False self.zoom_count = 0 image = Image.open(self.fileName_edit) enhancer = ImageEnhance.Contrast(image) out = enhancer.enhance(1.7) out.save(self.fileName_edit) out = QtGui.QImage(self.fileName_edit) self.imageLabel.clear() qpixmap = QtGui.QPixmap.fromImage(out) self.imageLabel.setPixmap(qpixmap) self.scaleFactor = 1.0 self.imageLabel.adjustSize() def sharpness(self): if self.zoom_flag: shutil.copy(self.zoom_file_path, self.fileName_edit) self.zoom_flag = False self.zoom_count = 0 self.image = Image.open(self.fileName_edit) enhancer = ImageEnhance.Sharpness(self.image) out = enhancer.enhance(1.7) out.save(self.fileName_edit) out = QtGui.QImage(self.fileName_edit) self.imageLabel.clear() qpixmap = QtGui.QPixmap.fromImage(out) self.imageLabel.setPixmap(qpixmap) self.scaleFactor = 1.0 self.imageLabel.adjustSize() def color(self): if self.zoom_flag: shutil.copy(self.zoom_file_path, self.fileName_edit) self.zoom_flag = False self.zoom_count = 0 self.image = Image.open(self.fileName_edit) enhancer = ImageEnhance.Color(self.image) out = enhancer.enhance(1.7) out.save(self.fileName_edit) out = QtGui.QImage(self.fileName_edit) self.imageLabel.clear() qpixmap = QtGui.QPixmap.fromImage(out) self.imageLabel.setPixmap(qpixmap) self.scaleFactor = 1.0 self.imageLabel.adjustSize() def reset(self): self.zoom_flag = False self.zoom_count = 0 self.imageLabel.clear() o_i = QtGui.QImage(self.d[4]) qpixmap = QtGui.QPixmap.fromImage(o_i) self.imageLabel.setPixmap(qpixmap) self.imageLabel.adjustSize() self.image = Image.open(self.d[4]) self.image.save("photo_edit/temp.jpg") def end(self): self.scroll.hide() self.imageLabel.close() self.loadCsv()