Kivy AttributeError: 'NoneType' object has no attribute 'ids'

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.
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

Bitte
Gebt mir wenigstens einen Tip...
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich benutze kein Android. Ich kann das also auch nicht ausprobieren. Das von dir genannte Framework hat eine Beispielanwendung. Probier die zum laufen zu bringen Und frag beim Autor des Tools nach, wenn du damit Probleme hast. Dann gewinnst du hoffentlich Erkenntnisse, wie das funktioniert.
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

ich habe es nicht geschafft die Beispiel Anwendung zum laufen zu bringen
es könnte daran liegen dass "noti_builder" pyjnius verwendet:
Erste zeile von noti_builder:

Code: Alles auswählen

from jnius import autoclass, detach
ich habe es verucht zu installieren aber bekomme immer diesen fehler

Code: Alles auswählen

Collecting pyjnius
  Using cached https://files.pythonhosted.org/packages/b6/57/c90acf31322e6417f06c90410dbfcb149633a6006b7efbf99dfebe177c1f/pyjnius-1.2.0.tar.gz
Requirement already satisfied: six>=1.7.0 in c:\users\mupfspace\appdata\roaming\python\python37\site-packages (from pyjnius) (1.12.0)
Requirement already satisfied: cython in c:\python37\lib\site-packages (from pyjnius) (0.29.6)
Building wheels for collected packages: pyjnius
  Building wheel for pyjnius (setup.py) ... error
  Complete output from command c:\python37\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\MUPFSP~1\\AppData\\Local\\Temp\\pip-install-6x0l7_5g\\pyjnius\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d C:\Users\MUPFSP~1\AppData\Local\Temp\pip-wheel-p37h30j9 --python-tag cp37:
  WARNING: Not able to assign machine() = AMD64 to a cpu value!
           Using cpu = 'i386' instead!
  JDK_HOME: C:\Program Files\Java\jdk-11.0.2\bin

  JRE_HOME: None

  warning: [options] bootstrap class path not set in conjunction with -source 6
  warning: [options] source value 6 is obsolete and will be removed in a future release
  warning: [options] target value 1.6 is obsolete and will be removed in a future release
  warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
  4 warnings
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build\lib.win32-3.7
  copying jnius_config.py -> build\lib.win32-3.7
  creating build\lib.win32-3.7\jnius
  copying jnius\reflect.py -> build\lib.win32-3.7\jnius
  copying jnius\signatures.py -> build\lib.win32-3.7\jnius
  copying jnius\__init__.py -> build\lib.win32-3.7\jnius
  creating build\lib.win32-3.7\jnius\src
  creating build\lib.win32-3.7\jnius\src\org
  creating build\lib.win32-3.7\jnius\src\org\jnius
  copying jnius\src\org\jnius\NativeInvocationHandler.class -> build\lib.win32-3.7\jnius\src\org\jnius
  copying jnius\src\org\jnius\NativeInvocationHandler.java -> build\lib.win32-3.7\jnius\src\org\jnius
  running build_ext
  cythoning jnius\jnius.pyx to jnius\jnius.c
  c:\python37\lib\site-packages\Cython\Compiler\Main.py:367: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: C:\Users\MUPFSP~1\AppData\Local\Temp\pip-install-6x0l7_5g\pyjnius\jnius\jnius.pyx
    tree = Parsing.p_module(s, pxd, full_module_name)
  building 'jnius' extension
  creating build\temp.win32-3.7
  creating build\temp.win32-3.7\Release
  creating build\temp.win32-3.7\Release\jnius
  C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x86\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD "-IC:\Program Files\Java\jdk-11.0.2\bin\include" "-IC:\Program Files\Java\jdk-11.0.2\bin\include\win32" -Ic:\python37\include -Ic:\python37\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\cppwinrt" /Tcjnius\jnius.c /Fobuild\temp.win32-3.7\Release\jnius\jnius.obj
  jnius.c
  jnius\jnius.c(593): fatal error C1083: Datei (Include) kann nicht ge”ffnet werden: "jni.h": No such file or directory
  error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX86\\x86\\cl.exe' failed with exit status 2

  ----------------------------------------
  Failed building wheel for pyjnius
  Running setup.py clean for pyjnius
