2015-01-01 94 views
1

這是我從軟件附帶的KIVY示例目錄中複製的代碼,我試圖修改它,並添加其他小部件。將按鈕添加到KIVY上的ActionBar應用程序。 Python

.KV文件

#:kivy 1.0 

<ActionBar>: 
    height: '48dp' 
    size_hint_y: None 
    spacing: '4dp' 
    canvas: 
     Color: 
      rgba: self.background_color 
     BorderImage: 
      border: root.border 
      pos: self.pos 
      size: self.size 
      source: self.background_image 

<ActionView>: 
    orientation: 'horizontal' 
    canvas: 
     Color: 
      rgba: self.background_color 
     BorderImage: 
      pos: self.pos 
      size: self.size 
      source: self.background_image 

<ActionSeparator>: 
    size_hint_x: None 
    minimum_width: '2sp' 
    width: self.minimum_width 
    canvas: 
     Rectangle: 
      pos: self.x, self.y + sp(4) 
      size: self.width, self.height - sp(8) 
      source: self.background_image 

<ActionButton,ActionToggleButton>: 
    background_normal: 'atlas://data/images/defaulttheme/' + ('action_bar' if self.inside_group else 'action_item') 
    background_down: 'atlas://data/images/defaulttheme/action_item_down' 
    size_hint_x: None if not root.inside_group else 1 
    width: [dp(48) if (root.icon and not root.inside_group) else max(dp(48), (self.texture_size[0] + dp(32))), self.size_hint_x][0] 
    color: self.color[:3] + [0 if (root.icon and not root.inside_group) else 1] 

    Image: 
     opacity: 1 if (root.icon and not root.inside_group) else 0 
     source: root.icon 
     mipmap: root.mipmap 
     pos: root.x + dp(4), root.y + dp(4) 
     size: root.width - dp(8), root.height - sp(8) 

<ActionGroup>: 
    size_hint_x: None 
    width: self.texture_size[0] + dp(32) 

<ActionCheck>: 
    background_normal: 'atlas://data/images/defaulttheme/action_bar' if self.inside_group else 'atlas://data/images/defaulttheme/action_item' 

<ActionPrevious>: 
    size_hint_x: 1 
    minimum_width: '100sp' 
    important: True 
    BoxLayout: 
     orientation: 'horizontal' 
     pos: root.pos 
     size: root.size 
     Image: 
      source: root.previous_image 
      opacity: 1 if root.with_previous else 0 
      allow_stretch: True 
      size_hint_x: None 
      width: self.texture_size[0] if root.with_previous else dp(8) 
      mipmap: root.mipmap 
     Image: 
      source: root.app_icon 
      allow_stretch: True 
      size_hint_x: None 
      width: min(self.height, self.texture_size[0]) if self.texture else self.height 
      mipmap: root.mipmap 
     Widget: 
      size_hint_x: None 
      width: '5sp' 
     Label: 
      text: root.title 
      text_size: self.size 
      color: root.color 
      shorten: True 
      halign: 'left' 
      valign: 'middle' 

<ActionGroup>: 
    background_normal: 'atlas://data/images/defaulttheme/action_group' 
    background_down: 'atlas://data/images/defaulttheme/action_group_down' 
    background_disabled_normal: 'atlas://data/images/defaulttheme/action_group_disabled' 
    border: 30, 30, 3, 3 
    ActionSeparator: 
     pos: root.pos 
     size: root.separator_width, root.height 
     opacity: 1 if root.use_separator else 0 
     background_image: root.separator_image if root.use_separator else 'action_view' 

<ActionOverflow>: 
    border: 3, 3, 3, 3 
    background_normal: 'atlas://data/images/defaulttheme/action_item' 
    background_down: 'atlas://data/images/defaulttheme/action_item_down' 
    background_disabled_normal: 'atlas://data/images/defaulttheme/button_disabled' 
    size_hint_x: None 
    minimum_width: '48sp' 
    width: self.texture_size[0] if self.texture else self.minimum_width 
    canvas.after: 
     Color: 
      rgb: 1, 1, 1 
     Rectangle: 
      pos: root.center_x - sp(16), root.center_y - sp(16) 
      size: sp(32), sp(32) 
      source: root.overflow_image 

<ActionDropDown>: 
    auto_width: False 

<ContextualActionView>: 

.py文件

from kivy.base import runTouchApp 
from kivy.lang import Builder 

runTouchApp(Builder.load_string(''' 
ActionBar: 
    pos_hint: {'top':1} 
    ActionView: 
     use_separator: True 
     ActionPrevious: 
      title: 'Action Bar' 
      with_previous: False 
     ActionOverflow: 
     ActionButton: 
      text: 'Btn0' 
      icon: 'atlas://data/images/defaulttheme/audio-volume-high' 
     ActionButton: 
      text: 'Btn1' 
     ActionButton: 
      text: 'Btn2' 
     ActionButton: 
      text: 'Btn3' 
     ActionButton: 
      text: 'Btn4' 
     ActionGroup: 
      text: 'Group1' 
      ActionButton: 
       text: 'Btn5' 
      ActionButton: 
       text: 'Btn6' 
      ActionButton: 
       text: 'Btn7' 
''')) 

我試圖滾動視圖功能添加到這個應用程序,但我不斷收到錯誤消息。有人可以幫我添加一個按鈕作爲例子來幫助我完成這段代碼嗎?

+0

請發表您的錯誤信息,所以其他人可以幫助確定什麼是錯的。 – SSC

回答

2

你的問題是你不明白它是如何工作的。

僅當您創建kivy.app.App的子類並讓其名稱以「App」結尾時,纔會加載.kv文件。然後一個沒有「App」的同名的.kv文件被加載。您可以簡單地避免將Builder.load_string中的所有內容移至.kv文件並創建App的子類。

現在你可以把你的動作條和新按鈕水平的BoxLayout這樣的:

ActionBarTest.kv:

BoxLayout: 
    orientation: "horizontal" 
    ActionBar: 
     pos_hint: {'top':1} 
     ActionView: 
      use_separator: True 
      ... 
    Button: 
     #new Button 
     text: "Hello World" 

main.py

import kivy 
from kivy.app import App 

class ActionBarTestApp(App): 
    def build(self): 
     #self.root is already defined, because 
     #you set a root object in .kv file 
     return self.root 

app = ActionBarTestApp() 
app.run() 
+0

非常感謝!非常感謝這一點。我修改了你的指南 –

相關問題