Вы должны установить Stretch в строке 2, но перед этим вы должны исправить строкуSpan в:
grid.addWidget(self.textbox, 0, 0, 0, 3)
grid.addWidget(self.textbox2, 0, 3, 0, 3)
Чтобы понять, давайте рассмотрим документы :
void QGridLayout :: addWidget (QWidget * widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt :: Alignment alignment = ...)
Thisперегруженная функция.
Эта версия добавляет данный виджет в сетку ячеек, охватывающую несколько строк / столбцов.Ячейка начнется с fromRow, fromColumn, охватывающего строки rowSpan и столбцы columnSpan.Виджет будет иметь заданное выравнивание.
Если rowSpan и / или columnSpan равно -1, то виджет расширится до нижнего и / или правого края соответственно.
Тоесть, rowSpan указывает, сколько строк будет занимать виджет, но вы указываете его на 0, чтобы размер больше не обрабатывался макетом, а только позицией, вы должны изменить его на 1.
import sys
from PyQt5 import QtCore, QtGui, QtWidgets
class App(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.title = 'Data visualizing'
self.left, self.top, self.width, self.height = 50, 50, 300, 100
self.initUI()
def initUI(self):
self.central_widget = QtWidgets.QWidget()
self.setCentralWidget(self.central_widget)
# Create textboxs
self.textbox = QtWidgets.QLineEdit(readOnly=True)
self.textbox2 = QtWidgets.QLineEdit(readOnly=True)
# Create buttons
self.button = QtWidgets.QPushButton('Load file 1',
toolTip = 'Click here to browse for the first data file')
self.button.clicked.connect(self.on_click)
self.button2 = QtWidgets.QPushButton('Load file 2',
toolTip = 'Click here to browse for the first data file')
self.button2.clicked.connect(self.on_click)
grid = QtWidgets.QGridLayout(self.centralWidget())
grid.addWidget(self.textbox, 0, 0, 1, 3)
grid.addWidget(self.textbox2, 0, 3, 1, 3)
grid.addWidget(self.button, 1, 1, 1, 1)
grid.addWidget(self.button2, 1, 4, 1, 1)
grid.setRowStretch(2, 1)
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
self.show()
def openFileNameDialog(self):
options = QtWidgets.QFileDialog.Options()
options |= QtWidgets.QFileDialog.DontUseNativeDialog
fileName, _ = QtWidgets.QFileDialog.getOpenFileName(self, "QFileDialog.getOpenFileName()", "",
"All Files (*);;Comma seperated files (*.csv)", options=options)
if fileName:
self.textbox.setText(fileName)
print(fileName)
@QtCore.pyqtSlot()
def on_click(self):
self.openFileNameDialog()
print('PyQt5 button click')
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())
if __name__ == '__main__':
main()