Seite 1 von 1

Im Konstruktor eine Funktion aufrufen...

Verfasst: Samstag 5. Oktober 2019, 17:34
von ProXy
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?

Re: Im Konstruktor eine Funktion aufrufen...

Verfasst: Samstag 5. Oktober 2019, 17:39
von Sirius3
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.

Re: Im Konstruktor eine Funktion aufrufen...

Verfasst: Samstag 5. Oktober 2019, 17:42
von ProXy
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)