Kivy Label czarny text na czarnym tle

0

Witam
Czy spotkał się ktoś z takim przypadkiem jak w temacie?
Tworzę sobie apkę na Androida. W kompie pod linuksem jest ok. Wysyłam po usb buildozer deploy run jest ok. A po 'kompilacji' buildozerem i instalacji na Androidzie efekt jest jak poniżej:
screenshot-20220623143920.png
A tak to wygląda gdy linuks lub deploy run.
screenshot-20220623144105.png
Wachluję różnymi parametrami i nie mogę znaleźć tych właściwych.
Może ktoś już to przerabiał i coś wie.

Pozdrawiam
Radosław Głębicki

0

W ciemno ciężko powiedzieć, sprawdź logi aplikacji z adb logcat (możesz też wrzucić tu).

0

Szukam czegoś o limicie wielkości Label coś w temacie texture_size? Tekst do wyświetlenia ma ponad 9000 znaków. Jest umieszczony w ScrollView.
Może coś tutaj jest nie tak. Przycinam zmienną do 5750 znaków i wyświetla poprawnie, a 6500 już nie.

Pozdrawiam

0

To co nie działa powyżej to potrzebuję czymś zastąpić. Idea była następująca: wykorzystanie anchor i ref z markup=True do poruszania się po Label. Rozbić na mniejsze nie mogę bo przeskakiwanie z miejsca na miejsce nie będzie działało.
Czy ktoś programujący w Kivy może rzucić jakimś pomysłem. Coś w stylu html z #kotwicą i powrotem do góry. To co tworzę to pomoc ze spisem treści.

Pozdrawiam

1

Nie wiem co tam dokładnie tworzysz ale ściany tekstu pewnie nie są jakoś mile widziane w apkach mobilnych więc może miałoby sens to podzielić na mniejsze sekcje i rozdziały. Nawigację można by następnie zaimplenetować dla Label z włączonym markupem (markup=True), dzięki czemu można wrzucić w tekst linki ([ref=http://google.com]treść linku[/ref]). Potem w callbacku on_ref_press można zaimplementować, by podmienił całą zawartość Label inną treścią. Na szybko:

from kivy.app import App
from kivy.uix.label import Label


MAIN_PAGE = """
* [color=ff0000][ref=PAGE1]Page 1[/ref][/color]
* [color=ff0000][ref=PAGE2]Page 2[/ref][/color]
"""

PAGE1 = """
* [color=ff0000][ref=MAIN_PAGE]Back[/ref][/color]

Blah blah
"""

PAGE2 = """
* [color=ff0000][ref=MAIN_PAGE]Back[/ref][/color]

Zażółć gęślą jaźń
"""

PAGES = {
    "MAIN_PAGE": MAIN_PAGE,
    "PAGE1": PAGE1,
    "PAGE2": PAGE2,
}


class MyLabel(Label):
    def on_ref_press(self, ref):
        self.text = PAGES[ref]


class MyApp(App):
    def build(self):
        return MyLabel(text=MAIN_PAGE, markup=True)


if __name__ == "__main__":
    MyApp().run()

Pewnie nie byłoby problemem również aby on_ref_press dla jakiejś wartości implementował scrollowanie do góry.

0

Obecnie mam następujący dziwny problem. Chcę przeskakiwać do pozycji [anchor] dla przykładu ostatniego Labela z rozdziałem spisu treści. Pozycja to 1044 pixele od dołu (durne Kivy 0 dla y na dole). Z wyliczeń dla scroll_y wychodzi 0.21 dla całego ScrollView 4980px.
Niestety ta pozycja jest za wysoko. Ręcznie dopiero 0.088 ustawia ładnie na początku rozdziału. Czym dalej od dołu to odchylenie (błąd) jest mniejszy.
Czym to może być spowodowane?

Pozdrawiam

0

Spróbuj na końcu ScrollView dodać coś pustego rozmiarem wysokości tegoż ScrollView, czyli jak przeskrolujesz do samego końca na dół ma być widocznie wyłącznie to coś pustego ale w całości.

1

Jest metoda pomocnicza convert_distance_to_scroll, która wylicza wartość offsetu dla dystansu w pikselach, więc można przekazać tam pozycję kotwicy z tekstu.

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.scrollview import ScrollView
from kivy.uix.boxlayout import BoxLayout


class ScrollViewApp(App):
    def build(self):
        layout = BoxLayout(orientation="vertical", size_hint_y=None)
        layout.bind(minimum_height=layout.setter('height'))

        text = "\n".join(f"[anchor=anchor{i}]{i}" for i in range(100))
        text += "\n[color=ff0000][ref=UP_TO_15]UP_TO_15[/ref][/color]"

        self.label = Label(text=text, size_hint_y=None, markup=True, on_ref_press=self.ref_press)
        self.label.bind(texture_size=self.label.setter('size'))

        layout.add_widget(self.label)
        self.scroll = ScrollView(size_hint_y=1, do_scroll_x=False)
        self.scroll.add_widget(layout)
        return self.scroll

    def ref_press(self, label, ref):
        anchor15_y = self.label.anchors["anchor15"][1]
        self.scroll.scroll_y = 1 - self.scroll.convert_distance_to_scroll(0, anchor15_y)[1]

if __name__ == '__main__':
    ScrollViewApp().run()
0

Po wstawieniu całości w Popup zaczęło się ponownie rozjeżdżać. :-(

"U mnie działa"

from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.label import Label
from kivy.uix.scrollview import ScrollView
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.popup import Popup


class ScrollViewApp(App):
    def build(self):
        layout = BoxLayout(orientation="vertical", size_hint_y=None)
        layout.bind(minimum_height=layout.setter('height'))

        text = "\n".join(f"[anchor=anchor{i}]{i}" for i in range(100))
        text += "\n[color=ff0000][ref=UP_TO_15]UP_TO_15[/ref][/color]"

        self.label = Label(text=text, size_hint_y=None, markup=True, on_ref_press=self.ref_press)
        self.label.bind(texture_size=self.label.setter('size'))

        layout.add_widget(self.label)
        self.scroll = ScrollView(size_hint_y=1, do_scroll_x=False)
        self.scroll.add_widget(layout)

        self.popup = Popup(size_hint=(0.7, 0.7))
        self.popup.add_widget(self.scroll)

        open_button = Button(on_press=self.show_popup)
        return open_button

    def show_popup(self, popup):
        self.popup.open()

    def ref_press(self, label, ref):
        anchor15_y = self.label.anchors["anchor15"][1]
        self.scroll.scroll_y = 1 - self.scroll.convert_distance_to_scroll(0, anchor15_y)[1]

if __name__ == '__main__':
    ScrollViewApp().run()

1 użytkowników online, w tym zalogowanych: 0, gości: 1