Failed to build pyjnius
Installing collected packages: pyjnius
  Running setup.py install for pyjnius ... error
    Complete output from command c:\python37\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\MUPFSP~1\\AppData\\Local\\Temp\\pip-install-6x0l7_5g\\pyjnius\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\MUPFSP~1\AppData\Local\Temp\pip-record-438q2p2q\install-record.txt --single-version-externally-managed --compile:
    WARNING: Not able to assign machine() = AMD64 to a cpu value!
             Using cpu = 'i386' instead!
    JDK_HOME: C:\Program Files\Java\jdk-11.0.2\bin

    JRE_HOME: None

    warning: [options] bootstrap class path not set in conjunction with -source 6
    warning: [options] source value 6 is obsolete and will be removed in a future release
    warning: [options] target value 1.6 is obsolete and will be removed in a future release
    warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
    4 warnings
    running install
    running build
    running build_py
    creating build
    creating build\lib.win32-3.7
    copying jnius_config.py -> build\lib.win32-3.7
    creating build\lib.win32-3.7\jnius
    copying jnius\reflect.py -> build\lib.win32-3.7\jnius
    copying jnius\signatures.py -> build\lib.win32-3.7\jnius
    copying jnius\__init__.py -> build\lib.win32-3.7\jnius
    creating build\lib.win32-3.7\jnius\src
    creating build\lib.win32-3.7\jnius\src\org
    creating build\lib.win32-3.7\jnius\src\org\jnius
    copying jnius\src\org\jnius\NativeInvocationHandler.class -> build\lib.win32-3.7\jnius\src\org\jnius
    copying jnius\src\org\jnius\NativeInvocationHandler.java -> build\lib.win32-3.7\jnius\src\org\jnius
    running build_ext
    skipping 'jnius\jnius.c' Cython extension (up-to-date)
    building 'jnius' extension
    creating build\temp.win32-3.7
    creating build\temp.win32-3.7\Release
    creating build\temp.win32-3.7\Release\jnius
    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x86\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD "-IC:\Program Files\Java\jdk-11.0.2\bin\include" "-IC:\Program Files\Java\jdk-11.0.2\bin\include\win32" -Ic:\python37\include -Ic:\python37\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\cppwinrt" /Tcjnius\jnius.c /Fobuild\temp.win32-3.7\Release\jnius\jnius.obj
    jnius.c
    jnius\jnius.c(593): fatal error C1083: Datei (Include) kann nicht ge”ffnet werden: "jni.h": No such file or directory
    error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX86\\x86\\cl.exe' failed with exit status 2

    ----------------------------------------
Command "c:\python37\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\MUPFSP~1\\AppData\\Local\\Temp\\pip-install-6x0l7_5g\\pyjnius\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\MUPFSP~1\AppData\Local\Temp\pip-record-438q2p2q\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\Users\MUPFSP~1\AppData\Local\Temp\pip-install-6x0l7_5g\pyjnius\
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Kenne mich mit Python-auf-Android nicht aus, aber dein Android hat garantiert kein x86er CPU. Kann es sein, dass du das fuer das normale System und dein Python da installierst? Das geht dann wohl in die Hose.

Aber wie gesagt, da kenne ich mich nicht aus. Ich benutze iOS.
Tholo
User
Beiträge: 177
Registriert: Sonntag 7. Januar 2018, 20:36

@ Deets
Das Überascht mich jetzt :P
Ich hätte vermutet du bist der Root-Android-Kali-Linux-Lineageos Smartphone User schlechthin und kein schnödes "Apfel aus der Box"
:lol:

@MS

