Я пытаюсь использовать несколько горизонтальных sub QScrollAreas с текстом и одним вертикальным контейнером QScrollArea. Идея состоит в том, что текстовая область в горизонтальной подстроке QScrollAreas всегда будет иметь эквивалентную вертикальную высоту, и я хотел бы иметь одну вертикальную QScrollArea для управления данными внутри них.PyQt QScrollArea в QScrollArea
В приведенном ниже коде показано, что горизонтальная подпрограмма QScrollAreas работает, но вертикальная QScrollArea не обнаруживает, что строка, редактируемая внутри виджета внутри нее, не соответствует вертикали. Если изменить
scroll.setWidgetResizable(True)
для вертикального QScrollArea в False, то вертикальная QScrollArea обнаруживает виджет внутри не подходит, но я хочу, чтобы иметь возможность прокручивать все lineEdits вверх и вниз, не родительский виджет. Также я хотел бы, чтобы все полосы прокрутки всегда были видны. Это возможно?
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Widget(QWidget):
def __init__(self, parent= None):
super(Widget, self).__init__()
self.setGeometry(100, 100, 400, 400)
baseWidget = QWidget()
hBox = QHBoxLayout()
hBox.addWidget(self.getWidget())
hBox.addWidget(self.getWidget())
baseWidget.setLayout(hBox)
scroll = QScrollArea()
scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
#when set to False all scrolls are not visible and can only scroll parent widget not the data areas
scroll.setWidgetResizable(True)
scroll.setWidget(baseWidget)
vBox = QHBoxLayout()
vBox.addWidget(scroll)
self.setLayout(vBox)
def getWidget(self):
widget = QWidget()
layout = QVBoxLayout()
for i in range(20):
lineEdit = QLineEdit("row: "+str(i)+" data: "+str(list(range(10))))
lineEdit.setMinimumWidth(250)
layout.addWidget(lineEdit)
widget.setLayout(layout)
scroll = QScrollArea()
scroll.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
scroll.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
scroll.setWidgetResizable(False)
scroll.setWidget(widget)
return scroll
if __name__ == '__main__':
app = QApplication(sys.argv)
dialog = Widget()
dialog.show()