Python

Hoe PyQt QTableWidget te gebruiken

Hoe PyQt QTableWidget te gebruiken
Een tabel wordt gebruikt om gegevens in een gestructureerd formaat weer te geven, volgens rijen en kolommen. De QTableWidget klasse van PyQt kan in Python worden gebruikt om gegevens in tabelvorm weer te geven voor taken met betrekking tot onderzoek of gegevensanalyse. De inhoud van de tabel kan worden gegenereerd vanuit verschillende soorten opslag, zoals tweedimensionale lijsten of tabellen, databasetabellen, JSON-bestanden, enz.  U kunt een of meer tabellen maken met QTableWidget in de PyQt-toepassing. Deze tutorial laat zien hoe te gebruiken QTableWidget om verschillende soorten tabellen te maken met behulp van het Python-script.

Noodzakelijke methoden

De QTableWidget klasse bevat veel methoden om taken uit te voeren die verband houden met het maken van tabellen. Enkele van de meest gebruikte methoden van deze klasse worden hieronder uitgelegd:

Methode Naam: Doel
setRijCount() Gebruikt om het aantal rijen te definiëren.
setColumnCount() Gebruikt om het aantal kolommen te definiëren.
setHorizontalHeaderLabels() Wordt gebruikt om de koplabels van de tabel in te stellen.
setItem() Wordt gebruikt om de celwaarde van de tabel in te stellen.
resizeColumnsToContents() Wordt gebruikt om de grootte van de kolommen van de tabel te wijzigen op basis van de inhoud.
resizeRowsToContents() Wordt gebruikt om het formaat van de rijen van de tabel te wijzigen op basis van de inhoud.
setMinimumBreedte() Wordt gebruikt om de minimale breedte van de tafel in te stellen.
setMinimumHoogte() Wordt gebruikt om de minimale hoogte van de tafel in te stellen.
tonen() Wordt gebruikt om de tafel weer te geven.

QTableWidget-gebruik

De volgende secties bieden eenvoudige voorbeelden om uit te leggen hoe u een tabel in de PyQt-toepassing maakt met behulp van statische gegevens en lijstgegevens.

Voorbeeld 1: Maak een eenvoudige tabel met statische gegevens

Het volgende script maakt een tabel met statische gegevens met vijf rijen en vier kolommen met behulp van de QTableWidget klasse. Twee voor lussen met bereikwaarden zijn in het script gebruikt om de statische gegevens aan de tabelcellen toe te voegen. De rij- en kolomposities van elke cel zijn toegevoegd als de inhoud van elke cel. De QDesktopWidget wordt in het script gebruikt om het venster met de tabel in het midden van het scherm weer te geven.

# Importeer benodigde bibliotheken
import systeem
van PyQt5.QtWidgets importeren QApplication, QMainWindow, QTableWidget, QTableWidgetItem, QDesktopWidget
van PyQt5.QtCore import QSize
# Definieer klasse om de tabel met statische gegevens te maken
klasse SimpleTable(QMainWindow):
def __init__(zelf):
# Bel de bovenliggende constructor
super().__in het__()
# Stel de grootte en titel van het venster in
zelf.setMinimumSize(QSize(420, 150))
zelf.setWindowTitle("Eenvoudige tabel met statische gegevens")
# Maak de tabel met de benodigde eigenschappen
table = QTableWidget(zelf)
tafel.setColumnCount(4)
tafel.setRowCount(5)
tafel.setMinimumBreedte(500)
tafel.setMinimumHoogte(500)
# Stel de tabelkoppen in
tafel.setHorizontalHeaderLabels(["Header-1", "Header-2", "Header-3", "Header-4"])
# Stel de tabelwaarden in
voor i binnen bereik (5):
voor j in bereik (4) :
tafel.setItem(i, j, QTableWidgetItem("Rij-" + str(i+1) + " , Col-" + str(j+1)))
# Wijzig de grootte van de rijen en kolommen op basis van de inhoud
tafel.resizeColumnsToContents()
tafel.resizeRowsToContents()
# Toon de tafel
tafel.tonen()
# Geef het venster in het midden van het scherm weer
winnen = zelf.frameGeometrie()
pos = QDesktopWidget().beschikbaar Geometrie().centrum()
winnen.moveCenter(pos)
zelf.bewegen (winnen).linksboven())
zelf.tonen()
# Maak een app-object en voer de app uit
app = QApplicatie(sys.argv)
mw = EenvoudigeTabel()
mw.tonen()
app.exec()

Het volgende venster met een tabel zal verschijnen, het bovenstaande script wordt uitgevoerd. Volgens de waarden van de voor loops, de celwaarde van de eerste rij en de eerste kolom is 'Rij-1, Col-1,' en de celwaarde van de laatste rij en laatste kolom is 'Rij-5, Col-4.'

Voorbeeld 2: Tabel maken met knopinfo met behulp van woordenboek- en lijstgegevens

