Виджет перекрывает друг друга в GridLayout PySide2

Я пытаюсь создать простую программу, используя GridLayout, все виджеты внутри QWidget окна отображаются и правильно масштабируются, однако LineEdit перекрывает заголовок Label окна.

from PySide2 import QtWidgets, QtCore, QtGui
import sys

class SimGrid(QtWidgets.QWidget):
    def __init__(self):
        super(SimGrid, self).__init__()
        self.setWindowTitle("My attempt at Grid Layout")
        grid = QtWidgets.QGridLayout()
        self.setLayout(grid)

        title = QtWidgets.QLabel("This is some big sample text to fill up")
        title.setAlignment(QtCore.Qt.AlignHCenter)
        text_edit = QtWidgets.QTextEdit()
        success = QtWidgets.QPushButton("Success", self)
        cancel = QtWidgets.QPushButton("Cancel", self)

        grid.addWidget(title, 0, 0, 0, 0)
        grid.addWidget(text_edit, 1, 0, 1, 2)
        grid.addWidget(success, 4, 0)
        grid.addWidget(cancel, 4, 1)
        self.show()

person Sahil    schedule 20.07.2018    source источник


Ответы (1)


Согласно документам, вы используете следующий метод:

void QGridLayout :: addWidget (QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt :: Alignment alignment = ...)

Третий и четвертый параметры указывают количество и столбцы, которые будут занимать, соответственно, в вашем случае заголовок будет занимать 0 строк и 0 столбцов, что неверно.

Используя эти критерии, вы хотите следующее:

import sys
from PySide2 import QtWidgets, QtCore, QtGui


class SimGrid(QtWidgets.QWidget):
    def __init__(self):
        super(SimGrid, self).__init__()
        self.setWindowTitle("My attempt at Grid Layout")
        grid = QtWidgets.QGridLayout()
        self.setLayout(grid)

        title = QtWidgets.QLabel("This is some big sample text to fill up")
        title.setAlignment(QtCore.Qt.AlignHCenter)
        text_edit = QtWidgets.QTextEdit()
        success = QtWidgets.QPushButton("Success", self)
        cancel = QtWidgets.QPushButton("Cancel", self)

        grid.addWidget(title, 0, 0, 1, 2)
        grid.addWidget(text_edit, 1, 0, 1, 2)
        grid.addWidget(success,2, 0, 1, 1)
        grid.addWidget(cancel,  2, 1, 1, 1)
        self.show()


if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    w = SimGrid()
    w.show()
    sys.exit(app.exec_())

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

person eyllanesc    schedule 20.07.2018
comment
это сработало, вы можете мне сказать, почему одна из кнопок больше другой? И AlignCenter тоже не работает. - person Sahil; 20.07.2018
comment
@Sahil Вы хотите, чтобы обе кнопки были одинакового размера? - person eyllanesc; 20.07.2018
comment
@Sahil Я уже обновляю свой ответ, если я помогу вам, не забудьте отметить его как правильный. :) - person eyllanesc; 20.07.2018