PyQt:无法使用 QTabWidget 实现 QSizePolicy.Minimum

如何解决PyQt:无法使用 QTabWidget 实现 QSizePolicy.Minimum

我有一个应用程序,其中包含一些子小部件的 QWidget 或带有 QSizePolicy.Minimumqframe 会根据所选选项更改其大小。带有 QSizePolicy.Expanding 的第二个小部件占用第一个小部件不需要的区域。所有小部件都包含在 QApplication 窗口中。这适用于 QWidget 或 qframe 作为“容器”小部件。

当用 QTabWidget 替换容器小部件时,即使经过几天的试验,我也没有设法获得 QSizePolicy.Minimum。在附加的 MWE 中 您可以在 QTabWidget 或 qframe 中进行评论以测试差异。第二个扩展小部件由拉伸模拟。单击该按钮可调整包含的子小部件的大小。我确定一定有一个简单的解决方案......

from PyQt5.QtWidgets import (
    QTabWidget,QWidget,qframe,QPushButton,QLabel,QVBoxLayout,QApplication,QSizePolicy)
# ==============================================================================
class MyWidget(QWidget):
    def __init__(self,parent=None):
        QWidget.__init__(self,parent)

        self.lbl = QLabel("Hide me")
        self.but = QPushButton("Hide text",self)
        self.but.setCheckable(True)
        lay_v_wdg = QVBoxLayout(self)
        lay_v_wdg.addWidget(self.lbl)
        lay_v_wdg.addWidget(self.but)
        self.setLayout(lay_v_wdg)
        self.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Minimum)
        self.but.clicked.connect(self.toggle_label)
    # --------------------------------------------------------------------------
    def toggle_label(self) -> None:
        self.lbl.setVisible(self.but.isChecked())
# ==============================================================================
class MyFrame(qframe):
    def __init__(self,parent):
        super(MyFrame,self).__init__(parent)

        self.wdg = MyWidget(self)
        lay_v_wdg = QVBoxLayout(self)
        lay_v_wdg.addWidget(self.wdg)
        self.setLayout(lay_v_wdg)
        self.setFrameStyle(1)    
# ==============================================================================
class MyTab(QTabWidget):
    def __init__(self,parent):
        super(MyTab,self).__init__(parent)

        self.wdg = MyWidget(self)

        self.tab = QTabWidget(self)
        self.tab.setTabPosition(QTabWidget.West)
        self.tab.setSizePolicy(QSizePolicy.Expanding,QSizePolicy.Minimum)
        self.tab.addTab(self.wdg,"A")
        lay_v_tab = QVBoxLayout()
        lay_v_tab.addWidget(self.tab)

        self.setLayout(lay_v_tab)
# ==============================================================================
class TopWidget(QWidget):
    def __init__(self,parent):
        super(TopWidget,self).__init__(parent)
        self.top = MyFrame(self)  # <- select one of 
        # self.top = MyTab(self)  # <- the two
        lay_v_main = QVBoxLayout(self)
        lay_v_main.addWidget(self.top)
        lay_v_main.addStretch(10)  # <- this compresses the other widget
        self.setLayout(lay_v_main)
# ==============================================================================
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    mainw = TopWidget(None)
    app.setActiveWindow(mainw)
    mainw.show()
    sys.exit(app.exec_())

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?