Het volgende script maakt een tabel met de inhoud van een Python-woordenboek en lijst met behulp van de QTableWidget klasse. Het script voegt ook een tooltiptekst toe voor de tabelkop. Een Python-woordenboek met de naam merken wordt ook gedeclareerd in het script. De cursuscodes worden gebruikt als de belangrijkste waarden van het woordenboek. Er wordt een Python-lijst gedeclareerd om de student-ID's te definiëren. De sleutelwaarden van het woordenboek worden toegevoegd aan de kop van de tabel, de waarden van de lijst worden toegevoegd aan de eerste kolom van de tabel en de waarden van het woordenboek worden toegevoegd aan de andere kolommen van de tabel.

# Importeer benodigde modules
import systeem
van PyQt5.QtWidgets importeren QApplication, QTableWidget, QTableWidgetItem, QDesktopWidget
# Declareer een woordenboekvariabele met tekens
cijfers = 'CSE-401': [78, 93, 67, 88, 78],
'CSE-404': [90, 59, 82, 73, 89],
'CSE-406': [81, 80, 74, 83, 67],
'CSE-407': [81, 80, 98, 83, 72]
klasse TableFromList(QTableWidget):
def __init__(zelf, data, *args):
# Roep bovenliggende constructor
QTableWidget.__init__(zelf, *args)
# Declareer een lijst van de studenten-ID's
zelf.ID_list = ['0189945', '0154590', '0196734', '0185611', '0178956']
# Stel de benodigde configuraties voor de tafel in
zelf.gegevens = gegevens
zelf.resizeColumnsToContents()
zelf.resizeRowsToContents()
zelf.setColumnWidth(0, 100)
voor i in bereik (4):
zelf.setColumnWidth(i, 80)
zelf.setMinimumBreedte(400)
zelf.setWindowTitle("Blad markeren")
# Declareer de variabele om de koptekstinhoud in te stellen
kopteksten = []
kopteksten.toevoegen(")
# for loop om de sleutels van het woordenboek te lezen
voor n, toets enumerate(sorted(self).gegevens.sleutels())):
kopteksten.toevoegen (sleutel)
# for loop om de waarden van het woordenboek te lezen
voor m, item in enumerate(self.gegevens[sleutel]):
ID = QTableWidgetItem (zelf.ID_list[m])
zelf.setItem (m, 0, ID)
newVal = QTableWidgetItem(str(item))
zelf.setItem(m, n+1, newVal)
# Stel het koplabel van de tabel in
zelf.setHorizontalHeaderLabels(headers)
# Stel de tooltips voor de headers in
zelf.horizontaalHeaderItem(1).setToolTip("Multimedia")
zelf.horizontaalHeaderItem(2).setToolTip("Kunstmatig Intelligent")
zelf.horizontaalHeaderItem(3).setToolTip("Geavanceerde database")
zelf.horizontaalHeaderItem(4).setToolTip("Unix-programmering")
# Lees de specifieke celwaarde
zelf.geklikt.verbinden (zelf).bij klikken)
# Geef het venster in het midden van het scherm weer
winnen = zelf.frameGeometrie()
pos = QDesktopWidget().beschikbaar Geometrie().centrum()
winnen.moveCenter(pos)
zelf.bewegen (winnen).linksboven())
zelf.tonen()
def on_click(zelf):
voor ItemVal in zelf.geselecteerde voorwerpen():
# Lees de koptekstwaarde op basis van de geselecteerde cel
onderwerp = zelf.horizontalHeaderItem(ItemVal.kolom()).tekst()
# Druk de detailinformatie van het merk af
print("\n", zelf.ID_list[ItemVal.row()], " got ", ItemVal.tekst(), " in ", onderwerp)
# Maak een app-object en voer de app uit
app = QApplicatie(sys.argv)
table = TableFromList(markeringen, 5, 5)
tafel.tonen()
app.exec()

Het volgende venster met de tabel zal verschijnen nadat het bovenstaande script is uitgevoerd.

Conclusie

Deze tutorial liet je zien hoe je tabellen kunt maken met vaste gegevens, woordenboekgegevens en lijstgegevens aan de hand van twee voorbeelden. Tabellen kunnen ook worden gemaakt met dynamische gegevens met behulp van databasetabellen of andere gegevensbronnen.

OSD-overlay tonen in Linux-apps en -games op volledig scherm
Het spelen van games op volledig scherm of het gebruik van apps in de modus volledig scherm zonder afleiding kan u afsnijden van relevante systeeminfo...
Top 5 Game Capture-kaarten
We hebben allemaal gezien en genoten van streaming gameplays op YouTube. PewDiePie, Jakesepticye en Markiplier zijn slechts enkele van de beste gamers...
Hoe een spel op Linux te ontwikkelen
Tien jaar geleden zouden niet veel Linux-gebruikers voorspellen dat hun favoriete besturingssysteem ooit een populair spelplatform voor commerciële vi...