Files
sshclient/main.py
T
Your Name 47c6589e1d feat: application icon for Windows taskbar + exe
- scripts/gen_icon.py: generates 256x256 SSH client icon (dark terminal
  window with >_ prompt and SSH connection nodes), outputs multi-size
  ICO (16-256px) + PNG
- resources/icon.ico + icon.png: generated icon files
- main.py: _get_icon_path() searches _MEIPASS (onefile), exe dir, source
  dir; sets app + window icon
- build.spec: bundles icon files via datas=, sets exe icon=icon.ico
- Windows taskbar will now show the custom icon instead of default PyInstaller icon
2026-07-29 06:54:12 +08:00

80 lines
2.2 KiB
Python

"""
SSHClient 入口
"""
import sys
import os
from pathlib import Path
# 让 PyInstaller 打包后能找到资源
def _setup_path():
if getattr(sys, "frozen", False):
# 打包后:exe 所在目录
bundle_dir = Path(sys.executable).parent
sys.path.insert(0, str(bundle_dir))
else:
# 源码运行:项目根
sys.path.insert(0, str(Path(__file__).parent))
_setup_path()
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QFont, QIcon, QPixmap
from ui.main_window import MainWindow, APP_NAME
def _get_icon_path() -> str:
"""找到 icon.ico / icon.png 的路径"""
# 搜索目录列表:源码运行 / PyInstaller onefile / PyInstaller onedir
search_dirs = []
if getattr(sys, "frozen", False):
# PyInstaller onefile: 资源解压到 _MEIPASS
meipass = getattr(sys, "_MEIPASS", None)
if meipass:
search_dirs.append(Path(meipass))
search_dirs.append(Path(meipass) / "resources")
# exe 同目录(onedir 模式或用户手动放)
search_dirs.append(Path(sys.executable).parent)
search_dirs.append(Path(sys.executable).parent / "resources")
else:
search_dirs.append(Path(__file__).parent)
search_dirs.append(Path(__file__).parent / "resources")
for d in search_dirs:
for name in ("icon.png", "icon.ico"):
p = d / name
if p.exists():
return str(p)
return ""
def main():
# Windows 上高 DPI 适配
if hasattr(Qt, "AA_EnableHighDpiScaling"):
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True)
if hasattr(Qt, "AA_UseHighDpiPixmaps"):
QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps, True)
app = QApplication(sys.argv)
app.setApplicationName(APP_NAME)
app.setStyle("Fusion")
# 全局等宽字体偏好
f = QFont("Consolas", 10)
app.setFont(f)
# 设置应用图标(任务栏 + 窗口标题栏)
icon_path = _get_icon_path()
if icon_path:
app.setWindowIcon(QIcon(icon_path))
w = MainWindow()
if icon_path:
w.setWindowIcon(QIcon(icon_path))
w.show()
sys.exit(app.exec_())
if __name__ == "__main__":
main()