spam me
spam me

Reputation: 21

PyQt6 - allow streching for a particular widget

I'm a newbie to PyQt6. My problem is, I would like to have a window with different tabs and in the first tab "tab_1" the space is divided into 2 columns. The 1st column contains some options (for example filter, boxes etc.) and this column width should remain unchanged with the window size. The 2nd column inhibits a tabular and the number of visible columns differs with the window size.

import sys

from PyQt6 import QtWidgets, QtGui
from PyQt6.QtCore import Qt
from PyQt6.QtGui import QPalette, QColor


class MainWindow(QtWidgets.QMainWindow):

    def __init__(self):
        super().__init__()
        self.setWindowTitle("My App")

        self.tabs = QtWidgets.QTabWidget()
        self.tabs.setTabPosition(QtWidgets.QTabWidget.TabPosition.North)
        self.tabs.setMovable(False)

        # Tab 1
        self.tab_1 = QtWidgets.QWidget()
        self.tabs.addTab(self.tab_1, "tab_1")
        self.tab_1_func()


        self.setCentralWidget(self.tabs)

    def tab_1_func(self):
        """ Overview """
        
        grid_layout = QtWidgets.QGridLayout()
        page_layout = QtWidgets.QHBoxLayout()

        self.tab_1.stacklayout = QtWidgets.QStackedLayout()
       
        page_layout.addLayout(grid_layout)
        page_layout.addLayout(self.tab_1.stacklayout)
        #page_layout.addStretch(0)
        #page_layout.insertStretch(1,0)
        
        #
        # Left Column - Buttons, fitlers etc
        #

        widget_box = QtWidgets.QComboBox()
        widget_box.addItems(['Country', 'Capital', 'Street'])
        grid_layout.addWidget(widget_box, 0, 0)
        
        # Widget 2: Line Input for Filter
        widget_filter = QtWidgets.QLineEdit()
        widget_filter.setPlaceholderText("Enter your text")
        grid_layout.addWidget(widget_filter, 0, 1)

        #grid_layout.setColumnMinimumWidth(1,300)
        grid_layout.setColumnStretch(3,1)

        
        # Widget 3: Data
        data = [
            ('France', 'Paris', 'Rue de X'),
            ('United Kingdom', 'London', 'Road X'),
            ('Italy', 'Rome', 'Strade X'),
            ('Germany', 'Berlin', 'Straße X')
        ]
        
        self.tableWidget = QtWidgets.QTableWidget(self)
        N_row = 4
        self.tableWidget.setRowCount(N_row) 

        N_column = 3
        self.tableWidget.setColumnCount(N_column)
        self.tableWidget.setHorizontalHeaderLabels(['Country', 'Capital', 'Street'])
        for row in range(N_row):
            for column in range(N_column):
                item = QtWidgets.QTableWidgetItem(data[row][column])
                self.tableWidget.setItem(row, column, item)

        # add the widget and connecting widgets together directly
        page_layout.addWidget(self.tableWidget)
        page_layout.addStretch(1)


        
        self.tab_1.setLayout(page_layout)

Currently, the only option I found to fix the 1st column is to set page_layout.addStretch(1) near the end. But this fix the size of tabular as well. It would be great to get a hint, what's my error here. Thanks.

Upvotes: 0

Views: 70

Answers (0)

Related Questions