69 lines
1.8 KiB
Python
69 lines
1.8 KiB
Python
from PyQt6.QtWidgets import QVBoxLayout, QHBoxLayout, QWidget, QApplication
|
|
import sys
|
|
|
|
from ImageCanvas import ImageCanvas
|
|
from ImageManagePanel import ImageManagePanel
|
|
from DialogsPanel import DialogsPanel
|
|
|
|
class ImageEditor(QWidget):
|
|
def __init__(self):
|
|
super().__init__()
|
|
|
|
|
|
self.setWindowTitle("Image Editor")
|
|
self.setGeometry(100, 100, 800, 600)
|
|
|
|
self.canvas = ImageCanvas()
|
|
|
|
self.img_manager = ImageManagePanel()
|
|
self.img_manager.on_update.connect(self.display_image)
|
|
self.img_manager.on_close.connect(lambda : self.canvas.clear())
|
|
|
|
self.dialogs_panel = DialogsPanel(self.img_manager)
|
|
self.dialogs_panel.result_ready.connect(self.display_image)
|
|
|
|
|
|
main_layout = QHBoxLayout()
|
|
|
|
side_panel = QVBoxLayout()
|
|
|
|
side_panel.addWidget(self.img_manager, 1)
|
|
side_panel.addWidget(self.dialogs_panel, 9)
|
|
|
|
preview_panel = QVBoxLayout()
|
|
preview_panel.addWidget(self.canvas)
|
|
|
|
main_layout.addLayout(side_panel,2)
|
|
main_layout.addLayout(preview_panel, 3)
|
|
|
|
self.setLayout(main_layout)
|
|
|
|
|
|
self.setAcceptDrops(True)
|
|
|
|
def dragEnterEvent(self, event):
|
|
if event.mimeData().hasUrls():
|
|
event.acceptProposedAction()
|
|
|
|
def dropEvent(self, event):
|
|
files = [url.toLocalFile() for url in event.mimeData().urls()]
|
|
if files:
|
|
self.img_manager.open(files[0])
|
|
|
|
|
|
def display_image(self, image):
|
|
height, width, channel = image.shape
|
|
bytes_per_line = 3 * width
|
|
self.canvas.updatePixmap(QImage(image.data, width, height, bytes_per_line, QImage.Format.Format_RGB888))
|
|
|
|
|
|
def main():
|
|
app = QApplication(sys.argv)
|
|
editor = ImageEditor()
|
|
editor.show()
|
|
sys.exit(app.exec())
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|