PyQt5 GUI在树莓派与Windows下字体大小不一致问题求助
如何让Windows与树莓派上的PyQt5布局(字体大小)保持一致?
这个问题我之前也碰到过——本质上是Windows和树莓派的系统DPI缩放逻辑不同,Qt会自动适配系统的DPI设置,哪怕用了相同字体和fusion风格,也会导致字体大小显示差异。结合你的代码,我给你几个可行的解决方案:
解决方案1:禁用Qt的高DPI自动缩放
这个方法能让程序完全忽略系统的DPI设置,按你指定的尺寸渲染,是最直接的统一方式。在创建QApplication之前添加以下代码:
if __name__ == "__main__": # 禁用高DPI自动缩放,强制按程序定义的尺寸显示 QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_DisableHighDpiScaling) QtWidgets.QApplication.setStyle("fusion") app = QtWidgets.QApplication(sys.argv) # ... 后续代码不变
解决方案2:设置全局统一字体(指定Point Size)
即使禁用了高DPI缩放,不同系统的默认字体大小可能还是有差异,直接给整个应用设置全局字体,确保所有控件(除了你单独指定的,比如标题标签)都用相同的字体和字号:
if __name__ == "__main__": QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_DisableHighDpiScaling) QtWidgets.QApplication.setStyle("fusion") app = QtWidgets.QApplication(sys.argv) # 设置全局字体:Arial,字号10(可根据需要调整) global_font = QtGui.QFont("Arial", 10) app.setFont(global_font) window = TestMainWindow() window.show() app.aboutToQuit.connect(window.exitCleanUp) sys.exit(app.exec_())
你的UI里标题标签已经指定了18号字,这个设置不会覆盖它,只会统一其他未指定字号的控件(按钮、普通标签等)。
解决方案3:针对平台微调缩放因子(可选)
如果禁用高DPI后,树莓派上的字体还是和Windows有细微差异,可以通过判断平台,手动设置缩放因子或者微调字号:
import platform if __name__ == "__main__": QtWidgets.QApplication.setStyle("fusion") # 启用高DPI缩放,但手动统一缩放因子 QtWidgets.QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling) app = QtWidgets.QApplication(sys.argv) # 根据平台设置字体 if platform.system() == "Linux": # 树莓派属于Linux global_font = QtGui.QFont("Arial", 9) # 树莓派上稍微调小字号 app.setScaleFactor(1.0) # 强制缩放因子为1.0 else: # Windows global_font = QtGui.QFont("Arial", 10) app.setScaleFactor(1.0) app.setFont(global_font) window = TestMainWindow() window.show() app.aboutToQuit.connect(window.exitCleanUp) sys.exit(app.exec_())
为什么这些方法有效?
- 树莓派的Raspbian系统默认可能开启了高DPI缩放(尤其是带触摸屏的型号),Qt会自动放大字体以适配屏幕,而Windows的DPI逻辑不同,导致显示差异。
- 全局设置字体能避免系统默认字体的字号差异,确保所有控件使用统一的基准字号。
你可以先试试方案1+方案2,这两个组合基本能解决90%以上的跨平台字体大小不一致问题。
内容的提问来源于stack exchange,提问作者sdbbs
相关产品推荐
相关产品推荐

