Im Konstruktor eine Funktion aufrufen...

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
ProXy
User
Beiträge: 4
Registriert: Sonntag 29. September 2019, 19:26

Hallo zusammen,

ich versuche gerade meine ersten Schritte in python und scheitere schon an einem sehr simplen Problem. Ich möchte im Konstruktor (__init__) eine bestehende Funktion aufrufen. Diese Funktion benötigt im Normalfall zwei Parameter. Wenn ich versuche diese Funktion auszuführen erhalte ich einen Speicherzugriffsfehler.

Hier mal der entsprechende Code:

Code: Alles auswählen

class TimeTracker(Widget):
    current_time = StringProperty()

    def __init__(self):
        self.updateTime(None)

    def updateTime(self, dt):
        self.current_time = datetime.now().strftime('%H:%M:%S')


class TimeTrackerApp(App):
    def build(self):
        timetracker = TimeTracker()
        #Clock.schedule_interval(timetracker.updateTime, 0.1)
        return timetracker
Ich möchte nur sofort die Zeit anzeigen, ohne dass ich erst warten muss, bis der Timer das aktualisiert..

Was mache ich falsch?
Sirius3
User
Beiträge: 18270
Registriert: Sonntag 21. Oktober 2012, 17:20

Du solltest noch verraten, welches Framework Du da benutzt.
Und dieses Framework scheint nicht richtig initialisiert worden zu sein, da es sonst zu keinem Speicherfehler kommen sollte. Den Code zeigst Du aber gar nicht, so dass man Dir dabei auch nicht helfen kann.
ProXy
User
Beiträge: 4
Registriert: Sonntag 29. September 2019, 19:26

Ich nutze kivy. Wenn ich __init__ nicht verwende, läuft die App problemlos..

Hier nochmal der ganze Code:

Code: Alles auswählen

import kivy
kivy.require('2.0.0')

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import StringProperty
from kivy.clock import Clock
from datetime import datetime

class TimeTracker(Widget):
    current_time = StringProperty()

    def __init__(self):
        self.updateTime(None)

    def updateTime(self, dt):
        self.current_time = datetime.now().strftime('%H:%M:%S')


class TimeTrackerApp(App):
    def build(self):
        timetracker = TimeTracker()
        #Clock.schedule_interval(timetracker.updateTime, 0.1)
        return timetracker


if __name__ == '__main__':
    TimeTrackerApp().run()
Edit: Konnte das Problem selber lösen. Wenn man in kivy __init__ nutzt, dann muss man auch mit super arbeiten. Hier die neue __init__

Code: Alles auswählen

    def __init__(self, **kwargs):
        super(TimeTracker, self).__init__(**kwargs)
        self.updateTime(None)
Antworten