BillsgWu 2024-04-04 21:51 采纳率: 40%
浏览 28

PyQt在Windows下缩放问题

import font_rc
from mainui import Ui_Form
from PyQt5.QtWidgets import QApplication,QWidget,QMessageBox
from PyQt5.QtGui import QFontDatabase,QFont,QGuiApplication
from player import PlayerWidget
from PyQt5.QtCore import pyqtSlot,Qt,QCoreApplication
QCoreApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
QCoreApplication.setAttribute(Qt.AA_UseHighDpiPixmaps)
# QGuiApplication.setHighDpiScaleFactorRoundingPolicy(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
app = QApplication(["QATimer"])
fontdb = QFontDatabase()
fontid = fontdb.addApplicationFont(":resources/FiraCode-Regular.ttf")
class Window(QWidget):
    def __init__(self,parent=None):
        super(Window,self).__init__(parent)
        self.setFont(QFont("Fira Code"))
        self.ui = Ui_Form()
        self.ui.setupUi(self)
        self.status = 0
    @pyqtSlot()
    def on_startstep_clicked(self):
        if self.status == 0:
            dtime = eval(self.ui.time1.text())
            self.status = 1
        elif self.status == 1:
            dtime = eval(self.ui.time2.text())
            self.status = 2
        elif self.status == 2:
            dtime = eval(self.ui.time3.text())
            self.status = 3
        elif self.status == 3:
            dtime = eval(self.ui.time3a.text())
        else:
            dtime = eval(self.ui.time4.text())
            self.status = -1
        PlayerWidget(dtime=dtime).exec()
        if self.status == -1:
            self.close()
        self.repaint()
    @pyqtSlot()
    def on_passstep_clicked(self):
        self.status += 1
        if self.status > 4:
            self.close()
        self.repaint()
    def paintEvent(self,event):
        if self.status > 3:
            self.ui.label3a.setDisabled(True)
            self.ui.second3a.setDisabled(True)
            self.ui.time3a.setDisabled(True)
            y = 190
        elif self.status > 2:
            self.ui.label3.setDisabled(True)
            self.ui.second3.setDisabled(True)
            self.ui.time3.setDisabled(True)
            y = 150
        elif self.status > 1:
            self.ui.label2.setDisabled(True)
            self.ui.second2.setDisabled(True)
            self.ui.time2.setDisabled(True)
            y = 110
        elif self.status > 0:
            self.ui.label1.setDisabled(True)
            self.ui.second1.setDisabled(True)
            self.ui.time1.setDisabled(True)
            y = 70
        else:
            y = 30
        self.ui.pointer.setGeometry(20,y,40,30)
window = Window()
window.show()
app.exec_()

这个程序在pyqt5.15下无法适应Windows缩放,但是去掉QGuiApplication.setHighDpiScaleFactorRoundingPolicy(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)一行的注释后却无法打开PlayerWidget窗口,请问这是什么原因?

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-04 21:51
    关注

    引自免费微信小程序:皆我百晓生

    问题描述: 在Python环境下,在PyQt5.15版本中,你的程序在Windows下缩放问题,但是在去掉QGuiApplication.setHighDpiScaleFactorRoundingPolicy(Qt.HighDpiScaleFactorRoundingPolicy/passThrough)这一行之后,程序可以正常运行并且打开PlayerWidget窗口。

    初步分析: 问题可能出在PyQt5的版本控制上,而不是你的代码。高DPI缩放是Qt的一部分功能,如果它被忽略,则可能会导致兼容性问题。

    解决步骤:

    1. 更新PyQt版本到最新稳定版。
    2. 重启PyQt进程。
    3. 如果以上步骤都不能解决问题,尝试卸载并重新安装PyQt。

    如果有其他信息,请提供,我会根据提供的信息进行更深入的分析。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月4日

悬赏问题

  • ¥15 dnat基础问题,本机发出,别人返回的包,不能命中
  • ¥15 请各位帮我看看是哪里出了问题
  • ¥15 vs2019的js智能提示
  • ¥15 关于#开发语言#的问题:FDTD建模问题图中代码没有报错,但是模型却变透明了
  • ¥15 uniapp的h5项目写一个抽奖动画
  • ¥15 hadoop中启动hive报错如下怎么解决
  • ¥15 如何优化QWebEngineView 加载url的速度
  • ¥15 关于#hadoop#的问题,请各位专家解答!
  • ¥15 如何批量抓取网站信息
  • ¥15 Spring Boot离线人脸识别