In PyQt, you can resize column widths to fit the contents of a QTableWidget
using the resizeColumnsToContents()
method. This method adjusts the width of each column to fit the longest item in that column. Here's an example of how you can use it:
import sys from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem class MainWindow(QMainWindow): def __init__(self): super().__init__() self.setWindowTitle("Resize Columns Example") self.setGeometry(100, 100, 500, 300) self.table_widget = QTableWidget(self) self.table_widget.setGeometry(50, 50, 400, 200) self.table_widget.setColumnCount(3) self.table_widget.setHorizontalHeaderLabels(["Name", "Age", "Country"]) data = [ ("Alice", "25", "USA"), ("Bob", "30", "Canada"), ("Charlie", "28", "UK") ] for row, (name, age, country) in enumerate(data): self.table_widget.insertRow(row) self.table_widget.setItem(row, 0, QTableWidgetItem(name)) self.table_widget.setItem(row, 1, QTableWidgetItem(age)) self.table_widget.setItem(row, 2, QTableWidgetItem(country)) # Resize columns to fit contents self.table_widget.resizeColumnsToContents() if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() sys.exit(app.exec_())
In this example, we create a simple QTableWidget
with three columns: "Name", "Age", and "Country". We populate the table with some data and then call resizeColumnsToContents()
to automatically adjust the width of each column to accommodate the longest content in that column.
Keep in mind that while this method is convenient, it can sometimes lead to columns that are too wide, especially if the content is much longer in some cells than others. You might want to combine this with setting a maximum width for columns if you need more control over the appearance of your table.
Automatically resize QTableWidget columns to content
QTableWidget
based on their content, use the resizeColumnsToContents
method.pip install PyQt6
from PyQt6.QtWidgets import QApplication, QTableWidget, QTableWidgetItem import sys app = QApplication(sys.argv) table = QTableWidget(3, 3) # 3x3 table table.setHorizontalHeaderLabels(["Column 1", "Column 2", "Column 3"]) # Add some data table.setItem(0, 0, QTableWidgetItem("Hello")) table.setItem(0, 1, QTableWidgetItem("World")) table.setItem(0, 2, QTableWidgetItem("!")) # Automatically resize columns table.resizeColumnsToContents() table.show() sys.exit(app.exec())
Set fixed column width in QTableWidget
setColumnWidth
method.from PyQt6.QtWidgets import QApplication, QTableWidget import sys app = QApplication(sys.argv) table = QTableWidget(3, 3) # 3x3 table table.setHorizontalHeaderLabels(["Column 1", "Column 2", "Column 3"]) # Set fixed width for columns table.setColumnWidth(0, 100) # Column 1 with 100px width table.setColumnWidth(1, 150) # Column 2 with 150px width table.setColumnWidth(2, 200) # Column 3 with 200px width table.show() sys.exit(app.exec())
Resize QTableWidget columns to fit parent widget
QHeaderView.Stretch
.from PyQt6.QtWidgets import QApplication, QTableWidget, QHeaderView import sys app = QApplication(sys.argv) table = QTableWidget(3, 3) # 3x3 table table.setHorizontalHeaderLabels(["Column 1", "Column 2", "Column 3"]) # Set columns to stretch and fill the table table.horizontalHeader().setSectionResizeMode(QHeaderView.SectionResizeMode.Stretch) table.show() sys.exit(app.exec())
Set proportional column resizing in QTableWidget
SectionResizeMode
to each column.from PyQt6.QtWidgets import QApplication, QTableWidget, QHeaderView import sys app = QApplication(sys.argv) table = QTableWidget(3, 3) # 3x3 table table.setHorizontalHeaderLabels(["Column 1", "Column 2", "Column 3"]) # Different resize modes for each column table.horizontalHeader().setSectionResizeMode(0, QHeaderView.SectionResizeMode.Interactive) table.horizontalHeader().setSectionResizeMode(1, QHeaderView.SectionResizeMode.Stretch) table.horizontalHeader().setSectionResizeMode(2, QHeaderView.SectionResizeMode.Fixed) table.setColumnWidth(2, 100) # Fixed width for Column 3 table.show() sys.exit(app.exec())
Fit QTableWidget columns to content when resized
resizeEvent
to a slot.from PyQt6.QtWidgets import QApplication, QTableWidget import sys class AutoResizeTable(QTableWidget): def resizeEvent(self, event): # Resize columns to fit content on resizing super().resizeEvent(event) self.resizeColumnsToContents() app = QApplication(sys.argv) table = AutoResizeTable(3, 3) # 3x3 table table.setHorizontalHeaderLabels(["Column 1", "Column 2", "Column 3"]) # Add sample data table.setItem(0, 0, QTableWidgetItem("LongTextInColumnOne")) table.setItem(0, 1, QTableWidgetItem("Short")) table.setItem(0, 2, QTableWidgetItem("Average")) table.show() sys.exit(app.exec())
Auto-resize QTableWidget columns with signals in PyQt
from PyQt6.QtWidgets import QApplication, QTableWidget, QTableWidgetItem import sys app = QApplication(sys.argv) table = QTableWidget(3, 3) # 3x3 table table.setHorizontalHeaderLabels(["Column 1", "Column 2", "Column 3"]) # Add some data table.setItem(0, 0, QTableWidgetItem("Hello")) table.setItem(0, 1, QTableWidgetItem("World")) table.setItem(0, 2, QTableWidgetItem("!")) # Connect signals for auto-resizing table.horizontalHeader().sectionResized.connect(lambda: table.resizeColumnsToContents()) table.show() sys.exit(app.exec())
Set custom resize mode in QTableWidget
QTableWidget
.from PyQt6.QtWidgets import QApplication, QTableWidget, QHeaderView import sys app = QApplication(sys.argv) table = QTableWidget(3, 3) # 3x3 table table.setHorizontalHeaderLabels(["Column 1", "Column 2", "Column 3"]) # Set custom resize modes for columns table.horizontalHeader().setSectionResizeMode(0, QHeaderView.SectionResizeMode.ResizeToContents) table.horizontalHeader().setSectionResizeMode(1, QHeaderView.SectionResizeMode.Stretch) table.horizontalHeader().setSectionResizeMode(2, QHeaderView.SectionResizeMode.Interactive) table.show() sys.exit(app.exec())
Set minimum and maximum column widths in QTableWidget
setMinimumSectionSize
and setMaximumSectionSize
methods.from PyQt6.QtWidgets import QApplication, QTableWidget, QHeaderView import sys app = QApplication(sys.argv) table = QTableWidget(3, 3) # 3x3 table table.setHorizontalHeaderLabels(["Column 1", "Column 2", "Column 3"]) # Set minimum and maximum widths for columns table.horizontalHeader().setMinimumSectionSize(50) # Min width for all columns table.horizontalHeader().setMaximumSectionSize(200) # Max width for all columns table.show() sys.exit(app.exec())
Resize QTableWidget columns to equal widths
from PyQt6.QtWidgets import QApplication, QTableWidget import sys app = QApplication(sys.argv) table = QTableWidget(3, 3) # 3x3 table table.setHorizontalHeaderLabels(["Column 1", "Column 2", "Column 3"]) # Ensure all columns have equal widths total_width = 300 # Example total width num_columns = 3 column_width = total_width // num_columns # Equal width for each column for i in range(num_columns): table.setColumnWidth(i, column_width) table.show() sys.exit(app.exec())
Manually adjust column width in QTableWidget based on content
react-dnd parallel-processing intl-tel-input message angular-cdk row spring-jdbc productivity-power-tools purge keras-layer