有一个简单的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>
当主窗口未最大化时,一切似乎都很好:
整个窗口小部件都可见(注意,红色边框已添加到监视窗口小部件的边缘)。
但是,如果我们最大化主窗口,则会发生以下情况:
看起来像小部件向上移动,小部件的顶部边框消失了,而在底部的边缘下方出现了黑线。
我已经用HBox / VBox / Grid布局对其进行了测试,结果始终相同。如果一列中只有一个小部件,则会发生这种情况。如果我们在该列中再添加一个小部件,则这两个小部件将完全可见。
为什么会发生这种情况以及如何解决此问题?我们不应该在布局的一列中只有一个小部件吗?
操作系统:Windows 10
Qt:5.6.2
PyQt:5.6.0
答案 0 :(得分:1)
我只是通过创建一个新的Qt Widgets Application对其进行了检查,但该问题不存在。要绘制小部件,我使用Qt样式表,如下所示:
QWidget {
border: 1px solid red;
background-color: yellow;
}
当应用程序运行时,它显示的很好,甚至最大化(请参见下面的内容)。重新评估您用来绘制窗口小部件的方法。您可以使用设计器中的“样式表”属性来更改样式表。 另请参阅:Qt Style Sheets Syntax。