122 lines
4.2 KiB
Python
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())
|