Files
zyt/app/scripts/render_subwindow_exact.py
T
2026-08-14 14:37:30 +08:00

122 lines
4.2 KiB
Python

"""Render focused blue-white diagnosis subwindow acceptance references."""
from __future__ import annotations
import os
import sys
from pathlib import Path
os.environ.setdefault("QT_QPA_PLATFORM", "offscreen")
ROOT = Path(__file__).resolve().parents[1]
SRC = ROOT / "src"
if str(SRC) not in sys.path:
sys.path.insert(0, str(SRC))
from PySide6.QtGui import QFont, QFontDatabase # noqa: E402
from PySide6.QtWidgets import QApplication # noqa: E402
from render_diagnosis_detail_visual import ( # noqa: E402
ScreenshotRepository,
_run_immediately,
)
from render_diagnosis_order_video_visual import order_detail # noqa: E402
from doctor_workstation.core import PermissionSet # noqa: E402
from doctor_workstation.services import DemoDoctorRepository # noqa: E402
from doctor_workstation.ui.diagnosis_editors import DailyRecordEditorDialog # noqa: E402
from doctor_workstation.ui.dialogs import diagnosis as diagnosis_module # noqa: E402
from doctor_workstation.ui.dialogs import prescription_ai as ai_module # noqa: E402
from doctor_workstation.ui.dialogs.diagnosis import DiagnosisDialog # noqa: E402
from doctor_workstation.ui.dialogs.prescription_ai import ( # noqa: E402
DIAGNOSIS_AI_KIND,
PrescriptionAiReportDialog,
)
def _save(widget: object, path: Path, app: QApplication) -> None:
widget.show()
for _ in range(8):
app.processEvents()
if not widget.grab().save(str(path), "PNG"):
raise RuntimeError(f"failed to save {path}")
def main() -> int:
output = ROOT / "artifacts" / "subwindow_exact"
output.mkdir(parents=True, exist_ok=True)
app = QApplication.instance() or QApplication([])
font_path = Path("C:/Windows/Fonts/msyh.ttc")
if font_path.is_file():
font_id = QFontDatabase.addApplicationFont(str(font_path))
families = QFontDatabase.applicationFontFamilies(font_id)
if families:
app.setFont(QFont(families[0], 9))
diagnosis_module.run_async = _run_immediately
ai_module.run_async = _run_immediately
host = DiagnosisDialog(ScreenshotRepository(locked=False), permissions=PermissionSet(["*"]))
host.resize(1280, 800)
host.open_for(501, editable=True)
_save(host, output / "diagnosis_edit_drawer_1280x800.png", app)
order = host._build_order_detail_dialog(order_detail(), 801)
_save(order, output / "diagnosis_order_detail_1280x800.png", app)
order.close()
host.close()
app.processEvents()
daily = DailyRecordEditorDialog(
"blood",
{
"id": 6101,
"diagnosis_id": 501,
"patient_id": 1501,
"record_date": "2026-08-10",
"record_time": "08:20",
"fasting_blood_sugar": 8.2,
"postprandial_blood_sugar": 12.4,
"systolic_pressure": 146,
"diastolic_pressure": 92,
"western_medicine": "二甲双胍",
"remark": "继续观察餐后波动。",
},
)
daily.setStyleSheet(diagnosis_module.DIAGNOSIS_QSS)
daily.resize(680, 660)
_save(daily, output / "diagnosis_daily_editor_680x660.png", app)
daily.close()
app.processEvents()
ai_report = PrescriptionAiReportDialog(
DemoDoctorRepository(),
permissions=PermissionSet(["*"]),
kind=DIAGNOSIS_AI_KIND,
)
ai_report.open_for(
{
"id": 501,
"diagnosis_id": 501,
"patient_name": "林晓岚",
"diagnosis_date": "2026-08-10",
"diagnosis_type": "复诊",
"syndrome_type": "气阴两虚",
"chief_complaint": "口干乏力,餐后血糖波动",
"present_illness": "近两周睡眠改善,仍需记录空腹与餐后血糖。",
"clinical_diagnosis": "2 型糖尿病",
"treatment_principle": "益气养阴,兼顾饮食与运动管理",
"doctor_advice": "连续记录七日血糖并按时复诊",
}
)
ai_report.resize(920, 760)
_save(ai_report, output / "diagnosis_ai_report_920x760.png", app)
ai_report.close()
app.processEvents()
for path in sorted(output.glob("*.png")):
print(path)
return 0
if __name__ == "__main__":
raise SystemExit(main())