Dynamische waarden in PyQt venster (spatiëring ISS)


Dit instructable beschrijft het gebruik van dynamische variabelen in een PyQt-venster.

Qt kunt bouwen van interactieve, aangesloten (Ms/Linux/Android/IoS) ramen. Py Qt kan dergelijke gebouw in Python. De hoofdlus van een PyQt scripts bestaat uit het venster methoden, met behulp van de vooraf gedefinieerde venster-variabelen. Het bijwerken van deze venster-variabelen is mogelijk, maar niet een goed idee als uitgebreide verwerking nodig is. Bij het venster van de ISS-tracker in de eerste video-opname, wordt draadsnijden gebruikt om een PyQt-venster werkt met "buiten" variabelen. Er zijn zeker andere (en betere methoden), maar deze werkt prima en de structuur 'past bij mijn logica'.

Voor beide voorbeelden is de vensterindeling gemaakt met Qt ontwerper. Dus Negeer de hoeveelheid coderegels in beide scripts. Opmaak van een venster lay-out voor een heleboel velden, vereist declaratieve code zoals de positie op het scherm, de grootte, hoe het moet reageren op max/minimaliseren van het venster, kleur, stijl, inhoud, samenhangende actie, enz. Gelukkig Qt Designer genereert alle deze lijnen van code gebaseerd op uw grafische lay-out. Helaas daardoor zult u omhoog beëindigen met een heleboel lijnen in uw hoofdlus.

Omdat ik leren kennen PyQt wilde, ive ' bouwen het ISS-tracker venster met behulp van een heleboel variabelen en verschillende soorten velden. Voor degenen die geïnteresseerd zijn, zal ik later een beetje meer over uitweiden.

De tweede video-opname toont een zeer kleine en eenvoudige script om te visualiseren de threading aanpak. De python-script dat gebruikt kan worden gevonden op: Bitbucket

Het script simuleert het gooien van een dobbelsteen en verwerkt de uitkomsten van de worpen.

Het script gebruikt twee draden: één thread voor het behoud van de weergave van het venster (PyQt vereist dat dit zal de hoofdlus van het script) en een andere thread voor verwerking en leiden regelmatig tot de venster-draad. Voor het uitwisselen van waarden, moeten beide draden worden gericht aan de dezelfde variabelen in het geheugen. In nog meer eenvoudige woorden: één thread sommige gegevens verwerkt, plaatst de resultaten op een bijzondere locatie, 'de deurbel ringen' op de hoofdlus te vertellen het is klaar en wijst erop waar de nieuwe levering heeft gebracht.

Dus, laten we eens kijken hoe dat eruit ziet in Python:

Het script begint met de gebruikelijke invoer van bibliotheken nodig: 'QtCore' voor het maken van threads, 'QtGui' voor de verwerking van het venster visuals, 'datetime' en 'tijd', zodat we niet over het vergeet.

De verklaringen van de volgende twee 'proberen' zijn nodig voor de samenstelling van de velden op het scherm. Deze niet erg: Qt ontwerper deze regels worden gegenereerd zodra u begint met behulp van de RTF-descriptoren. (bijvoorbeeld voor het weergeven van een ander lettertype, kleur, grootte, vet/cursief, enzovoort van elk veld in het venster moet een RTF-(d.w.z. HTML)-descriptor definiëren.)

Dan nog enkele globale variabelen: 'Gooi-nummer' en 'total van alle worpen' de essentiële variabele is het geheugen dat wordt gedeeld tussen beide threads, die ik noemde het 'koppelen opslag' (oude gewoonten...).

Hier de koppeling opslag is een tekenreeks waarin alle variabelen moeten worden gebracht door de verwerking-thread en waar die van kunnen worden gelezen door de venster-thread.

Nog een van mijn oude gewoonten is een gunst voor het gebruik van tekenreeksen. Ik leerde hoe dit bespaart veel tijd tijdens het debuggen van scripts. (En: Qt voorkeur tekenreeksen voor de weergave.)

De schroefdraad (verwerking) methode genereert een willekeurige waarde (het niet erg het manipuleren; Ik probeerde te dwingen zo veel volatiliteit mogelijk in het scherm), sommige andere waarden worden berekend en zet ze in de tekenreeks 'LinkingStorage'.

