Dynamisches Popup?

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
DMD-OL
User
Beiträge: 316
Registriert: Samstag 26. Dezember 2015, 16:21

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()
DMD-OL
User
Beiträge: 316
Registriert: Samstag 26. Dezember 2015, 16:21

Leute, sorry für diese Frage. Ich wollte nicht schon wieder nerven.
Ich hab es schon selbst hinbekommen :)
SORRY
Benutzeravatar
grubenfox
User
Beiträge: 433
Registriert: Freitag 2. Dezember 2022, 15:49

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?
DMD-OL
User
Beiträge: 316
Registriert: Samstag 26. Dezember 2015, 16:21

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()
Antworten