Skip to content

Commit cea64d9

Browse files
committed
add icon and splashscreen
1 parent 76e343a commit cea64d9

7 files changed

Lines changed: 239 additions & 8 deletions

File tree

image_processing_widget/defs.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ def log_file() -> Path:
4545
return Path.cwd() / "image_processing.log"
4646

4747

48+
def resource_dir() -> Path:
49+
return project_root() / "resource"
50+
51+
4852
class ReadMode(Enum):
4953
GRAYSCALE = auto()
5054
COLOR = auto()

image_processing_widget/main_widget.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,15 @@
44
from pathlib import Path
55

66
import cv2 as cv
7-
import qtawesome as qta
87
from yapsy.PluginManager import PluginManager
98

10-
from image_processing_widget.custom_components import tab10_qcolor
119
from image_processing_widget.defs import (
1210
QtCore,
1311
QtWidgets,
1412
QtGui,
1513
project_root,
1614
settings_file,
15+
resource_dir,
1716
log_file,
1817
ReadMode,
1918
)
@@ -22,22 +21,23 @@
2221
from image_processing_widget.funcs import check_file_type, imread, imwrite
2322
from image_processing_widget.process_plugin import ProcessPlugin
2423
from image_processing_widget.roi_plugin import RoiPlugin
24+
from image_processing_widget.splashscreen import SplashScreen
2525
from image_processing_widget.workers import ProcessWorker
2626

2727

2828
class MainWidget(QtWidgets.QMainWindow):
2929
def __init__(self):
3030
super().__init__()
3131

32+
self.splashscreen = SplashScreen()
33+
self.splashscreen.show()
3234
self.setup_logger()
3335
self.log_new_session()
3436

3537
self.setWindowTitle("Image Processing")
3638
self.resize(1000, 500)
3739
self.setAcceptDrops(True)
38-
self.setWindowIcon(
39-
QtGui.QIcon(qta.icon("fa5s.images", color=tab10_qcolor["blue"]))
40-
)
40+
self.setWindowIcon(QtGui.QIcon(str(resource_dir() / "camera.svg")))
4141

