2015-06-29 56 views
0

我目前正在學習如何使用Kivy製作桌面Python GUI。 我想在應用程序的頂部做一個簡單的菜單欄。這應該看起來像這樣: menu bar在Kivy(Python)中製作簡單的菜單欄

我試圖使用ActionBar如showcase所示。因此,這裏是我的代碼:

#!/usr/bin/env python3 
from kivy.app import App 

class MenuApp(App): 
    def button1(self): 
     print("Button 1 triggered") 

if __name__ == '__main__': 
    MenuApp().run() 

和文件menu.kv:

#:kivy 1.0.9 

BoxLayout: 
    orientation: "vertical" 

    ActionBar: 
     ActionView: 
      ActionButton: 
       text: "Button 1" 
       on_release: app.button1() 

    Button: 
     text: "Nothing" 
     background_color: 1, 1, 1, 0.6 
     background_normal: "" 

但我有以下錯誤:

[INFO ] [Logger  ] Record log in /home/matthieu/.kivy/logs/kivy_15-06-29_19.txt 
[INFO ] [Kivy  ] v1.9.0 
[INFO ] [Python  ] v3.4.0 (default, Jun 19 2015, 14:20:21) 
[GCC 4.8.2] 
[INFO ] [Factory  ] 173 symbols loaded 
[INFO ] [Image  ] Providers: img_tex, img_dds, img_gif, img_sdl2, img_pil (img_ffpyplayer ignored) 
[INFO ] [OSC   ] using <multiprocessing> for socket 
[INFO ] [Window  ] Provider: sdl2(['window_egl_rpi'] ignored) 
[INFO ] [GL   ] OpenGL version <b'3.0 Mesa 10.3.2'> 
[INFO ] [GL   ] OpenGL vendor <b'X.Org'> 
[INFO ] [GL   ] OpenGL renderer <b'Gallium 0.4 on AMD OLAND'> 
[INFO ] [GL   ] OpenGL parsed version: 3, 0 
[INFO ] [GL   ] Shading version <b'1.30'> 
[INFO ] [GL   ] Texture max size <16384> 
[INFO ] [GL   ] Texture max units <16> 
[INFO ] [Window  ] auto add sdl2 input provider 
[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... 
Traceback (most recent call last): 
    File "menuBar2/menuBar.py", line 14, in <module> 
    MenuApp().run() 
    File "/usr/lib/python3/dist-packages/kivy/app.py", line 824, in run 
    runTouchApp() 
    File "/usr/lib/python3/dist-packages/kivy/base.py", line 487, in runTouchApp 
    EventLoop.window.mainloop() 
    File "/usr/lib/python3/dist-packages/kivy/core/window/window_sdl2.py", line 539, in mainloop 
    self._mainloop() 
    File "/usr/lib/python3/dist-packages/kivy/core/window/window_sdl2.py", line 300, in _mainloop 
    EventLoop.idle() 
    File "/usr/lib/python3/dist-packages/kivy/base.py", line 327, in idle 
    Clock.tick() 
    File "/usr/lib/python3/dist-packages/kivy/clock.py", line 483, in tick 
    self._process_events() 
    File "/usr/lib/python3/dist-packages/kivy/clock.py", line 615, in _process_events 
    event.tick(self._last_tick, remove) 
    File "/usr/lib/python3/dist-packages/kivy/clock.py", line 374, in tick 
    ret = callback(self._dt) 
    File "/usr/lib/python3/dist-packages/kivy/uix/boxlayout.py", line 174, in do_layout 
    c.width = w 
    File "properties.pyx", line 397, in kivy.properties.Property.__set__ (kivy/properties.c:4543) 
    File "properties.pyx", line 429, in kivy.properties.Property.set (kivy/properties.c:5025) 
    File "properties.pyx", line 484, in kivy.properties.Property.dispatch (kivy/properties.c:5641) 
    File "_event.pyx", line 1168, in kivy._event.EventObservers.dispatch (kivy/_event.c:11690) 
    File "_event.pyx", line 1074, in kivy._event.EventObservers._dispatch (kivy/_event.c:11029) 
    File "/usr/lib/python3/dist-packages/kivy/uix/actionbar.py", line 568, in on_width 
    self._layout_all() 
    File "/usr/lib/python3/dist-packages/kivy/uix/actionbar.py", line 453, in _layout_all 
    super_add(self.action_previous) 
    File "/usr/lib/python3/dist-packages/kivy/uix/boxlayout.py", line 210, in add_widget 
    widget.bind(
AttributeError: 'NoneType' object has no attribute 'bind' 

是否有人知道我做錯了什麼?

回答

1

試試這個樣子,我覺得它應該工作

ActionBar: 
    ActionPrevious: 
    ActionView: 
     ActionButton: 
      text: "Button 1" 
      on_release: app.button1() 
+1

@Flns感謝,這使得它重新工作。 (但是在ActionView裏面有'ActionPrevious')。這是否意味着以前的按鈕是必要的?如果是的話,還有另一種簡單的做法吧?我開始使用按鈕和下拉菜單,但我現在正在努力處理下拉菜單。 –