Seite 1 von 1

Dynamisches Popup?

Verfasst: Montag 25. Dezember 2023, 14:37
von DMD-OL
Hi
Wie bekomme ich mein Popup-Fenster dynamisch an verschiedene Handy-Screens angepasst?
Ich versuche es so anzupassen, dass das Popup immer 80 % der Höhe und Breite des Handy-Screens einnimmt.
Oder nimmt man da metrics?
.py

Code: Alles auswählen

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen, ScreenManager
from kivy.uix.popup import Popup
from kivy.properties import StringProperty

Builder.load_file("main.kv")


class P(Popup):
    label_text = StringProperty()

    def __init__(self, title, content, **kwargs):
        super(P, self).__init__(**kwargs)
        self.title = title
        self.label_text = content
        self.size_hint = (None, None)
        # self.size = (dp(400), dp(400))
        self.size = (self.width - 20, self.height - 20)
        print(self.size)
        # self.center = (self.width / 2, self.height / 2)


class FirstScreen(Screen):
    @staticmethod
    def show_popup(screen):
        content = f"(1) This is the content of the\ncustom popup from {screen.name}"
        P(title=screen.name, content=content).open()

    @staticmethod
    def on_press():
        print("on_press")


class TestApp(App):
    def build(self):
        screen_manager = ScreenManager()
        screen_manager.add_widget(FirstScreen(name="first_screen"))
        return screen_manager


if __name__ == "__main__":
    TestApp().run()
.kv

Code: Alles auswählen

<P>:
    BoxLayout:
        orientation: 'vertical'

        Label:
            text: root.label_text
            size_hint: dp(.6), dp(.2)
            pos_hint: {"x": dp(.2), "top": dp(1)}

        Button:
            text: "Ok"
            size_hint_y: None
            height: dp(40)
            pos_hint: {"x": dp(0), "y": dp(.1)}
            on_press: root.dismiss()


<FirstScreen>:
    BoxLayout:
        orientation: 'vertical'

        Button:
            text: 'Show Popup'
            on_press: root.show_popup(root)

        Button:
            text: 'Go to Second Screen'
            on_press:
                root.on_press()

Re: Dynamisches Popup?

Verfasst: Dienstag 26. Dezember 2023, 12:57
von DMD-OL
Leute, sorry für diese Frage. Ich wollte nicht schon wieder nerven.
Ich hab es schon selbst hinbekommen :)
SORRY

Re: Dynamisches Popup?

Verfasst: Dienstag 26. Dezember 2023, 13:31
von grubenfox
DMD-OL hat geschrieben: Dienstag 26. Dezember 2023, 12:57 Leute, sorry für diese Frage. Ich wollte nicht schon wieder nerven.
Ich hab es schon selbst hinbekommen :)
SORRY
Die Frage nervt nicht... die fehlende Antwort.... Falls ich mich doch mal aufraffe und statt Kommandozeilenprogramme zu schreiben, mal was mit kivy versuche: woran hat es gelegen, worauf muss ein Kivy-Anfänger achten?

Re: Dynamisches Popup?

Verfasst: Dienstag 26. Dezember 2023, 17:16
von DMD-OL
So jetzte... sind mehrere Sachen:
Erstens:

Code: Alles auswählen

class TestApp(App):
    def build(self):
        if platform == "android" or platform == "ios":
            Window.maximize()
        else:
            Window.size = (600, 800)  # 600, 1024
        screen_manager = ScreenManager()
        screen_manager.add_widget(FirstScreen(name="first_screen"))
        screen_manager.add_widget(SecondScreen(name="second_screen"))
        return screen_manager
Coole Methode sich auf Windows ein annäherend ähnliches Fenster zu bauen, mit dem man arbeiten kann.

Code: Alles auswählen

class PopupErrors(Popup):
    error_text = StringProperty()

    def __init__(self, title, content, **kwargs):
        super(PopupErrors, self).__init__(**kwargs)
        self.title = title
        self.error_text = content
        self.size_hint = (None, None)
        self.size = (Window.width * 0.8, Window.height * 0.6)
Hiermit setze ich die App auf verschiedenen Handy-Screens um, so dass die auch vernünftig aussehen.
Es ist aber nicht dynamisch! Ich dachte mit, dass ich die App auch nicht "drehbar" machen will. Also brauche ich es nicht dynamisch.
Und die kv-Datei:

Code: Alles auswählen

<PopupErrors>:
    BoxLayout:
        orientation: 'vertical'

        Label:
            text: root.error_text
            font_size: '14sp'
            pos_hint: {"x": dp(0), "top": dp(1)}

        Button:
            text: "Schließen"
            font_size: '16sp'
            size_hint_y: None
            height: self.texture_size[1] + dp(40)
            pos_hint: {"x": dp(0), "y": dp(.1)}
            on_press: root.dismiss()