Seite 1 von 1

PyQt6 QTableWidget Ganze Zeile statt nur eine Zelle markieren

Verfasst: Freitag 17. Mai 2024, 20:21
von Welpe
Hallo,

ich habe eine Tabelle mit dem QTableWidget erstellt. Klicke ich in diese Tabelle, wird die entsprechende Zelle markiert.
Anstatt einer Zelle möchte ich gerne die komplette Zeile markiert haben (rein aus optischen Gründen)

UI Datei

Code: Alles auswählen

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>368</width>
    <height>294</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="QTableWidget" name="tableWidget">
    <property name="geometry">
     <rect>
      <x>10</x>
      <y>10</y>
      <width>351</width>
      <height>271</height>
     </rect>
    </property>
    <row>
     <property name="text">
      <string>Zeile 1</string>
     </property>
    </row>
    <row>
     <property name="text">
      <string>Zeile 2</string>
     </property>
    </row>
    <row>
     <property name="text">
      <string>Zeile 3</string>
     </property>
    </row>
    <row>
     <property name="text">
      <string>Zeile 4</string>
     </property>
    </row>
    <row>
     <property name="text">
      <string>Zeile 5</string>
     </property>
    </row>
    <column>
     <property name="text">
      <string>Name</string>
     </property>
    </column>
    <column>
     <property name="text">
      <string>Ort</string>
     </property>
    </column>
    <column>
     <property name="text">
      <string>Jahr</string>
     </property>
    </column>
    <item row="0" column="0">
     <property name="text">
      <string>Max</string>
     </property>
    </item>
    <item row="0" column="1">
     <property name="text">
      <string>Berlin</string>
     </property>
    </item>
    <item row="0" column="2">
     <property name="text">
      <string>1958</string>
     </property>
    </item>
    <item row="1" column="0">
     <property name="text">
      <string>Lisa</string>
     </property>
    </item>
    <item row="1" column="1">
     <property name="text">
      <string>München</string>
     </property>
    </item>
    <item row="1" column="2">
     <property name="text">
      <string>2004</string>
     </property>
    </item>
    <item row="2" column="0">
     <property name="text">
      <string>Hannes</string>
     </property>
    </item>
    <item row="2" column="1">
     <property name="text">
      <string>Hamburg</string>
     </property>
    </item>
    <item row="2" column="2">
     <property name="text">
      <string>1999</string>
     </property>
    </item>
    <item row="3" column="0">
     <property name="text">
      <string>Hildegard</string>
     </property>
    </item>
    <item row="3" column="1">
     <property name="text">
      <string>Bremen</string>
     </property>
    </item>
    <item row="3" column="2">
     <property name="text">
      <string>1952</string>
     </property>
    </item>
    <item row="4" column="0">
     <property name="text">
      <string>Olaf</string>
     </property>
    </item>
    <item row="4" column="1">
     <property name="text">
      <string>Kassel</string>
     </property>
    </item>
    <item row="4" column="2">
     <property name="text">
      <string>1987</string>
     </property>
    </item>
   </widget>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>
Der Beispielcode

Code: Alles auswählen

import sys
from PyQt6.uic import loadUi
from PyQt6.QtWidgets import QApplication, QMainWindow, QTableWidget

class MyApp(QMainWindow):
    def __init__(self):
        super().__init__()
        loadUi('myapp.ui', self)

        # Tabelle Einstellungen
        self.tableWidget.setColumnWidth(0, 100)
        self.tableWidget.setColumnWidth(1, 100)
        self.tableWidget.setColumnWidth(2, 50)

        # soll beim Klick auf eine Zelle die ganze Zeile auswählen
        #self.tableWidget.setSelectionBehavior(QTableWidget.selectRow)


if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = MyApp()
    window.show()
    sys.exit(app.exec())
Klickt man z.B. links auf "Zeile 1" wird die ganze Zeile markiert, klickt man in ein anderes Feld, wird nur dieses markiert.
Egal wo ich hin klicke, ich möchte das immer die ganze Zeile markiert wird. Hat jemand eine Idee?
Meine Versuche funktionieren leider nicht und im Netz finde ich nur Beispiele für PyQt4 und PyQt5, das funktioniert in der 6er Version anscheinend aber nicht mehr.
https://stackoverflow.com/questions/778 ... ew-in-pyqt

Re: PyQt6 QTableWidget Ganze Zeile statt nur eine Zelle markieren

Verfasst: Freitag 17. Mai 2024, 23:31
von __blackjack__
@Welpe: Was heisst „funktioniert anscheinend aber nicht mehr“? Du hast da ja eine auskommentierte Zeile drin, die offensichtlich falsch ist, denn die `setSelectionBehavior()`-Methode erwartet eine Konstante und keine Methode. Und diese Konstante gibt es auch in Qt6 noch.

Re: PyQt6 QTableWidget Ganze Zeile statt nur eine Zelle markieren

Verfasst: Montag 20. Mai 2024, 17:14
von Welpe
Ich habe diese ominöse Konstante gesucht und damit Stunden verbracht da mein Englisch leider für den Popo ist.
Um anderen das lange Suchen zu ersparen, hier meine Lösung dafür:

Code: Alles auswählen

self.tableWidget.setSelectionBehavior(QTableWidget.SelectionBehavior(1))
SelectionBehavior gibt wohl an, was beim klick in die Tabelle ausgewählt wird.
0 - wählt einzelne Zellen aus (items)
1 - wählt Zeilen aus (rows)
2 - wähl Spalten aus (columns)

nachlesen kann man das hier:
https://www.riverbankcomputing.com/stat ... onBehavior

Re: PyQt6 QTableWidget Ganze Zeile statt nur eine Zelle markieren

Verfasst: Montag 20. Mai 2024, 18:55
von __blackjack__
@Welpe: Du bist soooo nahe dran. In der Dokumentation steht doch dass das „Member“ sind:

Code: Alles auswählen

self.tableWidget.setSelectionBehavior(QTableWidget.SelectionBehavior.SelectRows)