Я адаптирую витрину-приборную панель кивы.В основном это kv-файлы, которые определяют отдельный экран с помощью screenmanager.
Моя цель - создать экран (DiashowApp), который запускает карусель приложения kivy (https://kivy.org/doc/stable/api-kivy.uix.carousel.html).. Поэтому я настроил дваклассы, которые загружают карусель и отображают изображения, которые определены в файле kv (diashowapp.kv).
Пожалуйста, помогите мне с запуском кода.
С уважением, Стефан
Не запускать классы, процедуры отладки с print-Statements показывают мне, что код двух новых классов не выполняется.
from time import time
from kivy.app import App
from os.path import dirname, join
from kivy.lang import Builder
from kivy.properties import NumericProperty, StringProperty, BooleanProperty,\
ListProperty
from kivy.clock import Clock
from kivy.animation import Animation
from kivy.uix.screenmanager import Screen
from kivy.uix.carousel import Carousel
from kivy.uix.image import AsyncImage
from subprocess import call
import subprocess
from kivy.logger import Logger
import random
Logger.info('title: This is a info message.')
Logger.debug('title: This is a debug message.')
skript_axis_all = "data/screens_axis.sh"
skript_kill_axis = "data/screens_kill_axis.sh"
skript_axis_01 = "data/screens_axis01.sh"
skript_axis_02 = "data/screens_axis02.sh"
skript_axis_03 = "data/screens_axis03.sh"
skript_axis_04 = "data/screens_axis04.sh"
class CarouselApp(Carousel):
def __init__(self, **kwargs):
super(CarouselApp, self).__init__(**kwargs)
self.direction = "right"
bilderliste = []
cmd2 = ['find', '/home/pi/Bilder/', '-maxdepth', '2', '-type', 'f', '-name', '*.JPG']
proc2 = subprocess.Popen(cmd2, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
o2, e2 = proc2.communicate()
#print('Output: ' + o2.decode('utf-8'))
#print('Error: ' + e2.decode('utf-8'))
#print('code: ' + str(proc2.returncode))
o2_zeilen = o2.split('\n')
counter = 0
for zeile2 in o2_zeilen:
bilderliste.append(zeile2.replace('\n',''))
random.shuffle(bilderliste, random.random)
for bildpfad in bilderliste:
if counter < 50:
counter = counter + 1
print(counter)
src = "%s" % bildpfad
print type(bildpfad)
if bildpfad is not None:
print('Bildpfad ist: %s') % src
image = AsyncImage(source = src, keep_ratio = True, allow_stretch = True)
try:
self.add_widget(image)
except Exception:
Logger.exception('Something happened in the add.widget!')
else:
pass
self.loop = True
Clock.schedule_interval(self.load_next, 5)
#print(self.slides)
class ShowcaseScreen(Screen):
fullscreen = BooleanProperty(False)
def add_widget(self, *args):
if 'content' in self.ids:
return self.ids.content.add_widget(*args)
return super(ShowcaseScreen, self).add_widget(*args)
class ShowcaseApp(App):
index = NumericProperty(-1)
current_title = StringProperty()
time = NumericProperty(0)
show_sourcecode = BooleanProperty(False)
sourcecode = StringProperty()
screen_names = ListProperty([])
hierarchy = ListProperty([])
def build(self):
self.title = 'hello world'
Clock.schedule_interval(self._update_clock, 1 / 60.)
self.screens = {}
self.available_screens = sorted([
'CarouselApp', 'Carousel', 'Scatter', 'Cameras'])
self.screen_names = self.available_screens
curdir = dirname(__file__)
self.available_screens = [join(curdir, 'data', 'screens',
'{}.kv'.format(fn).lower()) for fn in self.available_screens]
self.go_next_screen()
carouselapp.kv
ShowcaseScreen:
name: 'CarouselApp'
fullscreen: True
CarouselApp:
Ожидаемое: автоматическое вращение в режиме диа-шоу.
Фактически: изображения отображаются правильно, смахивание вручную работает правильно.