2014-09-25 57 views
0

我是kivy的新用戶。從應用程序到.kv的Python kivy鏈接複選框

我需要鏈接.kv接口中的複選框,以便它對底層python應用程序有影響。

我想我的應用程序下面的代碼:

from kivy.app import App 
from kivy.uix.floatlayout import FloatLayout 
from kivy.factory import Factory 
from kivy.properties import ObjectProperty 
from kivy.uix.popup import Popup 
from kivy.uix.checkbox import CheckBox 

import os 

class LoadDialog(FloatLayout): 
    load = ObjectProperty(None) 
    cancel = ObjectProperty(None) 


class Root(FloatLayout): 
    loadfile = ObjectProperty(None) 
    checkbox = CheckBox() 

    def dismiss_popup(self): 
     self._popup.dismiss() 

    def show_load(self): 
     content = LoadDialog(load=self.load, cancel=self.dismiss_popup) 
     self._popup = Popup(title="Load file", content=content, size_hint=(0.9, 0.9)) 
     self._popup.open() 

    def load(self, path, filename): 
     print 'user chose: %s' % os.path.join(path, filename[0]) 
     print self.checkbox.active 

     self.dismiss_popup() 

    def activate_checkbox(self): 
     print 'activate checkbox' 
     self.checkbox._toggle_active() 


class Chooser(App): 
    pass 


Factory.register('Root', cls=Root) 
Factory.register('LoadDialog', cls=LoadDialog) 

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

具有以下chooser.kv文件:

#:kivy 1.1.0 

Root: 

    BoxLayout: 
     orientation: 'vertical' 
     BoxLayout: 
      size_hint_y: 90 
      height: 30 
      Button: 
       text: 'Load' 
       on_release: root.show_load() 
     BoxLayout: 
      size_hint_y: 90 
      height: 30 
      CheckBox: 
       center: self.parent.center 
       on_active: root.activate_checkbox 
      Label: 
       font_size: 20 
       center_x: self.parent.width/4 
       top: self.parent.top - 50 
       text: 'Faster' 


<LoadDialog>: 
    BoxLayout: 
     size: root.size 
     pos: root.pos 
     orientation: "vertical" 
     FileChooserListView: 
      id: filechooser 

     BoxLayout: 
      size_hint_y: None 
      height: 30 
      Button: 
       text: "Cancel" 
       on_release: root.cancel() 

      Button: 
       text: "Load" 
       on_release: root.load(filechooser.path, filechooser.selection) 

遺憾的是沒有用的:它似乎複選框用戶界面的狀態元素對根類中複選框的狀態沒有任何影響。

有沒有簡單的方法來鏈接兩個?

回答

1
on_active: root.activate_checkbox 

這什麼都不做,你想要root.activate_checkbox()