eben bin ich neu zu euch gestoßen und bin gespannt dieses Forum kennenzulernen.
Kurz zu mir: Ich möchte mit Python und Kivy meinen Horizont erweitern und eine einfache grafische Anwendung schreiben. Beides kenne ich bisher noch nicht und versuche es seit einem guten Monat mit Tutorials zu erlernen. Generell kann ich aber programmieren, hauptsächlich (weil beruflich) in C. Objektorientierte Programmierung verstehe ich zumindest grundlegend und habe es bereits mit Java angewendet.
Meine ersten Versuche mit Python und Kivy machen Spaß und die Oberflächen mit Wechselscreens usw. funktionieren (ScreenManager, …). Ich bin motiviert, schnell weiterzukommen.
Nun bemerke ich aber, dass Kivy einige Methoden der Objekte aus den Bibliotheken nicht zu kennen scheint und frage mich, ob die Installation irgendwie fehlerhaft ist. Im Internet verfügbare Beispiele kann ich bei mir darum nicht nachvollziehen.
Hier ein ausgedünntes Minimalbeispiel von mir:
main.py
Code: Alles auswählen
import kivy
from kivy.app import App
from kivy.clock import Clock
from kivy.uix.screenmanager import ScreenManager, Screen
kivy.require('1.11.1') # replace with your current kivy version !
class ScreenManagerMain(ScreenManager):
pass
class ScreenMenu(Screen):
pass
class ScreenIntro(Screen):
pass
'''
def __init__(self, **kwargs):
super(ScreenIntro, self).__init__(**kwargs)
def on_enter(self, *args):
print("on Enter")
Clock.schedule_once(self.change_screen_to_menu(), 3)
def change_screen_to_menu(self, *args):
print('to menu')
self.manager.current = 'screen_menu'
'''
class TestApp(App):
title = 'Test'
def build(self):
screen_mgr_main = ScreenManagerMain()
return screen_mgr_main
if __name__ == '__main__':
TestApp().run()
Code: Alles auswählen
#:kivy 1.11.1
#:import RiseInTransition kivy.uix.screenmanager.RiseInTransition
<ScreenManagerMain>:
name: 'screen_manager_main'
transition: RiseInTransition()
ScreenIntro:
ScreenMenu:
<ScreenIntro>:
name: 'screen_intro'
Button:
text: 'B1'
size_hint: None,None
size: 100,100
pos: 0,0
on_press: root.manager.current = 'screen_menu'
<ScreenMenu>:
name: 'screen_menu'
Button:
text: 'B2'
size_hint: None,None
size: 100,100
pos: 300,0
on_press: root.manager.current = 'screen_intro'
Code: Alles auswählen
/home/ned/.virtualenvs/kivyinstall/bin/python /home/ned/Projekte/Carrera-Controller/Software/Entwicklung/main.py
[INFO ] [Logger ] Record log in /home/ned/.kivy/logs/kivy_19-08-23_2.txt
[INFO ] [Kivy ] v1.11.1
[INFO ] [Kivy ] Installed at "/home/ned/.virtualenvs/kivyinstall/lib/python3.7/site-packages/kivy/__init__.py"
[INFO ] [Python ] v3.7.3 (default, Nov 10 2011, 15:00:00)
[GCC 8.3.0]
[INFO ] [Python ] Interpreter at "/home/ned/.virtualenvs/kivyinstall/bin/python"
[INFO ] [Factory ] 184 symbols loaded
[INFO ] [ImageLoaderFFPy] Using ffpyplayer 4.2.0
[INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_ffpyplayer, img_gif (img_pil ignored)
[ERROR ] [Input ] MTDev is not supported by your version of linux
Traceback (most recent call last):
File "/home/ned/.virtualenvs/kivyinstall/lib/python3.7/site-packages/kivy/input/providers/__init__.py", line 41, in <module>
import kivy.input.providers.mtdev
File "/home/ned/.virtualenvs/kivyinstall/lib/python3.7/site-packages/kivy/input/providers/mtdev.py", line 84, in <module>
from kivy.lib.mtdev import Device, \
File "/home/ned/.virtualenvs/kivyinstall/lib/python3.7/site-packages/kivy/lib/mtdev.py", line 28, in <module>
libmtdev = cdll.LoadLibrary('libmtdev.so.1')
File "/usr/lib/python3.7/ctypes/__init__.py", line 434, in LoadLibrary
return self._dlltype(name)
File "/usr/lib/python3.7/ctypes/__init__.py", line 356, in __init__
self._handle = _dlopen(self._name, mode)
OSError: libmtdev.so.1: cannot open shared object file: No such file or directory
[INFO ] [Window ] Provider: sdl2(['window_egl_rpi'] ignored)
[INFO ] [Window ] Provider: x11(['window_egl_rpi', 'window_sdl2'] ignored)
FBConfig selected:
Doublebuffer: Yes
Red Bits: 8, Green Bits: 8, Blue Bits: 8, Alpha Bits: 8, Depth Bits: 24
[INFO ] [GL ] Using the "OpenGL" graphics system
[INFO ] [GL ] Backend used <gl>
[INFO ] [GL ] OpenGL version <b'3.1 Mesa 19.1.2'>
[INFO ] [GL ] OpenGL vendor <b'X.Org'>
[INFO ] [GL ] OpenGL renderer <b'AMD TURKS (DRM 2.50.0 / 4.15.0-58-generic, LLVM 7.0.1)'>
[INFO ] [GL ] OpenGL parsed version: 3, 1
[INFO ] [GL ] Shading version <b'1.40'>
[INFO ] [GL ] Texture max size <16384>
[INFO ] [GL ] Texture max units <16>
[INFO ] [Window ] virtual keyboard not allowed, single mode, not docked
[INFO ] [Text ] Provider: sdl2
[INFO ] [Base ] Start application main loop
[INFO ] [GL ] NPOT texture support is available
[INFO ] [Base ] Leaving application in progress...
Process finished with exit code 0
Code: Alles auswählen
try:
import kivy.input.providers.mtdev
except:
err = 'Input: MTDev is not supported by your version of linux'
Logger.exception(err)
Wenn ich den auskommentierten Code aus main.py einfüge (dafür 'pass' oberhalb entferne), sehe ich, dass die Methode schedule_once des Objekts Clock (Zeile 26) nicht existiert. Ebenso das Attribut current von self.manager.current (Zeile 30). Clock wird jedoch per Autovervollständigung angeboten, sowie auch self.manager. Die Anwendung läuft so natürlich nicht. Wie kann das sein, dass die Clock-Bibliothek eingebunden ist, die Klasse von Clock scheinbar bekannt ist, aber die Methoden fehlen?
Und noch meine Umgebung:
Linux Mint 18.3 64-bit, Linux Kernel 4.15.0-58-generic
PyCharm Community 2019.2
Python 3.7
Kivy 1.11.1
Im Screenshot noch die installierten Module.
Für jegliche Ideen dazu bin ich sehr dankbar!
Lieben Gruß,
Emanuel