vul het widget in door op de groene knop optellen linksonder te klikken wanneer u begint met het toevoegen van deze widgets moet u ervoor zorgen dat ze een juiste naam hebben, zodat u ze gemakkelijk kunt verwijzen in de Python-code. Dit wordt gedaan met behulp van de objectnaam in de Property Editor aan de rechterkant. Meestal voeg ik gewoon hun functie toe aan de bestaande naam, zoals labelTitle of lineEditLocationDetails. Deze stijl van naamgeving helpt me te herinneren met welk type GUI-object ik werk wanneer ik de Python-code typ.
objectName (rood gemarkeerd) zal de naam van de variabele zijn wanneer we met de python code
stijl het zoals u wilt, maar voor degenen die deze tutorial volgen maak een GUI die er hieronder zo uitziet:
mijn mooie GUI
die zwevende “logo” tekst is een plaatshouder voor een afbeelding die we zullen laden. Dat zal later worden uitgelegd!
Qt Designer naar Python
sla het UI-bestand op in uw projectmap als ” mainDialog.ui”, ik maak graag een submap genaamd “ui” en sla het daar op, zodat we de projectmap georganiseerd kunnen houden.
zodra het is opgeslagen, moeten we het converteren naar iets dat Python echt begrijpt. Navigeer met de opdrachtprompt naar de submap ui. Als je dit ook doet in een virtuele omgeving, zorg er dan voor dat je je ook in je virtuele omgeving bevindt die PyQt5 installatie bevat.
Typ deze code om naar de map met het ui-bestand te navigeren en het te converteren .ui-bestand naar een .py-bestand:
cd "your/ui/folder/here" pyuic5 mainDialog.ui -o mainDialog.py
maak in de root van de projectmap een Python-bestand aan met de naam “main.py”. Voer deze code in:
Voer de main.py bestand met je Python interpreter. Gefeliciteerd! Nu Python kan de code draaien en je GUI zal verschijnen. Ik zal de belangrijke delen van de code tot nu toe uitleggen:
regel 5: we importeren de mainDialog.py bestand vanuit de ui submap. Ik gebruik een alias “mainDialog” om de naamgeving makkelijker te maken.
regel 10: Deze klasse bevat alle functies gerelateerd aan uw mainDialog venster die u zojuist gemaakt hebt. Het eerste argument roept het QDialog object aan dat het type GUI is dat we gebruiken. Het tweede argument is gebaseerd op de alias die we gedeclareerd hebben en het is de Ui_Dialog klasse in het Python bestand dat is gegenereerd vanuit de .ui file conversie
regel 12: de _ _ init _ _ functie is belangrijk omdat het de code is die u wilt uitvoeren wanneer het programma opstart. Dus dit is waar het zelf is.setupUi (self) komt omdat u wilt dat de UI te draaien wanneer u het programma opent. We zullen dingen zoals het laden van configuratiebestanden en knop functionaliteit hier omdat we willen dat ze werken zodra we de software draaien.
regel 20: Dit is de code die de GUI uitvoert en opent.
functies toevoegen aan de knoppen en objecten
nu hebben we onze mooie GUI. Hoe maken we het doen Forex? Laten we de functie toevoegen aan de nieuwste Forex tarieven die ik in het begin van dit bericht liet zien te laden. Dan, laten we in de code om de objecten te verbinden met de Python-code.
wanneer u probeert verbinding te maken met de objecten die u hebt gemaakt in Designer, moet u beginnen met het “zelf”.”. Dus als je object in PyQt Designer labelTitle heette, zal je het object bellen door in self te typen.labelTitle. Als je object lineEditInputDirectory werd genoemd dan zal je het noemen door self te typen.lineEditInputDirectory en ga zo maar door.
bekijk de Github gist en de uitleg hieronder:
regel 16: Deze functie wordt aangeroepen wanneer de gebruiker op de knop klikt om Forex rates te laden. Het object zelf is zelf.drukknop loadrates maar we voegen functionaliteit toe wanneer de gebruiker erop klikt door toe te voegen .klik.verbinding(). Deze functie heeft een aantal specifieke nuances. Het argument voor .connect() accepteert alleen de functie zonder de haakjes, dus in dit geval zelf.load_rates. Als u argumenten moet toevoegen vanwege de vereisten van de Python-functie die u nodig hebt om een lambda te gebruiken, refereer dan naar het codeblok hieronder:
self.pushButton.clicked.connect(lambda:self.load_rates(arg1,arg2,...))
regel 19: .currentText () krijgt de huidige string van het ComboBox object dat onze referentievaluta zal zijn. Dus als de gebruiker USD selecteert zal het Forex tarieven ten opzichte van 1 USD retourneren. Deze string wordt toegevoegd aan de URL die wordt gebruikt om verbinding te maken met de API in de volgende regel.
regels 24-26: deze worden gebruikt om onze gegevens op lineEdit-objecten te laden. We gebruiken .setText () om de tekst op de lineEdit objecten te wijzigen. Het accepteert alleen strings, dus de nummers van de API moeten worden geconverteerd naar string.
Laatste forexcijfers vergeleken met 1 Filipijnse Peso een configuratiebestand toevoegen
dit deel is een beetje lastig en is waar uw bestaande Python kennis nuttig zal zijn. In deze sectie zullen we de volgende functies behandelen:
het openen van een nieuw venster binnen het programma
het maken en gebruiken van een configuratiebestand
nu we een werkprogramma hebben, laten we zeggen dat, omwille van een voorbeeld, verschillende mensen in uw afdeling verschillende behoeften hebben en ze werken allemaal met verschillende valuta ‘ s. We kunnen hun leven gemakkelijker maken door een configuratiebestand toe te voegen, zodat ze niet elke keer de drop down box hoeven te gebruiken. Met behulp van een configuratiebestand kunnen we hun unieke instellingen opslaan en het vervolgens laden wanneer het programma opstart.
Dit is waar de “Config” knop komt. Laten we een nieuw venster voor de gebruiker om hun instellingen te wijzigen. Door dit te doen stelt ons in staat om het hoofdvenster schoon en georganiseerd te houden.
opslaan in uw ui-map als configurdialog.ui en zoals we eerder in deze tutorial deden, converteer het met hetzelfde pyuic5 commando zoals te zien is in het codeblok hieronder:
cd "your/ui/folder/here" pyuic5 configDialog.ui -o configDialog.py
Hier ziet de bijgewerkte code er hieronder uit. De uitleg voor de nieuwe code toevoegingen zijn onder deze Github gist:
regel 6: we voegen het configuratiedialoogvenster toe via dit import statement
regel 10-11: nieuwe import statements die relevant zijn voor het hebben van een mooie config file workflow. pickle en os beide komen met uw standaard Python omgeving en hebben geen extra installaties nodig.
regel 13-14: De locatie van het configuratiebestand wordt door het hele script in alle klassen gebruikt, dus we verklaren het als een globaal en maken het all-caps omdat het een constante is.
regel 17: deze klasse bevat alle relevante informatie voor het configuratievenster. Als u objecten wilt aanroepen in het config UI-bestand dat u hebt gemaakt, wordt het aanbevolen dat de oproep in deze klasse wordt gedaan, niet in de MainDialog-klasse.
regel 23: we laden het bestaande configuratiebestand. We doen dit zodat we de gebruiker kunnen laten zien wat de huidige instelling is.
regel 26: Met behulp van het geladen configuratiebestand, stellen we de tekst van de keuzelijst met invoervak in op de huidige instelling.
regel 33: wanneer we de configuratie opslaan, willen we het woordenboek dat is opgeslagen in self bijwerken.config voor het schrijven van het config bestand.
regel 39: hiermee wordt het configuratieparametervenster gesloten.
regel 48-54: Dit is de logica bij het laden van het configuratiebestand in het hoofdvenster. Om welke reden dan ook, het configuratiebestand kan ontbreken en dan zal het programma niet starten als gevolg van fouten. Als het configuratiebestand ontbreekt, maak dan een configuratiebestand met standaardparameters, zodat de gebruiker het programma nog steeds kan starten en de parameters later kan wijzigen.
regel 56: we laden de aangepaste instellingen en stellen de keuzelijst in op de gewenste valuta van de gebruiker.
regel 62-63: dit opent het configuratieparametervenster. Dit is gebaseerd op de naam van het configuratiedialoogvenster class name. In dit geval wordt de klasse ConfigParameters genoemd.
regel 65-68: nadat de gebruiker klaar is met het instellen van zijn instellingen en het venster gesloten is. Het programma zal zichzelf updaten en het configuratiebestand opnieuw laden voordat het referentievaluta combo box wordt bijgewerkt.
deze workflow staat de gebruiker toe om zijn unieke instellingen op te slaan en het programma zal nog steeds werken als het configuratiebestand ontbreekt. U wilt proberen en rekening houden met elk probleem dat uw programma zal tegenkomen.
afbeeldingen toevoegen
nu hebt u een volledig functioneel programma, Laten we de laatste hand leggen: een logo. Hoewel er een PyQt resource-bestand kan zijn waar je afbeeldingen kunt opslaan, geef ik de voorkeur aan het laden van afbeeldingen met behulp van labels en pixmaps. Dit is heel snel.
regel 56-58: we laden het logo dat ik opgeslagen heb in de ui-map. Vervolgens stel ik het labelLogo-object in om de pixmap te laden en stel ik de inhoud in om te schalen naar de grootte van het labelLogo-object.
Our final product
Final project folder structure
Final Thoughts
Hopefully this tutorial gives some clarity on how PyQt5 Designer works. Ik bracht talloze uren googlen deze dingen en zelfs betaalde tutorials op Udemy waren een beetje nutteloos.