Schau dir mal diese Gruppe an
https://groups.google.com/forum/embed/# ... kivy-users da sind viele Infos und Probleme bereits beschrieben. Vielleicht findest du da etwas.
AUßER dein Fehler! Ich würde vermuten du nutzt eine IDE auf Windows und so wie es eben aussieht wird dieser Code auch auf Win ausgeführ und nicht auf dem Handy. Interpreter richtig gesetzt?
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

Am Handy bekomme ich diesen fehler wenn ich versuchenwill pyjnius zu installieren:
Bild
Tholo
User
Beiträge: 177
Registriert: Sonntag 7. Januar 2018, 20:36

Laut Doku funktioniert der Install auf Android auch nicht mit Pip
https://pyjnius.readthedocs.io/en/stabl ... or-android
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

Ja um dann die App auf Android zu verwenden musst ich mit buildozer eine apk erstellen. Aber damit die Sachen von pyjnius in die Apk kommen muss ich es erst auf dem Computer installieren und da kommt eben der Fehler:

Code: Alles auswählen

Collecting pyjnius
  Using cached https://files.pythonhosted.org/packages/b6/57/c90acf31322e6417f06c90410dbfcb149633a6006b7efbf99dfebe177c1f/pyjnius-1.2.0.tar.gz
Requirement already satisfied: six>=1.7.0 in c:\users\mupfspace\appdata\roaming\python\python37\site-packages (from pyjnius) (1.12.0)
Requirement already satisfied: cython in c:\python37\lib\site-packages (from pyjnius) (0.29.6)
Building wheels for collected packages: pyjnius
  Building wheel for pyjnius (setup.py) ... error
  Complete output from command c:\python37\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\MUPFSP~1\\AppData\\Local\\Temp\\pip-install-6x0l7_5g\\pyjnius\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d C:\Users\MUPFSP~1\AppData\Local\Temp\pip-wheel-p37h30j9 --python-tag cp37:
  WARNING: Not able to assign machine() = AMD64 to a cpu value!
           Using cpu = 'i386' instead!
  JDK_HOME: C:\Program Files\Java\jdk-11.0.2\bin

  JRE_HOME: None

  warning: [options] bootstrap class path not set in conjunction with -source 6
  warning: [options] source value 6 is obsolete and will be removed in a future release
  warning: [options] target value 1.6 is obsolete and will be removed in a future release
  warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
  4 warnings
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build\lib.win32-3.7
  copying jnius_config.py -> build\lib.win32-3.7
  creating build\lib.win32-3.7\jnius
  copying jnius\reflect.py -> build\lib.win32-3.7\jnius
  copying jnius\signatures.py -> build\lib.win32-3.7\jnius
  copying jnius\__init__.py -> build\lib.win32-3.7\jnius
  creating build\lib.win32-3.7\jnius\src
  creating build\lib.win32-3.7\jnius\src\org
  creating build\lib.win32-3.7\jnius\src\org\jnius
  copying jnius\src\org\jnius\NativeInvocationHandler.class -> build\lib.win32-3.7\jnius\src\org\jnius
  copying jnius\src\org\jnius\NativeInvocationHandler.java -> build\lib.win32-3.7\jnius\src\org\jnius
  running build_ext
  cythoning jnius\jnius.pyx to jnius\jnius.c
  c:\python37\lib\site-packages\Cython\Compiler\Main.py:367: FutureWarning: Cython directive 'language_level' not set, using 2 for now (Py2). This will change in a later release! File: C:\Users\MUPFSP~1\AppData\Local\Temp\pip-install-6x0l7_5g\pyjnius\jnius\jnius.pyx
    tree = Parsing.p_module(s, pxd, full_module_name)
  building 'jnius' extension
  creating build\temp.win32-3.7
  creating build\temp.win32-3.7\Release
  creating build\temp.win32-3.7\Release\jnius
  C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x86\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD "-IC:\Program Files\Java\jdk-11.0.2\bin\include" "-IC:\Program Files\Java\jdk-11.0.2\bin\include\win32" -Ic:\python37\include -Ic:\python37\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\cppwinrt" /Tcjnius\jnius.c /Fobuild\temp.win32-3.7\Release\jnius\jnius.obj
  jnius.c
  jnius\jnius.c(593): fatal error C1083: Datei (Include) kann nicht ge”ffnet werden: "jni.h": No such file or directory
  error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX86\\x86\\cl.exe' failed with exit status 2

  ----------------------------------------
  Failed building wheel for pyjnius
  Running setup.py clean for pyjnius
