114 lines
3.5 KiB
Python
114 lines
3.5 KiB
Python
from PySide6.QtGui import QIcon, QPixmap, QPainter, QColor, QFont, QBrush, QPen
|
|
from PySide6.QtCore import Qt, QSize, QRect
|
|
import os
|
|
|
|
def generate_app_icon(size=512):
|
|
"""Generate a simple app icon if none is available"""
|
|
pixmap = QPixmap(size, size)
|
|
pixmap.fill(Qt.transparent)
|
|
|
|
painter = QPainter(pixmap)
|
|
painter.setRenderHint(QPainter.Antialiasing, True)
|
|
|
|
# Background
|
|
painter.setBrush(QBrush(QColor(40, 120, 200)))
|
|
painter.setPen(Qt.NoPen)
|
|
painter.drawEllipse(10, 10, size-20, size-20)
|
|
|
|
# Traffic light circle
|
|
painter.setBrush(QBrush(QColor(50, 50, 50)))
|
|
painter.setPen(QPen(QColor(30, 30, 30), 10))
|
|
painter.drawEllipse(size//4, size//4, size//2, size//2)
|
|
|
|
# Red light
|
|
painter.setBrush(QBrush(QColor(240, 30, 30)))
|
|
painter.setPen(Qt.NoPen)
|
|
painter.drawEllipse(size//2.5, size//3.5, size//5, size//5)
|
|
|
|
# Yellow light
|
|
painter.setBrush(QBrush(QColor(240, 240, 30)))
|
|
painter.setPen(Qt.NoPen)
|
|
painter.drawEllipse(size//2.5, size//2.3, size//5, size//5)
|
|
|
|
# Green light
|
|
painter.setBrush(QBrush(QColor(30, 200, 30)))
|
|
painter.setPen(Qt.NoPen)
|
|
painter.drawEllipse(size//2.5, size//1.7, size//5, size//5)
|
|
|
|
painter.end()
|
|
|
|
return pixmap
|
|
|
|
def create_app_icons(output_dir):
|
|
"""Create application icons in various formats"""
|
|
os.makedirs(output_dir, exist_ok=True)
|
|
|
|
# Create icons in different sizes
|
|
sizes = [16, 32, 48, 64, 128, 256, 512]
|
|
for size in sizes:
|
|
icon = generate_app_icon(size)
|
|
icon.save(os.path.join(output_dir, f"icon_{size}.png"))
|
|
|
|
# Save main icon
|
|
icon = generate_app_icon(512)
|
|
icon.save(os.path.join(output_dir, "icon.png"))
|
|
|
|
print(f"App icons created in {output_dir}")
|
|
return os.path.join(output_dir, "icon.png")
|
|
|
|
def create_splash_image(output_dir, width=600, height=350):
|
|
"""Create a splash screen image"""
|
|
os.makedirs(output_dir, exist_ok=True)
|
|
|
|
pixmap = QPixmap(width, height)
|
|
pixmap.fill(QColor(40, 40, 45))
|
|
|
|
painter = QPainter(pixmap)
|
|
painter.setRenderHint(QPainter.Antialiasing, True)
|
|
|
|
# Draw app icon at the top
|
|
app_icon = generate_app_icon(120)
|
|
painter.drawPixmap(width//2 - 60, 30, app_icon)
|
|
|
|
# Draw text
|
|
painter.setPen(QColor(240, 240, 240))
|
|
|
|
title_font = QFont("Arial", 24)
|
|
title_font.setBold(True)
|
|
painter.setFont(title_font)
|
|
painter.drawText(QRect(0, 160, width, 40), Qt.AlignCenter, "Traffic Monitoring System")
|
|
|
|
subtitle_font = QFont("Arial", 12)
|
|
painter.setFont(subtitle_font)
|
|
painter.drawText(QRect(0, 210, width, 30), Qt.AlignCenter, "Advanced traffic analysis with OpenVINO acceleration")
|
|
|
|
version_font = QFont("Arial", 10)
|
|
painter.setFont(version_font)
|
|
painter.drawText(QRect(0, height-30, width, 20), Qt.AlignCenter, "Version 1.0")
|
|
|
|
painter.end()
|
|
|
|
# Save splash image
|
|
output_path = os.path.join(output_dir, "splash.png")
|
|
pixmap.save(output_path)
|
|
|
|
print(f"Splash image created at {output_path}")
|
|
return output_path
|
|
|
|
if __name__ == "__main__":
|
|
# For testing icon generation
|
|
import sys
|
|
from PySide6.QtWidgets import QApplication
|
|
|
|
app = QApplication(sys.argv)
|
|
|
|
resources_dir = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "resources")
|
|
|
|
# Create icons
|
|
create_app_icons(os.path.join(resources_dir, "icons"))
|
|
|
|
# Create splash image
|
|
create_splash_image(resources_dir)
|
|
|
|
print("Resource generation complete!")
|