De 'trigger' klasse ringen' de Bel' op de hoofdlus. Het heet door Qthread en schept en straalt een signaal elke tiende van een seconde.

De volgende klasse bestaan in meerderheid van de definities van de lay-out scherm door de hoofdlus moet worden gebruikt. Hoewel niet een uitgebreide methode zoals in het ISS tracker script, is het nog steeds een substantieel deel van het script. De 'setupUI' methode bevat de verklaringen voor de velden getoond: objecttype, positie in het venster, het lettertype, de relatie met andere velden, enz. Deze methode wordt gegenereerd door Qt Designer. De methode bevat twee opdrachten. Een de veldindelingen ('retranslateUi') en één om in te stellen van de verwerking draad ('setupTrigger') toe te passen. De laatste is toegevoegd aan de gegenereerde code. De 'setupTrigger' methode begint de wol verwerking en definieert de methode moet worden uitgevoerd wanneer een signaal wordt uitgezonden door de wol verwerking (dat wil zeggen: ' refreshWindow').

De 'refreshWindow' methode splitst de tekenreeks 'LinkingStorage', gevuld door de verwerking-thread en herdefinieert de velden van het venster de nieuwe inhoud toe te voegen. Kleine verwerking, zoals het verkrijgen van de huidige tijd, kan deel uitmaken van dezelfde methode. Zoals gezegd: belangrijke verwerking, moet worden uitgevoerd in de wol verwerking.

De hoofdlus spreekt voor zich: bouwen van een venster en het op het scherm weergeven.

Volgens mij is dit de meest eenvoudige manier om de dynamische gegevens toevoegen aan een venster.

Bouw van het ISS tracker-scherm

De volledige broncode voor deze toepassing kan worden gevonden op: Bitbucket

Hoewel veel groter in grootte, verwerking van het venster en de variabelen gebeurt op dezelfde manier:

  • Verklaring van het venster in de klasse 'Ui_mainwindow'
  • Verklaring van de verwerking-wol in de klasse 'trigger'. De timer voor het uitzenden van het signaal naar de venster-wol is ingesteld op 3 seconden. Samen met de totale verwerkingstijd van 2 seconden, dit resulteert in een vernieuwing van het venster om de 5 seconden. Hoewel ik denk dat het kan worden vastgemaakt aan een algemeen 2 seconden dat, die men moet realiseren dat de gegevens verzamelen voor de dynamische velden wordt gedaan door API-aanroepen. Als u gebruiken de tracker voor een constante weergave wilt, zich bewust van te zijn dat bij een vernieuwingssnelheid van 2 seconden het script 43,200 oproepen in 24 uur genereert. Naar mijn mening dat veel verder gaat dan de 'fair usage' gratis API's
  • Gegevens die worden uitgewisseld via de tekenreeks 'LinkedStorage'

De gegevensverwerking is opgesplitst in de verzameling van de statische gegevens (slechts eenmaal worden verzameld en weergegeven constant) en het verzamelen van dynamische gegevens (lokale en ISS).

Het gebruik van verschillende API's om alle gegevens te verkrijgen, is beschreven in een voormalig instructable over de Raspberry Pi SenseHat:

Instructable

Gerelateerde Artikelen

Venster hydrocultuur

Venster hydrocultuur

BIJWERKEN vanaf 4/28/15.Zie de laatste pagina van de foto van de gelukkige plantenDit is mijn eerste avontuur in de wereld van hydrocultuur. Ik heb gelezen vele vele instructibles over het onderwerp en stukjes en beetjes van de meeste van hen hebben
Tekenen van elektronische schema's met CadSoft EAGLE

Tekenen van elektronische schema's met CadSoft EAGLE

Er zijn een paar instructables hier op een aantal van de fijnere punten van Eagle (maken van uweigen bibliotheek delen:wijziging van de regels voor het ontwerp:)Maar feedback geeft aan dat een heleboel mensen waarschijnlijk een instructable kon gebru
E-Light: LEDs Toon nieuwe e-mail

E-Light: LEDs Toon nieuwe e-mail

het idee achter het project E-mail licht is om te wijzen op de aanwezigheid van e-mails die momenteel op mijn e-mailserver met een knipperende LED. Ik ben vaak niet goed op mijn bureau en ik zou graag willen weten als ik heb e-mail. Of ik ben in de b
Inspirerende citaat Print