Failed to build pyjnius
Installing collected packages: pyjnius
  Running setup.py install for pyjnius ... error
    Complete output from command c:\python37\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\MUPFSP~1\\AppData\\Local\\Temp\\pip-install-6x0l7_5g\\pyjnius\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\MUPFSP~1\AppData\Local\Temp\pip-record-438q2p2q\install-record.txt --single-version-externally-managed --compile:
    WARNING: Not able to assign machine() = AMD64 to a cpu value!
             Using cpu = 'i386' instead!
    JDK_HOME: C:\Program Files\Java\jdk-11.0.2\bin

    JRE_HOME: None

    warning: [options] bootstrap class path not set in conjunction with -source 6
    warning: [options] source value 6 is obsolete and will be removed in a future release
    warning: [options] target value 1.6 is obsolete and will be removed in a future release
    warning: [options] To suppress warnings about obsolete options, use -Xlint:-options.
    4 warnings
    running install
    running build
    running build_py
    creating build
    creating build\lib.win32-3.7
    copying jnius_config.py -> build\lib.win32-3.7
    creating build\lib.win32-3.7\jnius
    copying jnius\reflect.py -> build\lib.win32-3.7\jnius
    copying jnius\signatures.py -> build\lib.win32-3.7\jnius
    copying jnius\__init__.py -> build\lib.win32-3.7\jnius
    creating build\lib.win32-3.7\jnius\src
    creating build\lib.win32-3.7\jnius\src\org
    creating build\lib.win32-3.7\jnius\src\org\jnius
    copying jnius\src\org\jnius\NativeInvocationHandler.class -> build\lib.win32-3.7\jnius\src\org\jnius
    copying jnius\src\org\jnius\NativeInvocationHandler.java -> build\lib.win32-3.7\jnius\src\org\jnius
    running build_ext
    skipping 'jnius\jnius.c' Cython extension (up-to-date)
    building 'jnius' extension
    creating build\temp.win32-3.7
    creating build\temp.win32-3.7\Release
    creating build\temp.win32-3.7\Release\jnius
    C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\HostX86\x86\cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD "-IC:\Program Files\Java\jdk-11.0.2\bin\include" "-IC:\Program Files\Java\jdk-11.0.2\bin\include\win32" -Ic:\python37\include -Ic:\python37\include "-IC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\ATLMFC\include" "-IC:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\ucrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\shared" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\um" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\winrt" "-IC:\Program Files (x86)\Windows Kits\10\include\10.0.17763.0\cppwinrt" /Tcjnius\jnius.c /Fobuild\temp.win32-3.7\Release\jnius\jnius.obj
    jnius.c
    jnius\jnius.c(593): fatal error C1083: Datei (Include) kann nicht ge”ffnet werden: "jni.h": No such file or directory
    error: command 'C:\\Program Files (x86)\\Microsoft Visual Studio\\2017\\Community\\VC\\Tools\\MSVC\\14.16.27023\\bin\\HostX86\\x86\\cl.exe' failed with exit status 2

    ----------------------------------------
Command "c:\python37\python.exe -u -c "import setuptools, tokenize;__file__='C:\\Users\\MUPFSP~1\\AppData\\Local\\Temp\\pip-install-6x0l7_5g\\pyjnius\\setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" install --record C:\Users\MUPFSP~1\AppData\Local\Temp\pip-record-438q2p2q\install-record.txt --single-version-externally-managed --compile" failed with error code 1 in C:\Users\MUPFSP~1\AppData\Local\Temp\pip-install-6x0l7_5g\pyjnius\
Tholo
User
Beiträge: 177
Registriert: Sonntag 7. Januar 2018, 20:36

