Dynamiska värden i PyQt fönster (tracking ISS)

Detta instructable beskriver användningen av dynamiska variabler i ett PyQt fönster.

Qt kan bygga interaktiva, ansluten (Ms/Linux/Android/IoS) fönster. Py Qt kan bygga sådan i Python. Huvudloop för en PyQt scripts består av fönster metoder, använda de fördefinierade window-variablerna. Uppdatera dessa window-variabler är möjligt, men inte en bra idé om omfattande bearbetning behövs. För ISS-tracker fönstret i det första video ta till fångst används threading så att en PyQt fönstret arbeta med "utanför" variabler. Säkert finns det andra (och bättre metoder), men den här fungerar bra och dess struktur "passar min logik".

För båda exempel skapades fönstret layout med Qt Designer. Så, vänligen bortse från mängden kodrader i båda skript. Formatera en fönster lay-out för många fält, kräver deklarativa kod som position på skärmen, storleken, hur det ska reagera på max/minimera fönster, färg, stil, innehåll, anslutna åtgärder, etc. Lyckligtvis genererar Qt Designer alla dessa rader kod baserat på din grafiska layout. Tyvärr till följd av detta, du kommer att sluta med en massa linjer i din huvudsakliga loop.

Eftersom jag ville bekanta sig med PyQt, ive bygga fönstret ISS-tracker med många variabler och annan typ av fält. För dem som är intresserade av, kommer jag utveckla lite mer senare på.

Den andra videoinspelning visar en mycket liten och enkel skript att visualisera det trädande tillvägagångssättet. Python-skript används finns på: Bitbucket

Skriptet simulerar att kasta en tärning och bearbetar resultatet av kast.

Skriptet använder två trådar: en tråd för att upprätthålla visningen av fönstret (PyQt kräver att detta är det viktigaste kretsar av skriptet) och en annan tråd för bearbetning och regelbundet utlösa fönster-tråden. För utbyte av värden, måste båda trådar vara riktad mot samma variabler i minnet. I ännu mer enkla ord: en tråd behandlar vissa uppgifter, placerar resultaten på en speciell plats, ringer på dörrklockan vid huvudloop att berätta det är redo och påpekar där den nya leveransen har placerats.

Så, låt oss se hur det ser ut som i Python:

Skriptet börjar med vanliga import av bibliotek som behövs: "QtCore" för att skapa trådar, "QtGui" för bearbetning fönster bilder, 'datetime' och 'tid' så vi kommer inte att glömma det.

De nästa två "försöka" uttalandena behövs för sammansättningen av fälten på skärmen. Inte ihåg dessa: Qt Designer genererar dessa rader så fort du börjar använda RTF-beskrivningar. (t.ex. för att visa ett annat teckensnitt, färg, storlek, fet/kursiv, etc för alla fält i fönstret måste man definiera en RTF-format (dvs. HTML) deskriptor.)

Då bara några globala variabler: "kasta nummer" och 'totalt av alla kast' väsentliga variabeln är minnet delas mellan båda trådar, som jag döpt till "länka lagring" (gamla vanor...).

Koppla samman lagring här är en sträng där alla variabler måste sättas in av bearbetning-tråden och där de kan läsas från av fönster-tråden.

En annan är av mina gamla vanor en tjänst för att använda strängar. Jag lärde mig hur detta kan spara mycket tid när du felsöker skript. (Och: Qt föredrar strängar för att visas.)

Den gängade (bearbetning) metoden genererar ett slumpmässigt värde (inget emot manipulera; Jag försökte bara att tvinga så mycket volatilitet som möjligt i skärmen), beräknas vissa andra värden och sätter dem i strängen "LinkingStorage".

"Utlösande" klassen ringer"klockan" på de viktigaste loopen. Det kallas av Qthread och skapar och avger en signal var tionde sekund.

