Bitte
Gebt mir wenigstens einen Tip...
Kivy AttributeError: 'NoneType' object has no attribute 'ids'
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.
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:
ich habe es verucht zu installieren aber bekomme immer diesen fehler
es könnte daran liegen dass "noti_builder" pyjnius verwendet:
Erste zeile von noti_builder:
Code: Alles auswählen
from jnius import autoclass, detach
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\
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.
Aber wie gesagt, da kenne ich mich nicht aus. Ich benutze iOS.
@ Deets
Das Überascht mich jetzt
Ich hätte vermutet du bist der Root-Android-Kali-Linux-Lineageos Smartphone User schlechthin und kein schnödes "Apfel aus der Box"
@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?
Das Überascht mich jetzt
Ich hätte vermutet du bist der Root-Android-Kali-Linux-Lineageos Smartphone User schlechthin und kein schnödes "Apfel aus der Box"
@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?
Laut Doku funktioniert der Install auf Android auch nicht mit Pip
https://pyjnius.readthedocs.io/en/stabl ... or-android
https://pyjnius.readthedocs.io/en/stabl ... or-android
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\
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
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
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:
Weder der ladebalken noch das Label aktualiesiert sich.
Was kann ich Dagegen tun?
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()
Was kann ich Dagegen tun?
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.
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.
- __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.
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
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:
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.
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()
Ich habe schon verschiedenes versucht und es hat nicht funktioniert. Im Internet habe ich auch nichts gefunden.
- __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
so passiert genau das gleiche wie vorher trotz kivy.clock.mainthread:
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?
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()
welcher Fehler befindet sich in meinem Code?
- __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
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.