Auf dem Screenshot hast du versucht pyjnius via pip zu installieren.
Von dem Javakram hab ich noch weniger Ahnung als mit Python. Aber Google sagt was mit "path"
https://stackoverflow.com/questions/111 ... er-windows

Hast du den gemäß der pyjnius Doku die Pfade gesetzt?
https://pyjnius.readthedocs.io/en/stabl ... or-windows

Cave! Reine Mutmaßung! Ich hab kein Plan davon
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

Ja ich habe die beiden Pfade PATH und JAVA_HOME gesetzt aber der Fatal error von dem Stackoverflow link ist fast(halt bis auf die sprache) der gleiche wie der bei pip.

Ich probiere das mal schnell aus.
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

Hat leider nicht geklappt
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

Hallo
Ich mache die Benachrichtigung jezt einfach mit plyer, ich kann ja das mit pyjnius später noch ergänzen.

Ich habe aber gerade ein ganz anderes Problem: wenn man die app aktualisieren will gibt es einen ladebalken. Aber wenn man auf Start drückt dann aktualiesiert er sich nicht sondern wartet bis der Download fertig ist und steht dann auf 100%.

Hier nur ein kleines Beispiel Programm:

Code: Alles auswählen

from kivy.app import App
from kivy.lang import Builder
import urllib.request

g=Builder.load_string("""
BoxLayout:
	Button:
		on_press: app.dw()
	Label:
		id: lb
		text:"...%"
	ProgressBar:
		id: pb
		max: 100
		
		
		

""")



class myApp(App):
	def __init__(self):
		super().__init__()
	def build(self):
		return g
	def dw(self):
		urllib.request.urlretrieve("https://www.python.org/ftp/python/3.7.3/python-3.7.3-embed-amd64.zip","py.zip", self)
	def __call__(self, bn,bs,cl):
		percent=int((bn*bs)/cl*100)
		self.root.ids.lb.text=str(percent)+"%"
		self.root.ids.pb.value=percent
		
myApp().run()


Weder der ladebalken noch das Label aktualiesiert sich.

Was kann ich Dagegen tun?
Sirius3
User
Beiträge: 17741
Registriert: Sonntag 21. Oktober 2012, 17:20

Als erstes könntest Du ordentliche Variablennamen vergeben. Auch zweibuchstabige Namen sind nicht aussagekräftig. Ich habe große Probleme den Code zu verstehen, was wie sich den nun bm von bs oder lb von pb unterscheidet. Eingerückt wird immer mit 4 Leerzeichen pro Ebene, nicht Tabs, denn sonst kann es je Editoreinstellung zu unleserlichem Code kommen. Ein __init__ das nichts macht, als das super-__init__ aufzurufen, kann ganz weg.

Ich denke, wie bei jeder GUI muß man die Ausführung an die Hauptschleife zurückgeben, um eine Aktualisierung zu haben. Das tut aber urlretrieve nicht.
Was Du brauchst ist einen Hintergrundthread für den Download, eine Queue, die den Zustand an die GUI weitergibt, und einen Timer innerhalb der GUI, der die Aktualisierung vornimmt.
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@MupfSpace: Das darf halt nicht blockieren. Rückruffunktionen bei GUIs dürfen immer nur ganz kurz etwas machen, denn solange sie laufen ist die GUI blockiert. Du könntest das in einen Thread auslagern. Dann wirst Du aber sehr wahrscheinlich nicht einfach einen Callback verwenden können um die Werte in der GUI zu ändern, denn das darf man nur aus dem Thread heraus machen in dem die GUI läuft. Da musst Du dann schauen wie man so etwas in Kivy löst.

Anmerkungen zum Code: Die Namenskonventionen haben sich immer noch nicht geändert – `myApp` sollte mindestens `MyApp` heissen. Auch was Einrückung und Leerzeichensetzung hat sich nichts geändert.

Eine Methode die einfach nur die gleiche Methode auf der Basisklasse mit den gleichen Argumenten aufruft ist überflüssig. Weg mit `__init__()`.

