更改 MainWindow [duplicate] 的大小时自动重新调整小部件的大小

Automatic readjust size of widgets when changing size of MainWindow [duplicate]

提问人:Dominik 提问时间:11/15/2023 更新时间:11/16/2023 访问量:44

问:

我用QtDesigner设计了一个PyQt5 GUI(MainWindow)。 因此,我将 Widget “拖放”到 MainWindow 中,并将它们放在我想要的位置。

到目前为止,一切都很好。

但是,当我想在全屏中打开应用程序时,这些小部件没有调整大小。

一段时间后的研究时间,似乎我做了一个哎呀,因为我没有使用任何特定的布局......我说得对吗?

但我仍然希望有人以前遇到过同样的问题,也许可以解决它。 我自己也尝试了几件事,比如将小部件的 SizePolicy 设置为扩展。但没有任何效果。

我还提供了一个简约的代码,它有相同的错误。

Python 脚本:

from PyQt5 import QtWidgets, uic
import sys
class Ui(QtWidgets.QMainWindow):
    def __init__(self):
        super(Ui, self).__init__() # Call the inherited classes __init__ method
        uic.loadUi('Test.ui', self) # Load the .ui file
        self.show() # Show the GUI
        self.button1.clicked.connect(self.button1_clicked)

    def button1_clicked(self):
        self.label1.setText("Who is there?")
        
app = QtWidgets.QApplication(sys.argv)
window = Ui()
app.exec_()

Test.ui的

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>931</width>
    <height>600</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QPushButton" name="button1">
    <property name="geometry">
     <rect>
      <x>300</x>
      <y>160</y>
      <width>261</width>
      <height>61</height>
     </rect>
    </property>
    <property name="text">
     <string>Knock Knock</string>
    </property>
   </widget>
   <widget class="QLabel" name="label1">
    <property name="geometry">
     <rect>
      <x>330</x>
      <y>250</y>
      <width>221</width>
      <height>61</height>
     </rect>
    </property>
    <property name="text">
     <string>-----------------------------------</string>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>931</width>
     <height>22</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

有人可以帮我吗,或者除了使用特定的布局之外没有其他方法吗?

问候:)

python-3.x 用户界面 pyqt pyqt5

评论

0赞 musicamante 11/16/2023
您的“布局”只是您将小部件放置在特定的几何形状(位置和大小)上;相反,您需要正确使用布局管理器,您也可以从 Designer 中执行此操作。请记住,小组件框中显示的布局仅用作子布局(嵌套到其他布局中),窗口或容器的主布局必须在选择容器后使用上下文菜单(或工具栏按钮)进行设置,而不是其项。

答:

1赞 r-log 11/16/2023 #1

嗯,这取决于你是如何创建布局的。您是否将 MainWindow 对象设置为网格布局?如果您的小组件未调整大小,则可能是您没有设置 MainWindow 对象布局。如果您已经放置了网格布局,并且必须选择您的 MainWindow 对象PICTURE,它应该在左上角显示为灰色

1赞 Tim Roberts 11/16/2023 #2

我不确定你所说的“特定布局”是什么意思,但这句话准确地描述了你在这里所做的事情——你已经直接用特定的 X 和 Y 坐标放置和调整了每个组件的大小。此处没有代码可以进行任何调整大小。使用Qt的正确方法是使用布局。然后,布局管理器将为您管理所有调整大小。掌握布局和尺寸的理念需要一点时间,但结果非常值得付出努力。您再也不用担心 X 和 Y。

以下是布局指南:

https://doc.qt.io/qt-6/layout.html