Nästa klass består majoriteten av skärmen layout definitioner som ska användas av den viktigaste loopen. Även om inte sådan omfattande metod som i skriptet ISS tracker, är det fortfarande en väsentlig del av skriptet. Metoden "setupUI" innehåller deklarationer för fälten ska visas: objekttyp, position i fönstret, teckensnitt, förhållandet till andra fält, etc. Denna metod är genereras av Qt Designer. Metoden innehåller två kommandon. En tillämpas fältformat ("retranslateUi") och en för att ställa in behandlingstråd ("setupTrigger"). Den senare läggs till i den genererade koden. Metoden "setupTrigger" startar bearbetning tråden och definierar metoden som ska köras när en signal sänds ut av behandlingstråd (dvs "refreshWindow").

Metoden "refreshWindow" delar upp strängen "LinkingStorage", fylld av bearbetning-tråden och omdefinierar fälten fönstret lägga till nytt innehåll. Mindre bearbetning, som att erhålla aktuell tid, kan vara en del av samma metod. Som sagt: större bearbetning, skall avtjänas i behandlingstråd.

Huvudloop talar för sig själv: konstruera ett fönster och Visa det på skärmen.

Enligt min mening är detta det enklaste sättet att lägga till dynamiska data i ett fönster.

Bygga på ISS tracker skärmen

Den kompletta källan för denna ansökan finns på: Bitbucket

Även om mycket större i storlek, hantering av fönstret och dess variabler görs på samma sätt:

  • Förklaring av fönstret i klassen "Ui_mainwindow"
  • Förklaring av bearbetning-tråden i klassen "utlösande". Timern för avger signal till fönster-tråden är inställt på 3 sekunder. Tillsammans med totalt handläggningstiden 2 sekunder, detta resulterar i en uppdatering av fönstret var 5 sekunder. Även om jag tror det kan vara fäst till en övergripande 2 sekunder, bör man inse att datainsamling för dynamiska fält är gjort av API-anrop. Om du vill använda spåraren för en konstant display, vara medveten om att skriptet på en uppdateringsfrekvens på 2 sekunder kommer att generera 43,200 samtal i 24 timmar. Enligt min mening som är långt bortom "rättvis användning" gratis API
  • Data skickas igenom strängen "LinkedStorage"

Datahantering är uppdelad i insamling av statiska data (endast samlas in en gång och visas hela tiden) och insamling av dynamiska data (lokala och ISS).

Användning av flera API's för att få all informationen, som har beskrivits i ett tidigare instructable om Raspberry Pi SenseHat:

Instructable

Relaterade Ämnen

PROJEKT-och dalbana

