Nov-28-2022, 05:59 PM
(Nov-28-2022, 02:05 PM)Larz60+ Wrote: Is this statement still used when you have, for example, a screen with many widgets, panels, etc. each related, but somewhat independant of the other?
If you have more widgets use layouts.
I've added some widgets to your code for example
import sys from PySide6.QtWidgets import (QApplication, QMainWindow, QWidget, QTableWidget, QTableWidgetItem, QHeaderView, QHBoxLayout, QVBoxLayout, QTextEdit, QSizePolicy) from PySide6.QtGui import QPalette, QColor class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() self.setWindowTitle("Table Widget") self.table = Table() self.table.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Preferred) self.table.define_table() self.table.itemSelectionChanged.connect(self.get_cell) # hbox layout hbox = QHBoxLayout() hbox.addWidget(self.table) # add textedit right to table self.text_edit = QTextEdit(plainText = "Hello World") hbox.addWidget(self.text_edit) #vbox layout vbox = QVBoxLayout() # add hbox to vbox vbox.addLayout(hbox) # add textedit below table self.another_text_edit = QTextEdit(plainText = "Hello World") vbox.addWidget(self.another_text_edit) # central widget central_widget = QWidget() central_widget.setLayout(vbox) self.setCentralWidget(central_widget) self.statusBar().showMessage("Ready") def get_cell(self): widget = self.table index = widget.selectedItems()[0] cell_text = widget.item(index.row(), index.column()).text() self.statusBar().showMessage(f"cell text: {cell_text}") class Table(QTableWidget): def __init__(self, parent=None): super(Table, self).__init__(parent) self.colors = [("Red", "#FF0000"), ("Green", "#00FF00"), ("Blue", "#0000FF"), ("Black", "#000000"), ("White", "#FFFFFF"), ("Electric Green", "#41CD52"), ("Dark Blue", "#222840"), ("Yellow", "#F9E56d")] def get_rgb_from_hex(self, code): code_hex = code.replace("#", "") rgb = tuple(int(code_hex[i:i+2], 16) for i in (0, 2, 4)) return QColor.fromRgb(rgb[0], rgb[1], rgb[2]) def define_table(self): self.setItemDelegate(self.itemDelegate()) self.setRowCount(len(self.colors)) self.setColumnCount(len(self.colors[0]) + 1) self.setHorizontalHeaderLabels(["Name", "Hex Code", "Color"]) for i, (name, code) in enumerate(self.colors): item_name = QTableWidgetItem(name) item_code = QTableWidgetItem(code) item_color = QTableWidgetItem() item_color.setBackground(self.get_rgb_from_hex(code)) self.setItem(i, 0, item_name) self.setItem(i, 1, item_code) self.setItem(i, 2, item_color) hh = self.horizontalHeader() hh.setSectionResizeMode(QHeaderView.ResizeToContents) def main(): app = QApplication(sys.argv) window = MainWindow() window.setGeometry(100, 100, 600, 500) window.show() app.exec() if __name__ == '__main__': main()