Ich brauche eure Mithilfe nochmal.
Ich versteh nicht, wo der Fehler in meinem Code ist.
Ich frage im FirstScreen die Berechtigungen ab, die ich später für die App benötige.
Wenn die Berechtigungen durch den User (Handy Click) erteilt werden, soll direkt auf den SecondScreen umgeschaltet werden und wenn
nicht, soll ein Popup mit einer Fehlermedung (nicht alle Berechtigungen wurden vom User erteilt) ausgegeben werden.
Das Umschalten funktioniert aber nicht und auch das Aufrufen des Popups nicht (obwohl ich per Button das Popup fehlerfrei ansprechen kann).
Eine Fehlerausgabe erhalte ich nicht, leider. Es passiert aber auch nichts weiter danach.
Code: Alles auswählen
from kivy.app import App
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition
from kivy.lang import Builder
from kivy.uix.popup import Popup
from kivy.properties import StringProperty
from kivy.core.window import Window
from kivy.utils import platform
class PopupErrors(Popup):
error_text = StringProperty()
def __init__(self, title, text, **kwargs):
super(PopupErrors, self).__init__(**kwargs)
self.title = title
self.error_text = text
self.size_hint = (None, None)
self.size = (Window.width * 0.8, Window.height * 0.6)
class FirstScreen(Screen):
def __init__(self, **kwargs):
super(FirstScreen, self).__init__(**kwargs)
if platform == "android":
from android.permissions import request_permissions, Permission
def callback(_, results):
if all([res for res in results]):
self.ids.lbl_status.text = f"Callback: All permissions granted."
self.manager.current = "first_screen"
else:
self.ids.lbl_status.text = f"Callback: Some permissions refused."
text = f"(2) This is the content\nof the custom popup"
PopupErrors(title=screen.name, text=text).open()
request_permissions(
[
Permission.ACCESS_COARSE_LOCATION,
Permission.ACCESS_FINE_LOCATION,
Permission.WRITE_EXTERNAL_STORAGE,
Permission.READ_EXTERNAL_STORAGE,
],
callback,
)
class SecondScreen(Screen):
def __init__(self, **kwargs):
super(SecondScreen, self).__init__(**kwargs)
def change_label_text(self):
self.ids.my_label.text = "Neuer Text!"
def switch_to_screen(self):
self.manager.transition.direction = "right"
self.manager.current = "first_screen"
def on_leave(self):
self.ids.my_label.text = "This is the Second Screen"
@staticmethod
def show_popup(screen):
text = f"(2) This is the content\nof the custom popup"
PopupErrors(title=screen.name, text=text).open()
class ScreenManagerApp(App):
def build(self):
Builder.load_file("layout.kv")
screen_manager = ScreenManager()
screen_manager.transition = FadeTransition()
screen_manager.add_widget(FirstScreen(name="first_screen"))
screen_manager.add_widget(SecondScreen(name="second_screen"))
return screen_manager
if __name__ == "__main__":
ScreenManagerApp().run()
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()
<FirstScreen>:
BoxLayout:
orientation: 'vertical'
Label:
id: lbl_status
<SecondScreen>:
BoxLayout:
orientation: 'vertical'
Label:
id: my_label
text: 'This is the Second Screen'
Button:
text: 'Change label text'
on_press: root.change_label_text()
Button:
text: 'Show Popup'
on_press: root.show_popup(root)
Button:
text: "To FirstScreen"
font_size: '25sp'
on_release: root.switch_to_screen()