"""Real Qt WebEngine rendering in an isolated process at each DPI factor.""" from pathlib import Path import sys,json,os os.environ['QT_QPA_PLATFORM']='offscreen' sys.path.insert(0,'C:/wechat_rpa') from PySide6.QtCore import QTimer,Qt from PySide6.QtWidgets import QApplication,QMainWindow from wechat_gui_qt import ConsoleShell,MainWindow from desktop_window import DesktopWindowBar QApplication.setHighDpiScaleFactorRoundingPolicy(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough) app=QApplication([]) host=QMainWindow();host._console_view='auto';host._console_state_pending=False host._push_console_state=lambda **_:host.console_shell.set_state(json.dumps({'view':'auto','demo':False,'system':{'scale':'自动'}})) host.setMenuBar(DesktopWindowBar(host));host.console_shell=ConsoleShell(host);host.setCentralWidget(host.console_shell) host.resize(960,540);host.show() folder=Path(__file__).resolve().parent/'qa';factor=os.environ.get('QT_SCALE_FACTOR','1') state={'done':False} def result(value): if state['done']:return try: data=json.loads(value) if not data.get('ready'): QTimer.singleShot(150,check);return data['qtDpr']=host.devicePixelRatioF();data['factor']=factor assert abs(data['dpr']-data['qtDpr'])<.01,data assert abs(data['zoom']-.85)<.001,data assert data['contentWidth']<=data['mainWidth']+2,data assert data['titleWidth']>0,data image=host.grab();data['imageWidth']=image.width();data['logicalWidth']=host.width() assert abs(image.width()/host.width()-data['qtDpr'])<.01,data image.save(str(folder/f'qt-{factor}x.png')) (folder/f'qt-{factor}x.json').write_text(json.dumps(data,indent=2),encoding='utf-8') print(json.dumps(data),flush=True);state['done']=True;app.exit(0) except Exception as exc: print(repr(exc),flush=True);state['done']=True;app.exit(1) def check(): host.console_shell.page().runJavaScript('''JSON.stringify({ready:!!document.querySelector('h1'), dpr:devicePixelRatio,zoom:Number(document.getElementById('stage').style.zoom), titleWidth:document.querySelector('h1')?.getBoundingClientRect().width, mainWidth:document.getElementById('main').clientWidth,contentWidth:document.getElementById('main').scrollWidth})''',result) QTimer.singleShot(800,check) QTimer.singleShot(25000,lambda:app.exit(2) if not state['done'] else None) raise SystemExit(app.exec())