Lav din første desktopapp i PyQt5

I denne artikel vil vi kigge på hvordan du laver en meget simpel desktopapp i PyQt5.

PyQt5 er et udviklingsmiljø i Python3 som kan bruges til at lave GUI apps med ved at kode i python3. Jeg har allerede lavet en introduktion til PyQt5, herunder hvordan man installerer det. Det vil jeg derfor antage du allerede har gjort. I denne artikel skal vi kigge videre på hvordan vi laver vores første desktop app. Jeg har selv Ubuntu 20.04 installeret og vil lave desktopapps til linux. Men i princippet kan du med PyQt5 lave apps til både Windows, MacOS og Linux.

Først opretter jeg en ny python3 fil. Det er nemt fordi jeg åbner bare gedit (Tekstredigering) og indsætter følgende indhold. Filen gemmer jeg som test.py i min lokale python-mappe.

import sys
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow
from PyQt5.QtCore import Qt

class MainWindow(QMainWindow):

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        self.setWindowTitle("Min første PyQt5 app")

        label = QLabel("Dette er en PyQt5 app der kun åbner et vindue")

        label.setAlignment(Qt.AlignCenter)

        self.setCentralWidget(label)

app = QApplication(sys.argv)

window = MainWindow()
window.show()

app.exec_()

Herefter åbner jeg et terminalvindue og indtaster følgende for at køre app’en. Sørg for at terminalen er åben i din pythonmappe.

python3 test.py

Så får du følgende resultat:

App’en er meget simpel. Det er bare et vindue med en titel og en tekst på selve vinduet. Men den er meget lærerig i forhold til at lave din første app. Derfor vil vi nu gennemgå alle dele af ovenstående kode.

I de første to linier importeres de klasser fra PyQt5 som er nødvendig for at kunne lave din app i PyQt5.

import sys
from PyQt5.QtWidgets import QApplication, QLabel, QMainWindow
from PyQt5.QtCore import Qt

I slutningen oprettes en instans af OApplication og fortæller at du nu vil sende kommandoer til den.

app = QApplication(sys.argv)

Koden app.exec_() starter event løkken, som vil holde din app åben.

app.exec_()

Hvis man bare ville oprette et vindue, kunne man bruge følgende kode, som du også vil genkende fra ovenstående kode. Bemærk her at vinduer i PyQt5 som standard er skjulte, og man skal så angive at det skal vises.

window = QWidget()
window.show()

Enhver QWidget() som ikke har en parent angivet, er et vindue. Men der findes faktisk også en QMainWindow() klasse, som du kan bruge og det er den du ser i ovenstående kode. Dette gør det blandt andet muligt at bruge toolbars, statusbars og andre widgets.

window = QMainWindow()
window.show()

Nu skal vi så se på den sidste del af koden. Her oprettes en ny klasse, der hedder MainWindow baseret på QMainWindow. Et QMainWindow kan kun indeholde en widget, som du sætter med setCentralWidget. I nedenstående eksempel skriver du først titlen på QMainWindow. Efterfølgende opretter du en label hvor du bruger den widget der hedder QLabel. Endelig sætter du så dette som din widget på QMainWindow.

class MainWindow(QMainWindow):

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)

        self.setWindowTitle("Min første PyQt5 app")

        label = QLabel("Dette er en PyQt5 app der kun åbner et vindue")

        label.setAlignment(Qt.AlignCenter)

        self.setCentralWidget(label)

Endelig kan du så i slutningen af koden angive MainWindow i stedet for QMainWindow for at bruge den klasse du har oprettet i stedet.

window = MainWindow()
window.show()

Dette er nok den mest simple app du kan lave med PyQt5. I kommende artikler skal vi se mere på hvordan du udvikler videre på din PyQt5 app. Her vil vi tage udgangspunkt i denne artikel.

5 2 votes
Article Rating

Andreas Andersen

Forfatter og grundlægger af IT-blogger.dk, der har blogget om IT-emner siden 2012. Findes på Mastodon på @aphandersen@ansico.dk

You may also like...

Abonner
Giv besked ved
guest

0 Comments
mest stemt på
nyeste ældste
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x