Files
kefu/deploy/review-picker-20260918/render_picker.py
T
2026-09-21 10:34:06 +08:00

44 lines
2.3 KiB
Python

from pathlib import Path
import json
import sys
from unittest import mock
from PySide6.QtCore import Qt, QRect
from PySide6.QtTest import QTest
from PySide6.QtWidgets import QApplication
import wechat_gui_qt as qt
from test_review_assistant_picker_layout import ACCOUNT, NAMED, ANONYMOUS, DIRECTORY
app = QApplication.instance() or QApplication([])
qt._register_bundled_fonts()
app.setStyle('Fusion')
app.setStyleSheet(qt.APP_QSS)
app.setFont(qt._ui_font(9))
with mock.patch.object(qt.QTimer, 'singleShot'), mock.patch.object(qt.ReviewAssistantPicker, '_available_geometry', lambda _self: (QRect(0, 0, 640, 360) if len(sys.argv) > 3 else QRect(0, 0, 1280, 720))):
dialog = qt.ReviewAssistantPicker(ACCOUNT, current_recipient_id=NAMED['id'])
dialog._filter = 'all'
for key, button in dialog.filter_buttons.items():
button.setChecked(key == 'all')
dialog._serial = 1
long_directory = {**DIRECTORY, 'name': '李助理(夜班值守与客户回访专用私人微信)'}
dialog._loaded({'ready': True, 'account_id': ACCOUNT, '_serial': 1,
'items': [NAMED, ANONYMOUS, long_directory], 'total': 3,
'all_total': 3, 'all_selectable_total': 2, 'all_contact_total': 1})
dialog.show(); app.processEvents()
root = Path(sys.argv[1]); suffix = sys.argv[2]
result = {'scale': suffix, 'dpr': dialog.devicePixelRatioF(), 'screens': {}}
for index, scenario in ((0, 'named'), (1, 'anonymous'), (2, 'directory')):
item = dialog.contacts.item(index)
QTest.mouseClick(dialog.contacts.viewport(), Qt.MouseButton.LeftButton,
pos=dialog.contacts.visualItemRect(item).center())
dialog.query.setFocus(); app.processEvents()
assert item.isSelected() and not item.icon().isNull()
assert dialog.choose.isEnabled() == (scenario != 'directory')
assert dialog.contacts.horizontalScrollBar().maximum() == 0
assert dialog.grab().save(str(root / f'picker-{scenario}-{suffix}.png'))
result['screens'][scenario] = {'logical_size': [dialog.width(), dialog.height()],
'horizontal_scroll_max': dialog.contacts.horizontalScrollBar().maximum(),
'details_height': dialog.details_reason.height(), 'confirm_enabled': dialog.choose.isEnabled()}
(root / f'picker-layout-{suffix}.json').write_text(json.dumps(result, ensure_ascii=False, indent=2), encoding='utf-8')
print(json.dumps(result, ensure_ascii=False))
dialog.reject()