Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
pyqt async sevensegment example using quamash.QEventLoop and max7219
import sys
import time
import asyncio
from PyQt5.QtWidgets import (QApplication, QProgressBar, QMainWindow, QSlider,
QVBoxLayout, QWidget)
from quamash import QEventLoop, QThreadExecutor
import max7219.led as led
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.progress = QProgressBar()
self.progress.setRange(0, 99)
self.progress.show()
self.slider = QSlider()
self.slider.show()
# set layout
self.layout = QVBoxLayout()
self.layout.addWidget(self.progress)
self.layout.addWidget(self.slider)
self.win = QWidget()
self.win.resize(320, 240)
self.win.setLayout(self.layout)
self.win.show()
self.device = led.sevensegment()
self.device.clear()
with loop:
# context manager calls .close() when loop completes,
# and releases all resources
loop.run_until_complete(self.master())
@asyncio.coroutine
def master(self):
yield from self.first_50()
with QThreadExecutor(1) as exec:
yield from loop.run_in_executor(exec, self.last_50)
print('ready!')
def updateValue(self, val):
self.progress.setValue(val)
self.device.write_text(0, str(val))
@asyncio.coroutine
def first_50(self):
for i in range(50):
self.updateValue(i)
yield from asyncio.sleep(.1)
def last_50(self):
for i in range(50, 100):
loop.call_soon_threadsafe(self.updateValue, i)
time.sleep(.1)
if __name__ == '__main__':
app = QApplication(sys.argv)
loop = QEventLoop(app)
asyncio.set_event_loop(loop)
main = MainWindow()
main.show()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment