Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pyqt5选项卡区域未填充整个可用空间_Python_Python 3.x_Pyqt_Pyqt5_Qscrollarea - Fatal编程技术网

Python pyqt5选项卡区域未填充整个可用空间

Python pyqt5选项卡区域未填充整个可用空间,python,python-3.x,pyqt,pyqt5,qscrollarea,Python,Python 3.x,Pyqt,Pyqt5,Qscrollarea,我正在试验一个图形用户界面-我想有滚动条和标签。我将滚动条修改为“最外层”的小部件,内部有一个QTabWidget,反之亦然:QTabWidget有一个QWidget选项卡,而QScrollArea的父项就是该选项卡。简而言之,我无法使滚动区域展开以填充可用空间。下面有一些评论说明了我所做的一切。规模政策的调整似乎无济于事。 我看过其他人发布的类似问题,特别是 我从中学到了基础知识。 此外,上述代码行为的一个线索是,qscrollara实际使用的区域与Color2类的sizeHint有某种关联。

我正在试验一个图形用户界面-我想有滚动条和标签。我将滚动条修改为“最外层”的小部件,内部有一个QTabWidget,反之亦然:QTabWidget有一个QWidget选项卡,而QScrollArea的父项就是该选项卡。简而言之,我无法使滚动区域展开以填充可用空间。下面有一些评论说明了我所做的一切。规模政策的调整似乎无济于事。 我看过其他人发布的类似问题,特别是

我从中学到了基础知识。
此外,上述代码行为的一个线索是,
qscrollara
实际使用的区域与
Color2
类的
sizeHint
有某种关联。我有一个滚动条自己工作的例子很好。。。我不理解的只是他们在
QTabWidget
选项卡中的行为。有什么建议吗?非常感谢

问题在于您没有使用布局在选项卡内设置QScrollArea。当您确定一个小部件是另一个小部件的父部件时,您只是指示子部件的坐标系相对于父部件,而不是它将采用父部件的大小,因此您必须使用布局,因为它处理大小

# -*- coding: utf-8 -*-
"""
Created on Fri Nov 17 07:07:08 2017

@author: Erik
"""

import sys
from PyQt5.QtWidgets import QLayout, QVBoxLayout ,QTabWidget, QMainWindow,QApplication, QWidget, QSizePolicy, QScrollArea
from PyQt5.QtGui import QColor, QPalette
from PyQt5.QtCore import QSize

class Color2(QWidget):
    def __init__(self, color, *args, **kwargs):
        super(Color2, self).__init__(*args, **kwargs)
        self.setAutoFillBackground(True)
        palette = self.palette()
        palette.setColor(QPalette.Window, QColor(color))
        self.setPalette(palette)
        self.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum))

    def minimumSizeHint(self):
        return QSize(250,150)

class MyTableWidget(QWidget):
    def __init__(self, parent):   
        super(QWidget, self).__init__(parent)
        self.layout = QVBoxLayout(self)
        self.tabs = QTabWidget(self)      
        self.layout.addWidget(self.tabs)

    def addTab(self, widget, text):
        self.tabs.addTab(widget, text)
        widget.setAutoFillBackground(True)
        my_yellow = QColor.fromHsl(35, 255, 153, 128 )
        dark_blue = QColor.fromHsl(211, 196, 38, 255)
        widget.palette().setColor(QPalette.Window, dark_blue)
        widget.palette().setColor(QPalette.WindowText, my_yellow)

class Example(QMainWindow):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):               

        self.statusBar().showMessage('Ready')
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Statusbar')
        self.table_widget = MyTableWidget(self)
        self.tab1 = QWidget()        
        self.tab2 = QWidget()
        self.table_widget.addTab(self.tab1, "Tab1")
        self.table_widget.addTab(self.tab2, "Tab2")
        lay = QVBoxLayout(self.tab1)

        self.scrollArea = QScrollArea()
        lay.addWidget(self.scrollArea)
        self.scrollArea.setWidgetResizable(True)
        self.scrollAreaWidgetContents = QWidget()
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)

        self.verticalLayout = QVBoxLayout(self.scrollAreaWidgetContents)
        self.verticalLayout.addWidget(Color2('blue'))
        self.verticalLayout.addWidget(Color2('red'))
        self.verticalLayout.insertStretch(-1)
        self.verticallayout2 = QVBoxLayout(self.tab2)
        self.verticallayout2.addWidget(Color2('green'))

        self.scrollArea.setWidget(self.scrollAreaWidgetContents)

        self.setCentralWidget(self.table_widget)
        self.show()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

太棒了!再次感谢!它是完美的。我需要回答一些问题以获得更高的声誉分数。我将您的标记为已回答,但不会显示,因为我的分数太低:/
# -*- coding: utf-8 -*-
"""
Created on Fri Nov 17 07:07:08 2017

@author: Erik
"""

import sys
from PyQt5.QtWidgets import QLayout, QVBoxLayout ,QTabWidget, QMainWindow,QApplication, QWidget, QSizePolicy, QScrollArea
from PyQt5.QtGui import QColor, QPalette
from PyQt5.QtCore import QSize

class Color2(QWidget):
    def __init__(self, color, *args, **kwargs):
        super(Color2, self).__init__(*args, **kwargs)
        self.setAutoFillBackground(True)
        palette = self.palette()
        palette.setColor(QPalette.Window, QColor(color))
        self.setPalette(palette)
        self.setSizePolicy(QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Maximum))

    def minimumSizeHint(self):
        return QSize(250,150)

class MyTableWidget(QWidget):
    def __init__(self, parent):   
        super(QWidget, self).__init__(parent)
        self.layout = QVBoxLayout(self)
        self.tabs = QTabWidget(self)      
        self.layout.addWidget(self.tabs)

    def addTab(self, widget, text):
        self.tabs.addTab(widget, text)
        widget.setAutoFillBackground(True)
        my_yellow = QColor.fromHsl(35, 255, 153, 128 )
        dark_blue = QColor.fromHsl(211, 196, 38, 255)
        widget.palette().setColor(QPalette.Window, dark_blue)
        widget.palette().setColor(QPalette.WindowText, my_yellow)

class Example(QMainWindow):

    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):               

        self.statusBar().showMessage('Ready')
        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Statusbar')
        self.table_widget = MyTableWidget(self)
        self.tab1 = QWidget()        
        self.tab2 = QWidget()
        self.table_widget.addTab(self.tab1, "Tab1")
        self.table_widget.addTab(self.tab2, "Tab2")
        lay = QVBoxLayout(self.tab1)

        self.scrollArea = QScrollArea()
        lay.addWidget(self.scrollArea)
        self.scrollArea.setWidgetResizable(True)
        self.scrollAreaWidgetContents = QWidget()
        self.scrollArea.setWidget(self.scrollAreaWidgetContents)

        self.verticalLayout = QVBoxLayout(self.scrollAreaWidgetContents)
        self.verticalLayout.addWidget(Color2('blue'))
        self.verticalLayout.addWidget(Color2('red'))
        self.verticalLayout.insertStretch(-1)
        self.verticallayout2 = QVBoxLayout(self.tab2)
        self.verticallayout2.addWidget(Color2('green'))

        self.scrollArea.setWidget(self.scrollAreaWidgetContents)

        self.setCentralWidget(self.table_widget)
        self.show()

if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())