试图让一个自定义小部件扩展到父级,当我的小部件从QLabel而不是QWidget继承时,它只做我想要的事情。我已经尝试过设置QSizePolicy,但它似乎仍然不起作用
import sys
from PyQt5.QtWidgets import QApplication, QWidget, QHBoxLayout, QVBoxLayout
from mywidgets import MenuLabel, MenuWidget, MainWidget
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("InstaPlus")
outerlayout = QHBoxLayout()
outerlayout.setContentsMargins(0, 0, 0, 0)
outerlayout.setSpacing(0)
menulayout = QVBoxLayout()
menulayout.setContentsMargins(0, 0, 0, 0)
menulayout.setSpacing(0)
menuwidget = MenuWidget()
mainwidget = MainWidget()
menulayout.addWidget(MenuLabel("Menu Item 1"))
menulayout.addWidget(MenuLabel("Menu Item 2"))
menulayout.addWidget(MenuLabel("Menu Item 3"))
menulayout.addWidget(MenuLabel("Menu Item 4"))
menulayout.addWidget(MenuLabel("Menu Item 5"))
menulayout.addStretch()
menuwidget.setLayout(menulayout)
outerlayout.addWidget(menuwidget)
outerlayout.addWidget(mainwidget)
self.setLayout(outerlayout)
if __name__ == "__main__":
app = QApplication(sys.argv)
main = Window()
main.resize(800, 500)
main.show()
sys.exit(app.exec_())
这是我的mywidgets代码
from PyQt5.QtWidgets import QLabel, QWidget, QSizePolicy
class MenuLabel(QLabel):
def __init__(self, title):
super().__init__()
self.title = title
self.setText(self.title)
self.setStyleSheet(open("styles.css").read())
class MenuWidget(QWidget):
def __init__(self):
super().__init__()
self.setAccessibleName("menu")
self.setStyleSheet(open("styles.css").read())
self.setFixedWidth(200)
class MainWidget(QWidget):
def __init__(self):
super().__init__()
self.setAccessibleName("main")
self.setStyleSheet(open("styles.css").read())
以下是从QWidget继承时的布局
这就是我的小部件从QLabel继承的时候
如何让我的小部件从Qwidget继承并像QLabel一样调整大小
这是样式文件
MenuLabel{
background-color: #484848;
color: #dadada;
padding-left: 10px;
padding-top: 5px;
padding-bottom: 5px;
padding-right: 100px;
font-size: 10pt;
font-family: 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', 'Verdana', sans-serif
}
MenuLabel:hover{
background-color: rgba(8, 3, 9, 0.65);
}
[accessibleName="menu"]{
background-color: #484848;
}
[accessibleName="main"]{
background-color: #2e2e2e;
}
无论何时从QWidget或QLabel中创建子类,
MenuWidget
类的大小都完全相同问题是当从QWidget子类化时,设置样式表是不够的。正如官方解释的那样:
如果使用^ {CD2>}作为样式表选择器,请考虑这不是一个好的选择,因为可访问的名称可以是本地化EME>,而不是在样式表中标识类的正确方法。请改用
objectName()
和#objectName {}
选择器。请参阅样式表语法文档中的selector types一章相关问题 更多 >
编程相关推荐