как я могу изменить размер QGridLayout() как по горизонтали, так и по вертикали?

Я могу успешно получить правильный макет с помощью кода ниже, как я могу изменить размер этого QGridLayout по горизонтали и вертикали?

self._s_q0= QLabel(u'what is your favorite color?')
self._e_q0 = QLineEdit(self)
self._e_q0.setText("yellow is the best color I can think of")

self._s_q1= QLabel(u'what is your favorite animal?')
self._e_q1 = QLineEdit(self)
self._e_q1.setText("cat or dog")

self._s_q2= QLabel(u'do you like swimming?')
self._e_q2 = QLineEdit(self)
self._e_q2.setText("not at all")

self._s_q3= QLabel(u'what date is it today?')
self._e_q3 = QLineEdit(self)
self._e_q3.setText("i dont know, you can ask Tom, he has a cellphone with him right now")



self._groupData = QGroupBox("100 questions list", self)
self._groupData_layout = QGridLayout()
self._groupData.setLayout(self._groupData_layout)



self._groupData_layout.addWidget(self._s_q0, 0, 0)
self._groupData_layout.addWidget(self._e_q0, 0, 1)

self._groupData_layout.addWidget(self._s_q1, 1, 0)
self._groupData_layout.addWidget(self._e_q1, 1, 1)        

self._groupData_layout.addWidget(self._s_q2, 2, 0)
self._groupData_layout.addWidget(self._e_q2, 2, 1)

self._groupData_layout.addWidget(self._s_q3, 3, 0)
self._groupData_layout.addWidget(self._e_q3, 3, 1)

-----------------------

Добавьте больше описания. Я могу получить макет правильно, макет, сгенерированный кодом, выглядит следующим образом.

Ширина этого макета слишком велика, как я могу уменьшить его размер, но не изменить размер шрифта, как я могу добавить полосу прокрутки в этот QGridLayout?

То же самое для высоты, есть 100 вопросов, QGridLayout будет слишком длинным, чтобы показать их все. Как изменить размер QGridLayout, полосы прокрутки?

На изображении ниже представлен окончательный результат, который мне нужен

Показывайте только часть макета, чтобы сэкономить место для пользовательского интерфейса. Перетащите полосу прокрутки, чтобы показать другую часть этого макета. Я не знаю, как это сделать в коде, просто отредактируйте картинку с помощью Paint.


person Jack    schedule 24.10.2017    source источник
comment
Вы можете показать изображение того, что вы получаете и что вы хотите получить, также было бы здорово поделиться своим проектом и изображениями через github или аналогичный   -  person eyllanesc    schedule 24.10.2017
comment
Ваше описание очень расплывчато, поэтому я прошу изображения   -  person eyllanesc    schedule 24.10.2017
comment
Полностью отредактировал этот вопрос, чтобы сделать его более понятным, также добавлена ​​ссылка на изображение.   -  person Jack    schedule 24.10.2017
comment
Изображение кажется правильным, что вы хотите изменить? Или это образ того, что вы хотите получить? Если да, то он показывает образ того, что вы получаете с вашим текущим кодом   -  person eyllanesc    schedule 24.10.2017
comment
Я попытался проверить ваш код и не вижу никаких неудобств: imgur.com/a/zebwc   -  person eyllanesc    schedule 24.10.2017
comment
Это не совсем то, что я хочу с точки зрения ширины и высоты макета. Для ширины макета она слишком широкая, лучше, если я смогу изменить ширину, но не уверен, что добавление полосы прокрутки — лучшая идея. Что касается высоты макета, та же проблема, у меня может быть 100 вопросов для списка, что очень долго, чтобы показать их все, лучше, если я смогу использовать полосу прокрутки.   -  person Jack    schedule 24.10.2017
comment
Покажите изображение того, что вы хотите получить, пожалуйста, сделайте это, я уже много раз просил и не делайте этого, неудобно каждый раз просить одно и то же.   -  person eyllanesc    schedule 24.10.2017
comment
Не уверен, что это ясно сейчас, вы знаете, как это решить?   -  person Jack    schedule 25.10.2017
comment
Вот что вам нужно: imgur.com/a/54174   -  person eyllanesc    schedule 25.10.2017
comment
Большое спасибо, не могли бы вы поделиться кодом, который вы добавили?   -  person Jack    schedule 25.10.2017


Ответы (1)


Первая задача, которую нужно сделать, это создать диаграмму, показывающую структуру виджетов, в этом случае мы можем использовать следующую диаграмму:

.
└── groupbox
    └── scrollarea
        └── contents
            ├── form
            └── spaceritem

Затем вы должны обрабатывать определенные политики для обработки размеров, в следующей части показан полученный код.

Код:

class GroupBox(QGroupBox):
    def __init__(self, *args, **kwargs):
        QGroupBox.__init__(self, *args, **kwargs)
        vlayout = QVBoxLayout(self)
        scrollArea = QScrollArea(self)
        scrollArea.setWidgetResizable(True)
        self.scrollAreaWidgetContents = QWidget()
        scrollArea.setWidget(self.scrollAreaWidgetContents)
        vlayout.addWidget(scrollArea)
        hlayout = QHBoxLayout(self.scrollAreaWidgetContents)
        flayout = QFormLayout()
        hlayout.addLayout(flayout)
        hlayout.addItem(QSpacerItem(170, 20, QSizePolicy.Expanding, QSizePolicy.Minimum))
        for i in range(100):
            le = QLineEdit(self.scrollAreaWidgetContents)
            le.setText("i dont know, you can ask Tom, he has a cellphone with him right now")
            le.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Fixed)
            flayout.addRow("what date is it {}".format(i), le)


if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    app.setStyle("fusion")
    w = QWidget()
    w.setLayout(QVBoxLayout())
    g = GroupBox("100 questions list")
    w.layout().addWidget(g)
    w.show()
    sys.exit(app.exec_())

Скриншот:

введите здесь описание изображения

person eyllanesc    schedule 24.10.2017