自定义小部件在 PyQt5 中保持不可见
Custom Widget stays invisible in PyQt5
我正在尝试使用 PyQt5 创建自定义 QWidget,但似乎缺少一些重要信息。代码本身不会产生任何错误,但每当我尝试将我的自定义小部件之一添加到 MainWindow 的布局时,它就会保持不可见状态。有趣的是,放置在我的自定义小部件中的 QWidget 显示在主窗口中。
我还没有发现其他人遇到完全相同的问题,但我希望有人能向我解释我的代码或对 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()
这个答案可能来得有点晚,但最终我找到了解决我的问题的方法。似乎继承 QWidget 的对象中的函数 "setStyleSheet" 存在错误。这会导致对象永远不会改变它的背景颜色,因此保持不可见。 "setStyleSheet" 的以下重载解决了这个问题:
def setStyleSheet(self,p_str):
super(CustomWidget,self).setStyleSheet(p_str)
self.show()
self.setAutoFillBackground(True)
我正在尝试使用 PyQt5 创建自定义 QWidget,但似乎缺少一些重要信息。代码本身不会产生任何错误,但每当我尝试将我的自定义小部件之一添加到 MainWindow 的布局时,它就会保持不可见状态。有趣的是,放置在我的自定义小部件中的 QWidget 显示在主窗口中。 我还没有发现其他人遇到完全相同的问题,但我希望有人能向我解释我的代码或对 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()
这个答案可能来得有点晚,但最终我找到了解决我的问题的方法。似乎继承 QWidget 的对象中的函数 "setStyleSheet" 存在错误。这会导致对象永远不会改变它的背景颜色,因此保持不可见。 "setStyleSheet" 的以下重载解决了这个问题:
def setStyleSheet(self,p_str):
super(CustomWidget,self).setStyleSheet(p_str)
self.show()
self.setAutoFillBackground(True)