4242
self.project_paths = [project_root(), Path.cwd(), project_root().parent]
4343
logging.info(
@@ -63,6 +63,8 @@ def __init__(self):
6363
self.setCorner(QtCore.Qt.TopRightCorner, QtCore.Qt.RightDockWidgetArea)
6464
self.setCorner(QtCore.Qt.BottomRightCorner, QtCore.Qt.RightDockWidgetArea)
6565

66+
self.splashscreen.set_progress(10)
67+
6668
self.img_path = None
6769
self.original_img = None
6870
self.processed_img = None
@@ -93,6 +95,8 @@ def __init__(self):
9395
self.setup_process_plugins(self.plugin_manager, self.selected_process_plugins)
9496
self.setup_roi_plugins(self.plugin_manager, self.selected_roi_plugins)
9597

98+
self.splashscreen.set_progress(50)
99+
96100
self.process_thread = QtCore.QThread()
97101
self.process_worker = ProcessWorker(self.controls_dock)
98102
self.process_worker.moveToThread(self.process_thread)
@@ -111,6 +115,9 @@ def __init__(self):
111115

112116
self.img_widget.setFocus()
113117

118+
self.splashscreen.set_progress(80)
119+
self.splashscreen.finish(self)
120+
114121
def read_config(self):
115122
parser = ConfigParser()
116123
for p in self.project_paths:
188 KB
Binary file not shown.
Lines changed: 111 additions & 0 deletions
Loading
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
from .splashscreen import SplashScreen
Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
import importlib.metadata
2+
from time import sleep
3+
4+
from image_processing_widget.defs import QtCore, QtGui, QtWidgets, resource_dir
5+
6+
7+
class SplashScreen(QtWidgets.QSplashScreen):
8+
def __init__(self, length=100):
9+
super().__init__()
10+
11+
self.setFixedSize(600, 300)
12+
self.setWindowFlag(QtCore.Qt.FramelessWindowHint)
13+
self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
14+
self.main_layout = QtWidgets.QVBoxLayout(self)
15+
16+
self.move( # move to centre of screen
17+
QtWidgets.QApplication.primaryScreen().geometry().center()
18+
- self.rect().center()
19+
)
20+
21+
self.version = importlib.metadata.version("image_processing_widget")
22+
23+
self.frame = QtWidgets.QFrame(self)
24+
self.frame.setObjectName("Frame")
25+
self.frame.setAttribute(QtCore.Qt.WA_StyledBackground)
26+
self.main_layout.addWidget(self.frame)
27+
self.frame_layout = QtWidgets.QVBoxLayout(self.frame)
28+
29+
title_row = QtWidgets.QHBoxLayout(self.frame)
30+
self.frame_layout.addLayout(title_row)
31+
32+
icon_size = 200
33+
self.icon_label = QtWidgets.QLabel(self.frame)
34+
self.icon_label.setPixmap(
35+
QtGui.QIcon(str(resource_dir() / "camera.svg")).pixmap(icon_size)
36+
)
37+
self.icon_label.setAlignment(QtCore.Qt.AlignCenter)
38+
self.icon_label.setSizePolicy(
39+
QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum
40+
)
41+
title_row.addWidget(self.icon_label)
42+
43+
self.title_label = QtWidgets.QLabel(self.frame)
44+
self.title_label.setObjectName("TitleLabel")
45+
self.title_label.setText("Image\nProcessing\nWidget")
46+
title_row.addWidget(self.title_label)
47+
48+
self.subtitle_label = QtWidgets.QLabel(self.frame)
49+
self.subtitle_label.setObjectName("SubTitleLabel")
50+
self.subtitle_label.setAlignment(QtCore.Qt.AlignCenter)
51+
self.subtitle_label.setText(f"Fukuda-Yeoh Lab 2022\t v{self.version}")
52+
self.frame_layout.addWidget(self.subtitle_label)
53+
54+
self.progress_bar = QtWidgets.QProgressBar(self.frame)
55+
self.progress_bar.setAlignment(QtCore.Qt.AlignCenter)
56+
self.progress_bar.setMaximum(length)
57+
self.frame_layout.addWidget(self.progress_bar)
58+
59+
self.frame.setStyleSheet(
60+
"""
61+
#Frame {
62+
background-color: #efefef;
63+
border-radius: 20px;
64+
border-color: white;
65+
}
66+
"""
67+
)
68+
self.title_label.setStyleSheet(
69+
'font-family: "Arial";'
70+
"font-weight: Bold;"
71+
"font-size: 32px;"
72+
"color: black;"
73+
)
74+
self.progress_bar.setStyleSheet(
75+
"""
76+
QProgressBar {
77+
background-color: gray;
78+
color: white;
79+
border-style: none;
80+
border-radius: 15px;
81+
font-family: "Arial";
82+
font-weight: Bold;
83+
font-size: 20px;
84+
}
85+
86+
QProgressBar::chunk {
87+
border-radius: 15px;
88+
background: qlineargradient(
89+
x1: 0, y1: 0.5, x2: 1, y2: 0.5,
90+
stop: 0 rgb(108, 171, 192), stop: 1 rgb(28, 51, 78));
91+
}
92+
"""
93+
)
94+
95+
def set_progress(self, value):
96+
self.progress_bar.setValue(value)
97+
98+
99+
if __name__ == "__main__":
100+
app = QtWidgets.QApplication([])
101+
102+
splash = SplashScreen()
103+
splash.show()
104+
105+
for i in range(10):
106+
splash.set_progress(i * 10)
107+
app.processEvents()
108+
sleep(1)

main_widget.spec

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
# -*- mode: python ; coding: utf-8 -*-
22

3-
43
block_cipher = None
54

65
a = Analysis(
76
['image_processing_widget\\main_widget.py'],
87
pathex=[],
98
binaries=[],
10-
datas=[],
9+
datas=[('image_processing_widget\\resource\\camera.svg', 'image_processing_widget\\resource')],
1110
hiddenimports=[],
1211
hookspath=[],
1312
hooksconfig={},
@@ -27,7 +26,8 @@ exe = EXE(
2726
a.zipfiles,
2827
a.datas,
2928
[],
30-
name='image_processing-widget-0.2.0',
29+
name='image-processing-widget-0.2.0',
30+
icon="image_processing_widget\\resource\\camera.ico",
3131
debug=False,
3232
bootloader_ignore_signals=False,
3333
strip=False,

0 commit comments

Comments
 (0)