Python 如果用户调整了窗口的大小,如何使窗口中的Qt小部件自动扩展其大小?
我看到了一个解决方案,如果每个小部件都在一个布局上,但在我的程序中,我没有使用任何布局。如果我调整程序窗口的大小,如何使QPushButtons和Qlabel自动调整大小 一些代码:Python 如果用户调整了窗口的大小,如何使窗口中的Qt小部件自动扩展其大小?,python,pyqt,Python,Pyqt,我看到了一个解决方案,如果每个小部件都在一个布局上,但在我的程序中,我没有使用任何布局。如果我调整程序窗口的大小,如何使QPushButtons和Qlabel自动调整大小 一些代码: from PyQt5.QtWidgets import QApplication, QPushButton, QMainWindow, QLabel from PyQt5 import QtCore import sys class Window(QMainWindow): def __init__(se
from PyQt5.QtWidgets import QApplication, QPushButton, QMainWindow, QLabel
from PyQt5 import QtCore
import sys
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Resizable Widgets")
self.setGeometry(500, 200, 300, 100)
self.UiComponents()
self.show()
def UiComponents(self):
label = QLabel("Label", self)
label.setGeometry(0, 0, 300, 50)
label.setAlignment(QtCore.Qt.AlignCenter | QtCore.Qt.AlignVCenter)
button = QPushButton("Button", self)
button.setGeometry(100, 50, 100, 40)
if __name__ == "__main__":
App = QApplication(sys.argv)
window = Window()
sys.exit(App.exec_())
如果不使用布局,它可能如下所示:
import sys
from PyQt5.QtWidgets import QApplication, QPushButton, QMainWindow, QLabel
from PyQt5 import QtCore
class Window(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("Resizable Widgets")
# self.setGeometry(500, 200, 300, 100)
self.w = 300
self.h = 100
self.resize(self.w, self.h)
self.setMinimumSize(self.w/2, self.h/2)
self.widthFactor = 1
self.heightFactor = 1
self.UiComponents()
def UiComponents(self):
self.label = QLabel("Label", self)
# label.setGeometry(0, 0, 300, 50)
self.label.setStyleSheet("font: {}pt Arial;".format(20*self.heightFactor))
self.label.resize(self.w*self.widthFactor, self.h*0.25*self.heightFactor)
self.label.setAlignment(QtCore.Qt.AlignCenter) # | QtCore.Qt.AlignVCenter)
self.button = QPushButton("Button", self)
# button.setGeometry(100, 50, 100, 40)
self.button.resize(self.w*0.25*self.widthFactor, self.h*0.2*self.heightFactor)
def resizeEvent(self, event):
self.widthFactor = self.rect().width() / 300
self.heightFactor = self.rect().height()/ 100
self.label.resize(self.w*self.widthFactor, self.h*0.25*self.heightFactor)
self.label.move(self.rect().center() - self.label.rect().center() - QtCore.QPoint(0, self.h/4*self.heightFactor))
self.label.setStyleSheet("font: {}pt Arial;".format(20*self.heightFactor))
self.button.resize(self.w*0.25*self.widthFactor, self.h*0.2*self.heightFactor)
self.button.move(self.rect().center() - self.button.rect().center() - QtCore.QPoint(0, -self.h*0.3*self.heightFactor))
super(Window, self).resizeEvent(event)
if __name__ == "__main__":
App = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(App.exec_())
等待10分钟如果我没有要求链接,请将问题中的MRE作为一个版本发布。阅读@CugureanuChiril你肯定已经回答了你自己的问题:使用布局。不使用布局是一个非常常见的新手错误。首先,它看起来很简单,但很快就会使许多事情变得比需要的复杂得多。如果你现在花一点时间学习如何正确使用布局,从长远来看,你会得到很大的回报。好的,但是有人能在我的代码中给我展示一下布局的实现吗?非常感谢@S.Nick。这有助于我更好地理解Python。再次感谢兄弟!