【发布时间】:2017-11-04 11:24:29
【问题描述】:
我正在尝试使用 PyQt5 创建一个自定义 QWidget,但似乎我错过了一些重要信息。代码本身不会产生任何错误,但是每当我尝试将我的自定义小部件之一添加到 MainWindow 的布局时,它都会保持不可见。有趣的是,放置在我的自定义小部件中的 QWidget 显示在 MainWindow 中。 我还没有找到遇到完全相同问题的其他人,但我希望有人能向我解释我的代码或对 PyQt5 的理解有什么问题。
import sys
from PyQt5.QtWidgets import *
class CustomWidget(QWidget):
def __init__(self):
super().__init__()
self.layout = QVBoxLayout(self)
self.setLayout(self.layout)
self.innerwidget=QWidget()
self.layout.addWidget(self.innerwidget)
self.innerwidget.setFixedSize(50,50)
self.setFixedSize(100,100)
self.setStyleSheet("background-color:blue;")
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.CentralWidget=QWidget()
self.setCentralWidget(self.CentralWidget)
self.CentralWidget.setStyleSheet("background-color:green;")
self.CentralWidget.resize(1000,600)
self.Layout=QHBoxLayout()
self.CentralWidget.setLayout(self.Layout)
#----Script---------
App=QApplication(sys.argv)
TestWindow=MainWindow()
#This one is there, since I can´t reduce the size of the MainWindow further than 100x100,
# but it doesnt get drawn
TestWidget=CustomWidget()
TestWindow.Layout.addWidget(TestWidget)
#This one is shown correctly
TestWidget2=CustomWidget()
TestWidget2.show()
TestWindow.show()
App.exec()
【问题讨论】:
-
你的例子对我来说很好。你到底期待看到什么?您在哪个平台上进行测试?
-
与子
innerwidget大小相比,这与自定义小部件的大小有关吗? -
我添加了一张在 Windows 10 上执行的代码的图片。左边是主窗口,里面有一个自定义小部件,右边是它自己的自定义小部件。我希望在 MainWindow 中也能看到蓝色方块(代表 CustomWidget)。但是我只看到 InnerWidget(红色方块)。
-
我使用 setFixedSize-Function 只是为了确保我在 CustomWidget-Constructor 中创建的 QWidget 没有 CustomWidget 本身那么大。此外,我可以通过尝试最小化它来验证 MainWindow 中是否存在 CustomWidget。由于我不能将 MainWindow 的大小减小到小于 100x100,我假设 CustomWidget 只是由于某种原因没有被绘制。
-
@eNceo1423。您发布的代码不可能在您的屏幕截图中产生结果。没有一个小部件被赋予红色背景。
标签: python-3.x pyqt5 qwidget