förra året tillbringade jag ett löjligt antal timmar bor efter skolan för att leka med leksaker. Min inspiration för att bygga denna coaster kommer från min extrema avsmak för traditionella klass 9 teknikprojekt. (mus fälla bil, popsicle stick broar,...

Swarmbots: Autonoma Arduino bilar som spelar musikaliska stolar

Vår avsikt med detta projekt var att slå samman två banbrytande fält av teknik: autonoma fordon och swarmbots. I ett samarbete med Fremont akademin för teknik och Design's Femineer studenter monteras tio medlemmar i klassen Pomona College elektronik...

Multipurpose Hydroponics och jord trädgårdsskötsel lösning

Jag har redan publicerat en liknande instructable och här är en reducerad version av samma eftersom det kändes lite för komplicerat för vissa. Här går vi...IntroduktionMånga människor tycker om start trädgårdsarbete som hobby och några föreställa sig...

Grundläggande elektronik

att komma igång med grundläggande elektronik är lättare än du kanske tror. Detta Instructable kommer förhoppningsvis att avmystifiera grunderna i elektronik så att alla med intresse i att bygga kretsar kan slå i marken kör. Detta är en snabb översikt...

MLP App: Låt oss spela 3 gånger!

Gillar du magiska vingar spelet? Nu har du en bättre chans att spela det eftersom jag har hittat en fantastisk fuska men du kan inte göra det i Sweet Apple tunnland.Steg 1: Spela i Ponyville Så jag spelar med Pinkie i Ponyville. Spela vad någonsin sp...

Quiltad fågelholk med Toy Bird skallror

när en vacker liten baby flicka Lily föddes ett par månader sedan och hennes mamma (min kusin) inredda hennes rum alla fåglar jag beslutat att göra denna quiltad fågelholk med vissa fågel skallra leksaker att gå med på det som en baby gåva.Jag använd...

Edison trädgårdsmästaren

Stort tack till våra sponsorer, Intel, Seeed Studios och Instructables för att tillhandahålla en bas kit med Intel EdisonIntroduktionMånga människor tycker om start trädgårdsarbete som hobby och några föreställa sig ens att odla sina egna grönsaker o...

Cloud kontrollerade Dune Buggy - styra den från var som helst!

Att vara från en hårdvara orienterade bakgrund, se grafer av data som ritade framför mina ögon för första gången var spännande, men titta på min robot följa kommandon som jag gav det var vad verkligen blåste mitt sinne!Ända sedan jag har dragits till...

Roboten drivs av PS3-handkontrollen genom Arduino och Wifi sköld

detta är en robot som använder de två vänster och höger styrspak på PS3-handkontrollen till enheten "tank-stil." Chassi, hjul och motorer köps i ett kit. En Arduino Uno är monterad på chassit och en Wifi sköld är staplade ovanpå den. Två separat...

Enkla Kuddfodral

jag gjorde det på TechShop!Detta är en trevlig och lätt övning om du har precis börjat använda en overlockmaskin symaskin.Denna tutorial är för en 16 i fyrkantig kudde med en Serger symaskin (och en osynlig zip).Steg 1: Verktyg och materialDu behöver...

Skimboard spel gränssnitt

förvandla en vanlig skimboard till ett spel gränssnitt så att du kan fysiskt surfa virtuella världar!Skimboard gränssnittet är ett anpassat gränssnitt byggt för spelet Surf RMB City av konstnären Cao Fei, som även ritade skimboard grafik.Detta Instru...

Styra Arduino med Gamepad

Nyligen har jag varit nyfiken på bli vän Arduino eller några andra microcontroller med en gamepad för att få fysisk interaktion med sakerna jag gör, men det verkade vara någon snabbt eller billigt sätt att göra så.De flesta lösningar deltar:Helt demo...

Hur kan modedesigners glider smidigt in i Online-världen?

Det är ingen hemlighet att den traditionella huvudgatan som vi en gång kände det långsamt kommer till ett slut. Jag minns en gång de dagar där jag kunde gå ner min high street och det skulle finnas en Woolworths för leksaker, många oberoende återförs...

ThunderVUmeter

Detta projekt skapades av misstag genom att göra några tester med RGB-lysdioder och och TLC5940s, mellan olika kombinationer och underlig färg effekter tester, vi hade idén att ansluta audio domkraft till mikrokontroller att synkronisera musik med fä...

Trigger

låt oss dra tidsmaskin ut ur garderoben och vev ratten långt tillbaka till en enklare tid. Ja, idag reser vi tillbaka till 2004. Du kanske undrar varför vi 2004? Svaret är ganska enkelt. Jag byggde i 2004, och för första gången dokumenterade tillfred...

Hur konvertera DVD till Apple TV?

Har du någonsin föreställt att du kan njuta av dina favoritfilmer och upprätta ett filmbibliotek fritt på Apple TV? DVDFab kommer att förverkliga din dröm.Med den ständigt expanderande av film och program kategori, kan inte iTunes store fortfarande t...

En avlägsen dynamiska IP-Tracker för (nästan) gratis!

Det fanns en tid (i den gamla goda tiden) när dyn.com anges vissa grundläggande dynamiska DNS-funktioner för (nästan) gratis.Detta har lett till den situation där många routertillverkare har gjort sina routrar sådan, att endast dyndns konton från dyn...

Trädgården stödmur--plast fönster skärmen och cement

detta är en låg stödmur läggas till basen av ett armeringsjärn spaljé på en sluttning att skapa ett radhus där plantera vinstockar.Spaljé görs bara genom att hålla ändarna av järn armeringsjärn i marken, och sedan knyta ledningar mer armeringsjärn ti...

Hur skörden ett piezoelement från ett fönster alarm

i denna korta instructable jag visar hur jag skörda Piezo element från dollar store fönster larm. Varför frågar du? Eftersom dessa saker och ting awesome mickar för gitarrer eller andra akustiska instrument bygger du. Även gör jag detta för att svara...