Permalänk

strul med python/pygame

Jag har skapat två trådar i mitt program där den ena samlar värden från en PIC och den andra visar en analog varvräknare i realtid. Varvräknaren kör jag med hjälp av pygame och det är den som strular. Koden ser ut såhär:

class LivePlottThread(threading.Thread): def run(self): ScreenWidth = 300 ScreenHeight = 300 pygame.init() screen = pygame.display.set_mode((ScreenWidth,ScreenHeight)) pygame.display.set_caption('Robbans Dyno') tavla = pygame.image.load('tavla.png').convert() visare = pygame.image.load('visare.gif').convert() i = 0 while LoggWin.avbryt==0 or LoggWin.plotlengd > i: if LoggWin.plotlengd > i: visare2 = pygame.transform.rotate(visare, 287-LoggWin.Signal[1][i]/2) height=visare2.get_height() width=visare2.get_width() center = ((ScreenWidth-width)/2,(ScreenHeight-height)/2) pygame.display.flip() screen.blit(tavla, (0, 0)) #draw the background screen.blit(visare2, center) i += 1 pygame.quit() def OnQuit(self, event): self.Destroy()

De sista tre raderna är jag inte ens säker på att man behöver, jag har testat att köra utan dem utan att upptäckt nån skillnad.
Det funkar kanonbra första gången jag kör men om jag försöker köra en datainsamling med varvräknaren igång utan att ha avslutat och startat om programmet får jag följande varning:

Exception in thread Thread-5: Traceback (most recent call last): File "F:\Program\Python\lib\threading.py", line 442, in __bootstrap self.run() File "F:\Program\Python\DataLogger\Dyno2.py", line 329, in run screen = pygame.display.set_mode((ScreenWidth,ScreenHeight)) error: DirectDraw2::SetCooperativeLevel: Invalid parameters

Jag förstår inte hur jag ska lösa felet. Sen är det en annan grej med just pygame också. Jag vill ha varvräknaren ligga i samma fönster som jag startar den från, som det är nu öppnas ett nytt fönster, men jag lyckas inte med detta heller. Jag kör wxpython om det kan vara till nån hjälp.

Jag har ett par konstiga fel till men det är kanske bäst att försöka lösa ett i taget.

Permalänk
Medlem

Ta en titt här för att få dom o samsas i samma fönster:
http://wiki.wxpython.org/index.cgi/IntegratingPyGame

Permalänk

Jag har försökt det mesta nu för att få in min varvräknare i programmet men inget går direkt som jag har tänkt. Jag har mer eller mindre lagt ned försöken med att få pygame att fungera i wxpython på det sätt jag ville, var på tok för krångligt.
Nu har jag börjat labba med att köra bara genom wx. Det finns ju en del grejor där som påminner om det jag använt i pygame. Men jag får det inte att fungera.
Jag har lagt in min varvräknartavla som bakgrundsbild och sedan försökt rita nålen som en vanlig linje men den hamnar bara bakom bilden.
Jag har försökt använda en bild på en visare som jag roterar men antingen går det för segt, eller så blir inte bakgrunden helt transparent eller så blir inte rotationen rätt.

Så jag frågar igen. Finns det något sätt för mig att få in min "analoga" varvräknare, som ska köras i realtid mot serieporten, i mitt befintliga fönster? Jag är glad om jag kan få utförliga tips som möjligt eftersom jag börjar tröttna på att behöva sitta i nån vecka och testa mig fram till hur det ska vara. Jag är rätt kass på koda. Har hållt på med att försöka få bara den här varvräknaren att fungera i typ 1-2 månader nu.

Så här ser det ut än så länge. Tanken är att jag ska kunna använda det både som en logger till diverse saker samt till min bromsbänk, därav varvräknaren. Just nu kör jag bara två signaler in, den svarta som en slags referens och den röda går på en vridpot som jag vill styra varvräknaren med också.