PyQt5/PyQt

[PyQt5 vs PyQt6 Widget Resize not suit]

Yakuho opened this issue · 9 comments

Environment :

  • OS: [e.g. Win 10]
  • Python [e.g. 3.7 X64 anaconda on win32]
  • PyQt5/6 [e.g. 5.10.1]

Describe :
我在使用 PyQt5的时候,创建了一个Widget窗体并设置尺寸为100100, 运行并显示出来的尺寸(用截图工具截出来)也是100100;

在PyQt6中,使用同样的代码, 运行并显示出来的尺寸(用截图工具截出来)变成了125*125;

这是为什么呢???

Code :

try:
    from PyQt6.QtWidgets import QApplication
    from PyQt6 import QtWidgets
    from PyQt6 import QtCore
except ImportError:
    from PyQt5.QtWidgets import QApplication
    from PyQt5 import QtWidgets
    from PyQt5 import QtCore
import sys

app = QApplication(sys.argv)
window = QtWidgets.QWidget()
# use pyqt5 Widget size by win screen is 100 * 100
# use pyqt6 Widget size by win screen is 125 * 125
window.resize(100, 100)
window.setMinimumSize(100, 100)
window.setMaximumSize(100, 100)
print("width", window.width(), "height", window.height())
window.show()
sys.exit(app.exec())

可能是由于Qt6 底层做了一些限制导致的和Qt5存在差异

源码上是一致的,但是确实尺寸是不一样的...您这边能复现吗,我不确定是不是我机器的问题

源码上是一致的,但是确实尺寸是不一样的...您这边能复现吗,我不确定是不是我机器的问题

能复现。但目前底层这样差异。上层不好做修复。
你可以试一下 设置 500500 是不是还是一样的问题。
我猜测是100
100 太小了。毕竟windows窗口上面的三个按钮加图标 就超过100了

我试过了,程序本来的尺寸是(500+, 400+),设置成100是为了观察差异,发现差异在1.25倍,PyQt6总比PyQt5大1.25倍. 肯定是有什么东西引起的

已经解决了,感谢您的解答。

我是从 Qt 文档和搜索引擎整合出来的答案:

https://doc.qt.io/qtforpython-6.3/PySide6/QtGui/QGuiApplication.html?highlight=sethighdpiscalefactorroundingpolicy#PySide6.QtGui.PySide6.QtGui.QGuiApplication.setHighDpiScaleFactorRoundingPolicy

try:
    from PyQt6.QtWidgets import QApplication
    from PyQt6 import QtWidgets, QtCore
except ImportError:
    from PyQt5.QtWidgets import QApplication
    from PyQt5 import QtWidgets, QtCore
print("import PyQt", QtCore.QT_VERSION_STR)
import sys

if QtCore.QT_VERSION_STR[0] == "5":
    QApplication.setAttribute(QtCore.Qt.AA_EnableHighDpiScaling)
else:
    QApplication.setHighDpiScaleFactorRoundingPolicy(QtCore.Qt.HighDpiScaleFactorRoundingPolicy.Floor)

app = QApplication(sys.argv)
window = QtWidgets.QWidget()
# use pyqt5 win10 window size is 100 * 100
# use pyqt6 win10 window size is 125 * 125
window.resize(100, 100)
window.setMinimumSize(100, 100)
window.setMaximumSize(100, 100)
print("width", window.width(), "height", window.height())
window.show()
sys.exit(app.exec())

你看下你系统的分辨率是多少。以及缩放比例

ok。那应该就是Qt6 对缩放比例做了改动。导致的。

win10 推荐缩放比例以及我在使用的缩放比例是 125%,与上面提到的 1.25 倍有着微妙关系,因此我就根据关键字查找相关文档