`on_start` benutzt Du als Clock-Callback, in Wirklichkeit ist das aber ein Hook, der beim Start der Application aufgerufen wird.
Aus meiner Sicht zeigst Du gerade zu wenig Eigeninitiative, sondern fragst gleich bei jedem kleinen Problem.
Der Code, den ich gepostet habe, sollte nur lange Erklärungen illustrieren, weil manche Konzepte am besten am Code gesehen werden können. Deine Aufgabe ist es, alles zu verstehen, anstatt nur zu kopieren. Dazu gehört auch, die Kivy-Dokumentation zu lesen: https://kivy.org/doc/stable/api-kivy.app.html
Kivy AttributeError: 'NoneType' object has no attribute 'ids'
Ich habe den Code sowohl versucht zu verstehen als auch zu größten Teil verstanden.
Ich habe auch sehr viele Probleme gelöst ohne hier zu fragen.
Es soll nicht so wirken als ob ich keine Eigeninitiative zeigen würde.
Ich habe jeden Fehler zu erst selber versucht zu beheben und erst gefragt wenn ich keine Lösung gefunden habe.
Es würde keinen Sinn ergeben den Code nur zu kopieren und ihn nicht zu verstehen deshalb habe ich ihn mir auch angesehen und dann bearbeitet und verstanden.
...
Ich habe gerade in der kivy Dokumentation nachgesehen aber nichts gefunden was mir weiter helfen könnte.
Ich habe danach auch Verschiedenes im Internet nachgesehen und selber ein paar Dinge ausprobiert habe aber keine Lösung gefunden.
Ich habe sehr viel ausprobiert und bin immer noch auf keine Lösung gekommen deshalb würde ich euch gerne noch einmal um Hilfe bitten..
Ich habe auch sehr viele Probleme gelöst ohne hier zu fragen.
Es soll nicht so wirken als ob ich keine Eigeninitiative zeigen würde.
Ich habe jeden Fehler zu erst selber versucht zu beheben und erst gefragt wenn ich keine Lösung gefunden habe.
Es würde keinen Sinn ergeben den Code nur zu kopieren und ihn nicht zu verstehen deshalb habe ich ihn mir auch angesehen und dann bearbeitet und verstanden.
...
Ich habe gerade in der kivy Dokumentation nachgesehen aber nichts gefunden was mir weiter helfen könnte.
Ich habe danach auch Verschiedenes im Internet nachgesehen und selber ein paar Dinge ausprobiert habe aber keine Lösung gefunden.
Ich habe sehr viel ausprobiert und bin immer noch auf keine Lösung gekommen deshalb würde ich euch gerne noch einmal um Hilfe bitten..
- __blackjack__
- User
- Beiträge: 13066
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@MupfSpace: Das `on_start()` die falsche Methode ist um wiederholt aufgerufen zu werden weil das die Methode ist die beim Start *einmal* aufgerufen wird, hatte ich Dir aber auch schon mal geschrieben. Das `Clock.schedule_interval()` wäre beispielsweise etwas was eigentlich *in* diese Methode gehört, weil das ja beim Start der Anwendung gemacht werden soll. Die `on_start()`-Methode wird beim Start der App vom Rahmenwerk aufgerufen. Und dabei wird *kein* Argument übergeben. Deine `on_start()` erwartet aber ein Argument – bekommt es nicht und das kracht dann halt. Das die Methode keine Argumente erwartet sieht man in der Dokumentation.
Was die Rückruffunktion als Argument bekommt und auch wie man eine aufruft die kein Argument bekommen soll, steht ebenfalls in der Dokumentation (vom `kivy.clock`-Modul – mit Codebeispiel. Wobei wie gesagt `on_start()` die falsche Methode als Rückrufziel ist, auch wenn man das `dt`-Argument beseitigt.
Was die Rückruffunktion als Argument bekommt und auch wie man eine aufruft die kein Argument bekommen soll, steht ebenfalls in der Dokumentation (vom `kivy.clock`-Modul – mit Codebeispiel. Wobei wie gesagt `on_start()` die falsche Methode als Rückrufziel ist, auch wenn man das `dt`-Argument beseitigt.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
okay ich habe mir jetzt den Code aus der on_start() Funktion kopiert(sorry, ich hab zwar vorher gesagt ich mache das nicht aber das alles noch mal neu zu schrieben ist irrsinnig)
und zum größten teil(eigentlich alles bis auf "blink") eingefügt.
und habe dann gesagt
und es funktioniert
________________________________________________________________
Dake für eure hilfe
und zum größten teil(eigentlich alles bis auf "blink") eingefügt.
und habe dann gesagt
Code: Alles auswählen
Clock.schedule_interval(app.update_all, 30)
________________________________________________________________
Dake für eure hilfe
so ich hab jetzt Ewigkeiten rum probiert und keine Möglichkeit gefunden.
gibt es auch eine Möglichkeit wieder zu beenden?
gibt es auch eine Möglichkeit
Code: Alles auswählen
Clock.schedule_interval(callback, time)
Wirklich Ewigkeiten? Und in der Ewigkeit bist du nicht mal an der offiziellen Dokumentation zu Clock.schedule* vorbeigekommen?
https://kivy.org/doc/stable/api-kivy.cl ... scheduling
https://kivy.org/doc/stable/api-kivy.cl ... scheduling
wenn ich es so mache:
dann kommt dieser fehler
Code: Alles auswählen
def auto_update(self, dt):
with open(os.path.join(APP_PATH, "AutoUpdate.val"), "r") as response:
auto_update_bool = response.read()
with open(os.path.join(APP_PATH, "AutoUpdateTime.val"),"r") as response:
auto_update_time = response.read()
if auto_update_bool == "1":
j=Clock.schedule_interval(self.update_all, int(auto_update_time))
j()
else:
j.cancel()
Code: Alles auswählen
[INFO ] [Logger ] Record log in C:\Users\MupfSpace\.kivy\logs\kivy_19-02-03_6.txt
[INFO ] [Kivy ] v1.10.1
[INFO ] [Python ] v3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 22:20:52) [MSC v.1916 32 bit (Intel)]
[INFO ] [Factory ] 194 symbols loaded
[INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_gif (img_pil, img_ffpyplayer ignored)
[INFO ] [Window ] Provider: sdl2
[INFO ] [GL ] Using the "OpenGL" graphics system
[INFO ] [GL ] GLEW initialization succeeded
[INFO ] [GL ] Backend used <glew>
[INFO ] [GL ] OpenGL version <b'4.5.0 - Build 22.20.16.4771'>
[INFO ] [GL ] OpenGL vendor <b'Intel'>
[INFO ] [GL ] OpenGL renderer <b'Intel(R) HD Graphics 620'>
[INFO ] [GL ] OpenGL parsed version: 4, 5
[INFO ] [GL ] Shading version <b'4.50 - Build 22.20.16.4771'>
[INFO ] [GL ] Texture max size <16384>
[INFO ] [GL ] Texture max units <32>
[INFO ] [Window ] auto add sdl2 input provider
[INFO ] [Window ] virtual keyboard not allowed, single mode, not docked
[INFO ] [Text ] Provider: sdl2
[WARNING] [Call to deprecated function __init__ in C]\Python37\lib\site-packages\kivy\uix\listview.py line 845.Called from C:\Python37\lib\site-packages\kivy\lang\builder.py line 582 by _apply_rule().
[WARNING] [Call to deprecated function __init__ in C]\Python37\lib\site-packages\kivy\adapters\simplelistadapter.py line 49.Called from C:\Python37\lib\site-packages\kivy\uix\listview.py line 859 by __init__().
[WARNING] [Call to deprecated function __init__ in C]\Python37\lib\site-packages\kivy\adapters\adapter.py line 111.Called from C:\Python37\lib\site-packages\kivy\adapters\simplelistadapter.py line 55 by __init__().
[WARNING] [Call to deprecated function __init__ in C]\Python37\lib\site-packages\kivy\uix\abstractview.py line 42.Called from C:\Python37\lib\site-packages\kivy\uix\listview.py line 865 by __init__().
[INFO ] [GL ] NPOT texture support is available
[WARNING] [Call to deprecated function __init__ in C]\Python37\lib\site-packages\kivy\adapters\listadapter.py line 185.Called from <string> line 433 by <module>().
[WARNING] [Call to deprecated function __init__ in C]\Python37\lib\site-packages\kivy\adapters\adapter.py line 111.Called from C:\Python37\lib\site-packages\kivy\adapters\listadapter.py line 186 by __init__().
Traceback (most recent call last):
File "c:\Users\MupfSpace\.vscode\extensions\ms-python.python-2019.1.0\pythonFiles\ptvsd_launcher.py", line 45, in <module>
main(ptvsdArgs)
File "c:\Users\MupfSpace\.vscode\extensions\ms-python.python-2019.1.0\pythonFiles\lib\python\ptvsd\__main__.py", line 348, in main
run()
File "c:\Users\MupfSpace\.vscode\extensions\ms-python.python-2019.1.0\pythonFiles\lib\python\ptvsd\__main__.py", line 253, in run_file
runpy.run_path(target, run_name='__main__')
File "C:\Python37\lib\runpy.py", line 263, in run_path
pkg_name=pkg_name, script_name=fname)
File "C:\Python37\lib\runpy.py", line 96, in _run_module_code
mod_name, mod_spec, pkg_name, script_name)
File "C:\Python37\lib\runpy.py", line 85, in _run_code
exec(code, run_globals)
File "c:\Users\MupfSpace\Desktop\App test1\mainpy3v6.0 - Kopie.py", line 854, in <module>
main()
File "c:\Users\MupfSpace\Desktop\App test1\mainpy3v6.0 - Kopie.py", line 850, in main
app.auto_update("_")
File "c:\Users\MupfSpace\Desktop\App test1\mainpy3v6.0 - Kopie.py", line 822, in auto_update
j.cancel()
Wo in den von mir verlinkten Beispielen kommt den so etwas vor, wie du es hier hingefrickelt hast? Der ERSTE Aufruf von Clock.schedule_interval liefert dir ein Event-Objekt, das du dann canceln kannst.
Gehst du etwa auch zum Online-Haendler deiner Wahl, bestellst Ware, bekommst eine Bestellbestaetigung, und wenn du dir dann ueberlegt hast, dass du die Ware nicht willst, bestellst du NOCHMAL DAS GLEICHE, um dann gleich auf stornieren zu druecken - und dann erwartest du, dass die urspruengliche Bestellung auch magisch storniert ist? So funktioniert das doch nirgendwo in der Welt, wieso sollte das hier ploetzlich so sein?
Und zusaetzlich dazu ist das in sich natuerlich auch falsch. Warum rufst du j auf? Mit j(). Was soll das bringen? Und im else-Zweig hast du gar kein j, willst aber darauf zugreifen mit j.cancel().
Das ist alles kompletter Murks.
Gehst du etwa auch zum Online-Haendler deiner Wahl, bestellst Ware, bekommst eine Bestellbestaetigung, und wenn du dir dann ueberlegt hast, dass du die Ware nicht willst, bestellst du NOCHMAL DAS GLEICHE, um dann gleich auf stornieren zu druecken - und dann erwartest du, dass die urspruengliche Bestellung auch magisch storniert ist? So funktioniert das doch nirgendwo in der Welt, wieso sollte das hier ploetzlich so sein?
Und zusaetzlich dazu ist das in sich natuerlich auch falsch. Warum rufst du j auf? Mit j(). Was soll das bringen? Und im else-Zweig hast du gar kein j, willst aber darauf zugreifen mit j.cancel().
Das ist alles kompletter Murks.
Klar geht das. Programmieren kann man vieles. Aber eben nicht so, wie du es getan hast. Du musst dir die Rueckgabe des ERSTEN Clock.schedule_interval-Aufrufes merken. Und DARAUF kannst du dann cancel aufrufen. Wann du das machst ist dein Bier.
Ich habe dir den Link geschickt. Darin stehen Beispiele. Dort wird Clock.schedule_irgendwas aufgerufen. Und das gibt etwas zurueck. Du hast das OBEN IN DEINEM EIGENEN CODE GEMACHT. Und dem Namen "j" zugewiesen. Du hast es falsch gemacht, aber du hast es gemacht. Wieso weisst du ploetzlich nicht, was eine Rueckgabe ist?
Seuzf. Nein. Du schreibst das mit
nun alles funktionieren wuerde. DAS IST DER AUFRUF VON Clock.schedule_interval UM DEN ES GEHT. Wo steht der?
Du sollst nicht *in* update_all etwas anders machen. Du musst beim anmelden von update_all als etwas, das alle 30 Sekunden (oder was die Zeitangabe da ist) dir den RUECKGABEWERT merken. Das ist deine Bestellbestaetigung fuer "einmal ein Ding alle 30 Sekunden aufrufen", und DIE kannst du dann canceln.
Du kannst nicht durch raten programmieren lernen. Wirklich nicht. Du hast offensichtlich wirklich ganz grosse Luecken schon bei absoluten Grundlagen, wie eben das Funktionen und Methoden Rueckgabewerte haben. Arbeite dich mal an kleineren Programmen heran.
Code: Alles auswählen
Clock.schedule_interval(app.update_all, 30)
Du sollst nicht *in* update_all etwas anders machen. Du musst beim anmelden von update_all als etwas, das alle 30 Sekunden (oder was die Zeitangabe da ist) dir den RUECKGABEWERT merken. Das ist deine Bestellbestaetigung fuer "einmal ein Ding alle 30 Sekunden aufrufen", und DIE kannst du dann canceln.
Du kannst nicht durch raten programmieren lernen. Wirklich nicht. Du hast offensichtlich wirklich ganz grosse Luecken schon bei absoluten Grundlagen, wie eben das Funktionen und Methoden Rueckgabewerte haben. Arbeite dich mal an kleineren Programmen heran.
ich habe des jetzt so gemacht:
und es funktioniert
EDIT:
aber ich galube du hast mal in einem andren thema mit den datenabnken mal zu mir gesagt ich soll try except nicht verwenden ist das immer noch so?
Code: Alles auswählen
def update_all(self, dt):
try:
j.cancel()
except:
pass
EDIT:
aber ich galube du hast mal in einem andren thema mit den datenabnken mal zu mir gesagt ich soll try except nicht verwenden ist das immer noch so?
- __blackjack__
- User
- Beiträge: 13066
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@MupfSpace: Das sollte so aber nicht funktionieren, weil das bedeutet das `j` jetzt eine globale Variable ist. Aber ich vermute mal das Dir das egal ist und Du kein Python und nicht programmieren lernen willst…
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
das stimmt gar nicht wenn ich nicht programmieren lernen wollen würde dann würde ich das alles nicht machen.__blackjack__ hat geschrieben: ↑Sonntag 3. Februar 2019, 18:14 Aber ich vermute mal das Dir das egal ist und Du kein Python und nicht programmieren lernen willst…
j kommt von der if Bedingung in auto_update()
Das bedeutet wohl dass da auch das cancel stattfinden soll.
Wahrscheinlich ist es auch eine gute Idee j immer zu beenden wenn die Einstellungen verändert werden damit wenn die Zahl verändert nicht alle -alte Zahl sekunden- und alle -neue Zahl sekunden- Updatet.
Aber ich habe fest gestellt (bitte korrigiert mich wenn ich falsch liege) in einer zeile nach der Erstellung von j und in der gleichen if Bedingung geschehen muss aber wie ist das möglich wenn die if Bedingung nur geschieht wenn die Einstellungen stimmt.
Das bedeutet wohl dass da auch das cancel stattfinden soll.
Wahrscheinlich ist es auch eine gute Idee j immer zu beenden wenn die Einstellungen verändert werden damit wenn die Zahl verändert nicht alle -alte Zahl sekunden- und alle -neue Zahl sekunden- Updatet.
Aber ich habe fest gestellt (bitte korrigiert mich wenn ich falsch liege) in einer zeile nach der Erstellung von j und in der gleichen if Bedingung geschehen muss aber wie ist das möglich wenn die if Bedingung nur geschieht wenn die Einstellungen stimmt.