当窗口最大化时,QLayout中的QWidget被移动和剪切

时间:2018-07-10 21:52:18

标签: qt pyqt qt5 pyqt5

有一个简单的GUI:具有默认中央窗口小部件的主窗口。向其中添加一个布局,然后将感兴趣的小部件放置到该布局中。

import sys
from matplotlib.backends.backend_qt5agg import FigureCanvas
from matplotlib.figure import Figure
from PyQt5 import QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.uic import loadUiType

FormClass, QtBaseClass = loadUiType('main_window.ui')


class MainWindow(FormClass, QtBaseClass):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.setupUi(self)
        self.fig = Figure(facecolor='yellow', edgecolor='red', linewidth=0.1)
        self.canvas = FigureCanvas(self.fig)
        hbox_layout = QtWidgets.QHBoxLayout(self.centralwidget)
        hbox_layout.addWidget(self.canvas, stretch=2)

app = QtWidgets.QApplication(sys.argv)
main_window = MainWindow()
main_window.show()
sys.exit(app.exec_())

main_window.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>1024</width>
    <height>768</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget"/>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>1024</width>
     <height>21</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <resources/>
 <connections/>
</ui>

当主窗口未最大化时,一切似乎都很好:

enter image description here

整个窗口小部件都可见(注意,红色边框已添加到监视窗口小部件的边缘)。

但是,如果我们最大化主窗口,则会发生以下情况:

enter image description here

看起来像小部件向上移动,小部件的顶部边框消失了,而在底部的边缘下方出现了黑线。

我已经用HBox / VBox / Grid布局对其进行了测试,结果始终相同。如果一列中只有一个小部件,则会发生这种情况。如果我们在该列中再添加一个小部件,则这两个小部件将完全可见。

为什么会发生这种情况以及如何解决此问题?我们不应该在布局的一列中只有一个小部件吗?

操作系统:Windows 10
Qt:5.6.2
PyQt:5.6.0

1 个答案:

答案 0 :(得分:1)

我只是通过创建一个新的Qt Widgets Application对其进行了检查,但该问题不存在。要绘制小部件,我使用Qt样式表,如下所示:

QWidget {
    border: 1px solid red;
    background-color: yellow;
}

当应用程序运行时,它显示的很好,甚至最大化(请参见下面的内容)。重新评估您用来绘制窗口小部件的方法。您可以使用设计器中的“样式表”属性来更改样式表。 另请参阅:Qt Style Sheets Syntax

Normal State Maximized State