Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[pyqt] Data constant vernieuwen

Pagina: 1
Acties:

  • Stijnb_
  • Registratie: Oktober 2009
  • Laatst online: 28-09 00:26
Beste Tweakers,

Ik ben bezig in python een applicatie aan het schrijven voor op een touchscreen lampen te bedienen.
Maar momenteel zit ik ben een probleem omdat ik constant informatie uit de database moet halen en tonen op de GUI zonder dat het scherm vast staat.
Nu heb ik al gekeken naar QThread en deze tut gevolgd.
Maar het probleem is als ik dus een thread maak met gewoon "while true:" en daar mee de data uit de database haalt toch het scherm vast blijft staan.

Nu zoek ik dus een oplossing om gewoon op de achtergrond constant data uit de database te halen en dan te tonen op het scherm zonder dat het vast komt te staan.

Verwijderd

Wat je zegt zou gewoon moeten kunnen met QThread. Maar QThread bevat niet de meest handige interface voor simpele dingen. Sterker nog, derriven van QThread wordt afgeraden. Zie bijvoorbeeld deze stackoverflow: http://stackoverflow.com/...-a-qthread-example-please.

Makkelijker is om te derriven van QRunnable en vervolgens te starten met QThreadPool, dat levert minder overhead op als je van plan bent de thread meerdere keren te starten/stoppen. Maar dan kan je geen signals/slots gebruiken omdat de QRunnable geen eigen event loop heeft.

Noot: ik gebruik altijd de C++ variant van Qt.

  • Stijnb_
  • Registratie: Oktober 2009
  • Laatst online: 28-09 00:26
Ik heb het net geprobeerd en het werkt had vergeten time.sleep() toe te voegen aan de while.
Nu kom ik alleen nog het probleem tegen 'QPixmap: It is not safe to use pixmaps outside the GUI thread".

Ik wil dus een icoon veranderen van een button alleen vind ik daar niet meteen een oplossing voor.

Verwijderd

Je kan geen interactie hebben met de GUI vanuit een andere thread. Als je wilt dat een ui verandering optreed nav. een event in een andere thread, dan zijn er naar mijn weten 2 mogelijkheden:
• een signal sturen naar de GUI thread, met een QImage als argument bijvoorbeeld.
• een QWidget derriven van QGLWidget, in de PaintEvent van dat object swapBuffers() aanroepen, in een aparte thread iets op die QGLContext tekenen met OpenGL.

  • Stijnb_
  • Registratie: Oktober 2009
  • Laatst online: 28-09 00:26
Verwijderd schreef op donderdag 22 augustus 2013 @ 13:48:
Je kan geen interactie hebben met de GUI vanuit een andere thread. Als je wilt dat een ui verandering optreed nav. een event in een andere thread, dan zijn er naar mijn weten 2 mogelijkheden:
• een signal sturen naar de GUI thread, met een QImage als argument bijvoorbeeld.
• een QWidget derriven van QGLWidget, in de PaintEvent van dat object swapBuffers() aanroepen, in een aparte thread iets op die QGLContext tekenen met OpenGL.
Ja ik heb al tegen gekomen met emit enz..
Maar ik ben maar nieuw in pyqt en vindt nergens egt goede documentatie over emit enz..