Seite 2 von 2

Re: Kivy: String von .py an Label .kv übergeben

Verfasst: Freitag 8. September 2023, 12:34
von DMD-OL
Das habe ich schon verstanden.
Ich werde mich aber erstmal um meine Baustelle, wieso ich in einer Funktion zwar ein TextInput lesen, aber ein Label in derselben Klasse nicht mit Text beschreiben kann.

Re: Kivy: String von .py an Label .kv übergeben

Verfasst: Freitag 8. September 2023, 12:45
von DMD-OL
Wieso?

Code: Alles auswählen

class SecondScreen(Screen):
    def __init__(self, **kwargs):
        super(SecondScreen, self).__init__(**kwargs)


    def write(self):
        user_input = str(self.ids.input1.text)
        communication.write(user_input)
        self.label1.text = user_input   # Hier funktioniert das


    def receive(self, server_input):
        print(server_input)
        self.label1.text = "Hello world"  # Hier funktioniert das nicht
Wieso ist in der Funktion "write" alles ok und in "receive" nicht?

Code: Alles auswählen

 Traceback (most recent call last):
   File "C:\Program Files\Python310\lib\threading.py", line 1016, in _bootstrap_inner
     self.run()
   File "C:\Program Files\Python310\lib\threading.py", line 953, in run
     self._target(*self._args, **self._kwargs)
   File "C:\Users\dmd__\Documents\Programmierung\PyCharm\GPS-App\gps_client.py", line 39, in receive
     self.second.receive(message)
   File "C:\Users\dmd__\Documents\Programmierung\PyCharm\GPS-App\gps_client.py", line 87, in receive
     self.label1.text = "Hello world"  # Hier funktioniert das nicht
 AttributeError: 'NoneType' object has no attribute 'text'

Re: Kivy: String von .py an Label .kv übergeben

Verfasst: Freitag 8. September 2023, 12:52
von __deets__
Weil das aus einem Thread heraus nicht aufgerufen werden darf. Was ja schon durchaus mehrfach erwaehnt wurde. Wahrscheinlich eine Race-Condition, und wenn es die nicht waere, dann eben ein Programmierfehler.

Gbit's nen tieferen Grund, warum du das nicht mit Clock machst, wie von Dennis vorgeschlagen?

Re: Kivy: String von .py an Label .kv übergeben

Verfasst: Freitag 8. September 2023, 14:57
von DMD-OL
Ne, aber so deutlich wurde das hier noch nicht vermittelt.

Re: Kivy: String von .py an Label .kv übergeben

Verfasst: Freitag 8. September 2023, 17:37
von sparrow
Die Baustelle ist übrigens schon ganz schön lange offen.

Re: Kivy: String von .py an Label .kv übergeben

Verfasst: Sonntag 10. September 2023, 17:24
von DMD-OL
Ich habe da noch ein paar Fragen zum grundsätzlichen Plan:
1. Muss ich den Server auch mit Clock.schedule_interval(partial(handle, client), 0.5) laufen lassen oder kann ich den auch mit threading starten? Sprich: Verstehen sich Clock.shedule und Threading?
2. Für den Client stelle ich erst eine Verbindung ohne Clock und Threading her (direkt die Funktion connect ansprechen), und starte dann jedesmal wenn ich etwas senden will, mit Clock.shedule_once einen Datenstrom?
3. Client-Receive muss dann wohl mit Clock.schedule_interval gemacht werden?
Bin mir da noch nicht ganz im klaren drüber.

Re: Kivy: String von .py an Label .kv übergeben

Verfasst: Sonntag 10. September 2023, 18:53
von __deets__
Beim senden gibt es keinen Grund für einen Timer, einfach sendall aufrufen. Im Timer callback kann man prüfen, ob Daten angekommen sind, und die dann verarbeiten. Das ist auch gleich für Server und Client. Threading und timer zu mischen ist technisch natürlich möglich, praktisch sehe ich nicht, warum.