# -*- coding: UTF-8 -*- ''' @Project :domainScanDemo @File :main_window.py @IDE :PyCharm @Author :梦伴 @Date :2026/4/8 23:46 @explain : 主窗口 ''' from PySide6.QtWidgets import QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QPushButton, QTabWidget, QLabel, QScrollArea, QFrame from PySide6.QtCore import Qt from PySide6.QtGui import QIcon import os from loguru import logger from app.ui.domain_import import DomainImportWidget from app.ui.domain_filter import DomainFilterWidget from app.ui.sensitive_words import SensitiveWordsWidget from app.ui.juming_crawler import JumingCrawlerWidget from app.ui.system_settings import SystemSettingsWidget class MainWindow(QMainWindow): """ 主窗口 """ def __init__(self): """ 初始化主窗口 """ super().__init__() # 设置窗口标题和大小 self.setWindowTitle("域名工具") self.setGeometry(100, 100, 2000, 800) self.setMinimumSize(1200, 720) # 设置窗口图标 icon_path = os.path.join(os.path.dirname(os.path.dirname(os.path.dirname(__file__))), "favicon.ico") if os.path.exists(icon_path): self.setWindowIcon(QIcon(icon_path)) logger.info(f"设置窗口图标成功: {icon_path}") else: logger.warning(f"窗口图标文件不存在: {icon_path}") # 创建中央部件 central_widget = QWidget() self.setCentralWidget(central_widget) # 创建主布局 main_layout = QVBoxLayout(central_widget) # 创建标签页 self.tab_widget = QTabWidget() self.tab_widget.setStyleSheet(""" QTabWidget { font-size: 14px; } QTabBar::tab { padding: 10px 20px; background-color: #f0f0f0; border: 1px solid #ddd; border-bottom: none; border-top-left-radius: 4px; border-top-right-radius: 4px; margin-right: 2px; } QTabBar::tab:hover { background-color: #e0e0e0; } QTabBar::tab:selected { background-color: white; color: #4CAF50; font-weight: bold; border-color: #4CAF50; } QTabWidget::pane { border: 1px solid #ddd; border-top: none; border-radius: 0 0 4px 4px; padding: 10px; } """) main_layout.addWidget(self.tab_widget) # 创建标签页内容 self.create_tabs() # 记录日志 logger.info("主窗口创建完成") def create_tabs(self): """ 创建标签页 """ # 聚名爬取标签页 juming_widget = JumingCrawlerWidget() self.tab_widget.addTab(self.wrap_scrollable_tab(juming_widget), "聚名爬取") # 域名筛选标签页 filter_widget = DomainFilterWidget() self.tab_widget.addTab(self.wrap_scrollable_tab(filter_widget), "域名筛选") # 域名导入标签页 import_widget = DomainImportWidget() self.tab_widget.addTab(self.wrap_scrollable_tab(import_widget), "域名导入") # 敏感词配置标签页 sensitive_widget = SensitiveWordsWidget() self.tab_widget.addTab(self.wrap_scrollable_tab(sensitive_widget), "敏感词配置") # 系统设置标签页 settings_widget = SystemSettingsWidget() self.tab_widget.addTab(self.wrap_scrollable_tab(settings_widget), "系统设置") logger.info("标签页创建完成") def wrap_scrollable_tab(self, widget): """ 给标签页统一包一层滚动区域,保证右侧滚动条始终可用 """ container = QWidget() container_layout = QVBoxLayout(container) container_layout.setContentsMargins(0, 0, 0, 0) container_layout.setSpacing(0) scroll_area = QScrollArea() scroll_area.setWidgetResizable(True) scroll_area.setFrameShape(QFrame.NoFrame) scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAsNeeded) scroll_area.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded) scroll_area.setWidget(widget) container_layout.addWidget(scroll_area) return container