PyQt6 QTableWidget Ganze Zeile statt nur eine Zelle markieren

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Welpe
User
Beiträge: 28
Registriert: Mittwoch 30. Dezember 2020, 10:39

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
Benutzeravatar
__blackjack__
User
Beiträge: 13919
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
“I am Dyslexic of Borg, Your Ass will be Laminated” — unknown
Welpe
User
Beiträge: 28
Registriert: Mittwoch 30. Dezember 2020, 10:39

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
Benutzeravatar
__blackjack__
User
Beiträge: 13919
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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)
“I am Dyslexic of Borg, Your Ass will be Laminated” — unknown
Antworten