Warum ein Objekt das eine Anwendung repräsentiert aufrufbar sein sollte, und dieser Aufruf dann ausgerechnet einen Ladebalken aktualisiert, ist so gar nicht offensichtlich. Da würde man wirklich besser eine Methode mit einem aussagekräftigen Namen für verwenden. Apropos aussagekräftige Namen: `bn`, `bs`, `cl`, `lb`, `pb` sind das sicher nicht.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

Also warum bringt im __init__: super().__init__() nichts allein durch diese Teile wurde der ids Fehler behoben.

Ich habe den Code jezt noch mal besser gemacht:

Code: Alles auswählen


from kivy.app import App
from kivy.lang import Builder
import urllib.request

g=Builder.load_string("""
BoxLayout:
    Button:
        on_press: app.start_download()
    Label:
        id: info_label
        text:"...%"
    ProgressBar:
        id: progress_bar
        max: 100
        
        
        

""")



class MyApp(App):
    def download(self, block_num, block_size, content_length):
        percent=int((block_num*block_size)/content_length*100)
        self.root.ids.info_label.text=str(percent)+"%"
        self.root.ids.progress_bar.value=percent
    def build(self):
        return g
    def start_download(self):
        urllib.request.urlretrieve("https://www.python.org/ftp/python/3.7.3/python-3.7.3-embed-amd64.zip","py.zip", self.download)


        
MyApp().run()
Okay. Wie genau behebe ich jezt den Fehler mit dem lade Balken.

Ich habe schon verschiedenes versucht und es hat nicht funktioniert. Im Internet habe ich auch nichts gefunden.
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Du suchst den `kivy.clock.mainthread`-Dekorator mit dem man die Ausführung der Rückruffunktion in den Hauptthread verlegen kann.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

so passiert genau das gleiche wie vorher trotz kivy.clock.mainthread:

Code: Alles auswählen

from kivy.app import App
from kivy.lang import Builder
from kivy.clock import mainthread
import urllib.request

g=Builder.load_string("""
BoxLayout:
    orientation:"vertical"
    BoxLayout:
        Label:
            text:"..%"
            id: info_label
        ProgressBar:
            id: progress_bar
            max: 100
    Button:
        on_press: app.start()



""")

class MyApp(App):
    def build(self):
        return g
    def start(self):
        urllib.request.urlretrieve("https://www.python.org/ftp/python/3.7.3/python-3.7.3.exe","download.iregndwas", self.download)
    @mainthread
    def download(self, block_num,block_size,content_length):
        percent=int((block_num*block_size)/content_length*100)
        self.root.ids.info_label.text=str(percent)
        self.root.ids.progress_bar.value=percent
        print(percent)

MyApp().run()
        

in der Dokumentation habe ich gelesen das ich mit UrlRequest arbeiten soll, aber da steht nur was von on_succes aber der Ladebanken soll ja nicht wenn es geklappt hat aktualisiert werden sondern während des Downloads.

welcher Fehler befindet sich in meinem Code?
Benutzeravatar
__blackjack__
User
Beiträge: 13080
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@MupfSpace: Der Fehler ist immer noch das `urlretrieve()` alles blockiert bis der Download komplett ist. Der Callback ist jetzt thread-sicher, nun müsstest Du halt noch einen Thread für das herunterladen starten.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
MupfSpace
User
Beiträge: 169
Registriert: Montag 25. Dezember 2017, 20:26

Mit threading?
Ich dachte man soll keinen Thread in gui Anwendungen erstellen?
Oder doch?
__deets__
User
Beiträge: 14529
Registriert: Mittwoch 14. Oktober 2015, 14:29

Jein. Du darfst aus dem Thread keine GUI Objekte manipulieren. Aber ein Thread kann seine Ergebnisse (wie zb den Fortschritt) eben an den mainthread kommunizieren. Kivy kennt dafür wohl diesen decorator, so das du die Methode auch aus einem anderen Thread aufrufen kannst.
Antworten