优化了 gui
This commit is contained in:
+81
-2
@@ -9,11 +9,26 @@ from pathlib import Path
|
||||
from queue import Queue, Empty
|
||||
from typing import List
|
||||
|
||||
from loguru import logger
|
||||
|
||||
from douyu.config import Account, ProxyConfig
|
||||
from utils import setup_logger
|
||||
from .login_worker import LoginWorker, parse_accounts_text
|
||||
from .widgets import AccountTable, LogPanel
|
||||
|
||||
|
||||
LOG_LEVELS = ('DEBUG', 'INFO', 'WARNING', 'ERROR')
|
||||
LOG_LEVEL_TAGS = {
|
||||
'TRACE': 'debug',
|
||||
'DEBUG': 'debug',
|
||||
'INFO': 'info',
|
||||
'SUCCESS': 'success',
|
||||
'WARNING': 'warning',
|
||||
'ERROR': 'error',
|
||||
'CRITICAL': 'error',
|
||||
}
|
||||
|
||||
|
||||
class DouyuLoginApp:
|
||||
"""斗鱼批量登录GUI应用"""
|
||||
|
||||
@@ -31,6 +46,8 @@ class DouyuLoginApp:
|
||||
# 加载配置
|
||||
self.proxy_config = self._load_proxy_config()
|
||||
self.geetest_retries = self._load_geetest_retries()
|
||||
self.log_level = self._load_log_level()
|
||||
self._configure_logging(self.log_level)
|
||||
|
||||
# 创建主窗口
|
||||
self.root = tk.Tk()
|
||||
@@ -77,6 +94,45 @@ class DouyuLoginApp:
|
||||
except:
|
||||
return 5
|
||||
|
||||
def _load_log_level(self) -> str:
|
||||
"""从配置文件加载默认日志等级。"""
|
||||
try:
|
||||
import yaml
|
||||
with open(self.config_path, 'r', encoding='utf-8') as f:
|
||||
config = yaml.safe_load(f)
|
||||
level = config.get('log', {}).get('level', 'INFO').upper()
|
||||
return level if level in LOG_LEVELS else 'INFO'
|
||||
except:
|
||||
return 'INFO'
|
||||
|
||||
def _configure_logging(self, level: str) -> None:
|
||||
"""配置终端和GUI日志输出等级。"""
|
||||
self.log_level = level if level in LOG_LEVELS else 'INFO'
|
||||
setup_logger(level=self.log_level)
|
||||
logger.add(
|
||||
self._enqueue_log_record,
|
||||
level=self.log_level,
|
||||
format='{message}',
|
||||
colorize=False,
|
||||
)
|
||||
|
||||
def _enqueue_log_record(self, message) -> None:
|
||||
"""把loguru日志转发到GUI日志队列。"""
|
||||
record = message.record
|
||||
level = record['level'].name
|
||||
tag = LOG_LEVEL_TAGS.get(level, 'info')
|
||||
text = (
|
||||
f"{record['name']}:{record['function']}:{record['line']} | "
|
||||
f"{record['message']}"
|
||||
)
|
||||
self.log_queue.put((tag, text))
|
||||
|
||||
def _on_log_level_change(self, _event=None) -> None:
|
||||
"""切换日志等级。"""
|
||||
level = self.log_level_var.get().upper()
|
||||
self._configure_logging(level)
|
||||
self.log_panel.append_log('info', f'日志等级已切换为: {level}')
|
||||
|
||||
def _create_ui(self):
|
||||
"""创建用户界面"""
|
||||
# 主容器
|
||||
@@ -163,9 +219,13 @@ class DouyuLoginApp:
|
||||
self.proxy_https_entry = ttk.Entry(static_frame, textvariable=self.proxy_https_var, width=20)
|
||||
self.proxy_https_entry.pack(side='left', padx=(5, 0))
|
||||
|
||||
# 右侧配置:极验和日志
|
||||
side_frame = ttk.Frame(config_frame)
|
||||
side_frame.pack(side='right', fill='y', padx=(5, 0))
|
||||
|
||||
# 极验配置
|
||||
geetest_frame = ttk.LabelFrame(config_frame, text='极验配置', padding=10)
|
||||
geetest_frame.pack(side='right', fill='y', padx=(5, 0))
|
||||
geetest_frame = ttk.LabelFrame(side_frame, text='极验配置', padding=10)
|
||||
geetest_frame.pack(fill='x')
|
||||
|
||||
ttk.Label(geetest_frame, text='最大重试:').pack(anchor='w')
|
||||
self.geetest_retries_var = tk.IntVar(value=self.geetest_retries)
|
||||
@@ -173,6 +233,22 @@ class DouyuLoginApp:
|
||||
textvariable=self.geetest_retries_var)
|
||||
retries_spin.pack(anchor='w', pady=(5, 0))
|
||||
|
||||
# 日志配置
|
||||
log_frame = ttk.LabelFrame(side_frame, text='日志配置', padding=10)
|
||||
log_frame.pack(fill='x', pady=(8, 0))
|
||||
|
||||
ttk.Label(log_frame, text='等级:').pack(anchor='w')
|
||||
self.log_level_var = tk.StringVar(value=self.log_level)
|
||||
log_level_combo = ttk.Combobox(
|
||||
log_frame,
|
||||
values=LOG_LEVELS,
|
||||
textvariable=self.log_level_var,
|
||||
state='readonly',
|
||||
width=10,
|
||||
)
|
||||
log_level_combo.pack(anchor='w', pady=(5, 0))
|
||||
log_level_combo.bind('<<ComboboxSelected>>', self._on_log_level_change)
|
||||
|
||||
# 初始状态
|
||||
self._on_proxy_toggle()
|
||||
|
||||
@@ -333,6 +409,8 @@ class DouyuLoginApp:
|
||||
# 获取当前GUI配置
|
||||
proxy_config = self._get_proxy_config()
|
||||
geetest_retries = self.geetest_retries_var.get()
|
||||
log_level = self.log_level_var.get().upper()
|
||||
self._configure_logging(log_level)
|
||||
|
||||
# 验证代理配置
|
||||
if proxy_config.enabled:
|
||||
@@ -366,6 +444,7 @@ class DouyuLoginApp:
|
||||
self.log_panel.append_log('info', '未使用代理')
|
||||
|
||||
self.log_panel.append_log('info', f'极验最大重试: {geetest_retries} 次')
|
||||
self.log_panel.append_log('info', f'日志等级: {log_level}')
|
||||
self.progress_var.set('登录中...')
|
||||
|
||||
# 启动登录线程
|
||||
|
||||
Reference in New Issue
Block a user