Closed
Description
CircuitPython version
Adafruit CircuitPython 8.0.5 on 2023-03-31; Adafruit Monster M4SK with samd51j19
Adafruit CircuitPython 8.1.0-beta.1-3-ge8711ee83 on 2023-03-31; Adafruit Monster M4SK with samd51j19
Code/REPL
import board
import busio
import digitalio
import displayio
from adafruit_st7789 import ST7789
displayio.release_displays()
# Left screen spi bus
left_spi = busio.SPI(board.LEFT_TFT_SCK, MOSI=board.LEFT_TFT_MOSI)
left_tft_cs = board.LEFT_TFT_CS
left_tft_dc = board.LEFT_TFT_DC
left_display_bus = displayio.FourWire(
left_spi, command=left_tft_dc, chip_select=left_tft_cs
)
left_display = ST7789(left_display_bus, width=240, height=240, rowstart=80)
# right display spi bus
right_spi = busio.SPI(board.RIGHT_TFT_SCK, MOSI=board.RIGHT_TFT_MOSI)
right_tft_cs = board.RIGHT_TFT_CS
right_tft_dc = board.RIGHT_TFT_DC
right_display_bus = displayio.FourWire(
right_spi,
command=right_tft_dc,
chip_select=right_tft_cs,
reset=board.RIGHT_TFT_RST,
)
right_display = ST7789(
right_display_bus, width=240, height=240, rowstart=80
)
Behavior
Adafruit CircuitPython 8.0.5 on 2023-03-31; Adafruit Monster M4SK with samd51j19
>>> import bugtest
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "bugtest.py", line 30, in <module>
File "adafruit_st7789.py", line 64, in __init__
ValueError: Group already used
>>>
Description
This is because displayio.Display() attempts to assign the terminal group as the root group of every new display, regardless of whether it was already set to another display. And common_hal_displayio_display_set_root_group
raises an exception.
The init code could call displayio_display_core_set_root_group
directly and ignore the return value instead ?
circuitpython/shared-module/displayio/Display.c
Lines 137 to 139 in e8711ee
circuitpython/shared-module/displayio/Display.c
Lines 407 to 413 in e8711ee
Additional information
No response