138 lines
4.4 KiB
Python
138 lines
4.4 KiB
Python
# -*- 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
|