Inspirerende citaat Print

Mij wilden voor wekken een kunst afdrukken met een offerte die mij inspireert. Ik heb altijd graag het citaat uit Othello, "de beroofd die glimlacht, steelt iets van de dief". Voor mij dient het als een herinnering te blijven positief in het gez
RGB-kleur selector

RGB-kleur selector

RGB led kleurenkiezer is een makkelijk te gebruiken visuele kleurenmixer gemaakt op de verwerking van de ontwikkelomgeving. Het is een gemakkelijke manier om te begrijpen van de kleurencombinatie en de communicatie tussen de arduino en processing leu
BUGGO Arpeggio Synth

BUGGO Arpeggio Synth

ik heb gewerkt met Arduino voor ongeveer een jaar.  Ik ben zeer geïnteresseerd in synthesizers (zowel analoge als digitale) en verschillende andere muziekinstrumenten.  Ik had al gek rond met de code Auduino--een fundamentele "directe digitale synthe
Aangepaste gebouwd MIDI Controller

Aangepaste gebouwd MIDI Controller

Im het aangaan van deze jnstructable de wedstrijd van muziekinstrumenten, als je het gelieve stemming voor mij cos ik graag een nieuwe synth! Als een elektronische muziek producent/performer, heb ik heel wat verschillende MIDI-controllers verzameld d
DIY: Personaliseer uw afwerking | Vinyl Logo-ontwerp

DIY: Personaliseer uw afwerking | Vinyl Logo-ontwerp

How To: Personaliseer uw Hobby of afwerking met een Vinyl-designHet doel van dit instructable is om te laten zien hoe ik mijn hobby-ruimte met een vinyl-embleemontwerp gepersonaliseerd. Ik koos voor dit project om mijn binnenkomst in de wedstrijd mak
Bridget Riley-stijl op-art

Bridget Riley-stijl op-art

Ik hou van de jaren 1960 op-art, vooral Bridget Riley's monochroom werkt die lijken op zwarte puntjes of vierkantjes op een gebogen wit oppervlak. Maar ik kan niet veroorloven om te kopen van haar kunst, dus ik heb mijn eigen. Met een spreadsheet, ee
Bekijk uw PCB ontwerp in 3D Online kostenloos

Bekijk uw PCB ontwerp in 3D Online kostenloos

of je een eerste keer printplaat ontwerper, maar je hebt gedaan het jarenlang, u weet hoe moeilijk het kan zijn om te visualiseren lay-out, spatiëring en relatieve grootte in PCB-indeling software.  U zou kunnen hebben ook ervaren dat ongemakkelijk "
Minibuilders - hoe 3D-print grote structuren met kleine robots

Minibuilders - hoe 3D-print grote structuren met kleine robots

Altijd is er een nauwe relatie tussen architectuur en technologie. Echter, onlangs het platform stagneert en de bouwsector geweest langzaam te nemen van de technologieën die reeds goed ingeburgerd in andere velden. Terwijl wij ontwerp Digitaal bouwen
Awesome aangepaste gevallen (van $20 - $2000)

Awesome aangepaste gevallen (van $20 - $2000)

Een overzicht: Dit instructable zal onderwijzen u over de verschillende technieken voor gevallen maken vreselijk aangepast. Elke stap doorloopt u snel & goedkoop keuzes naar doordachte, meer nààst opties. Dit instructable is geschikt voor iedereen me
Schaal/Scape: Halftone Light-Panel series

Schaal/Scape: Halftone Light-Panel series

Schaal/Scape is een serie van lichte deelvenster afbeeldingen ontwikkeld in een drie maand artiest in residentie bij Pier 9 in San Francisco. Het project is een onderzoek naar de drempels van de menselijke waarneming en de geschiedenis van halftone d
IKEA Ribba Word Clock

IKEA Ribba Word Clock

Mijn eerste woord klok was 'slag' zo'n 5 jaar geleden. Het was gebaseerd op de traditionele individuele LED klokken met meer soldeer gewrichten en draden dan ik had de tijd of geduld voor. Het werd opgepikt en stukjes af en toe gedaan wordt zet weg v