Я работаю над PyQt5 GUI, до сих пор у меня только что был опыт работы со скриптами Python, и я не углублялся в создание пользовательских интерфейсов.
GUI придется использовать на разных экранах (возможно также некоторые старые экраны с соотношением сторон 4: 3), и они должны выглядеть красиво в разных размерах.Теперь мой подход к упрощению моей жизни заключался в применении фиксированного соотношения сторон окна и изменении размера различных элементов в соответствии с размером окна.
from PyQt5 import QtCore, QtGui, QtWidgets
class MainWindow(QtWidgets.QMainWindow):
def __init__(self, parent= None):
super().__init__(parent)
self.form_widget = FormWidget(self)
self.setCentralWidget(self.form_widget)
self.resize(200, 400)
self.sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
self.sizePolicy.setHeightForWidth(True)
self.setSizePolicy(self.sizePolicy)
def heightForWidth(self, width):
return width * 2
class FormWidget(QtWidgets.QWidget):
def __init__(self, parent):
super().__init__(parent)
def resizeEvent(self, event):
f = self.font()
temp = event.size().height()
f.setPixelSize(temp / 16)
self.setFont(f)
return super().resizeEvent(event)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
w = MainWindow()
w.show()
sys.exit(app.exec_())
Изменение размеров элементов в соответствии с размером окна работает нормально, но окносоотношение сторон не сохраняется вообще.Я скопировал этот подход с heightForWidth
из старых потоков PyQt4.Разве этот подход больше не работает в PyQt5?Я что-то упустил?