2016-11-05 5 views
0

У меня есть 2 Screens в моем приложении (ScreenManager). Один из них имеет ActionBar с ActionOverflow. У меня есть кнопка, которая должна изменить текущий Screen и закрыть ActionOverflow, но изменения Screen и ActionOverflow остается открытым до Я коснусь экрана в другом месте.Не удается закрыть ActionOverflow напрямую

Вот некоторые код:

# .kv 
ScreenManager: 
    id: ScrMan 
    Screen: 
     name: 'scr1' 
     BoxLayout: 
      orientation: 'vertical' 
      ActionBar: 
       ActionView: 
        ActionOverflow: 
         id: ActOv 
         #some buttons 
         ActionButton: 
          text: 'some text' 
          on_press: 
           ActOv.is_open = False 
           #I also tried: is_open = False; self.parent.is_open = False; with the same result 
           ScrMan.current = 'scr2' 

    Screen: 
     name: 'scr2' 
     #some cool stuff here 

Как я могу изменить экран и закрыть список ActionOverflow?

ответ

1

Edit: Как у вас версия 1.9.1 (или старший мастер филиала, был this исправление отсутствует Изменение actionbar.py в <python dir>/Lib/site-packages/kivy/uix/actionbar.py приносит поведение по умолчанию для старой версии


Раскрывающийся следует закрыть на.. . свой собственный по умолчанию Может быть, есть что-то неправильно в вашем коде, например, размещая ActionButton в ActionOverflow как виджет или может быть что-то другое Попробуйте это:.

from kivy.lang import Builder 
from kivy.base import runTouchApp 
from kivy.uix.boxlayout import BoxLayout 
Builder.load_string(''' 
#:import Clock kivy.clock.Clock 
#:import partial functools.partial 
<Test>: 
    ScreenManager: 
     id: ScrMan 
     Screen: 
      name: 'scr1' 
      ActionBar: 
       pos_hint: {'top': 1} 
       ActionView: 
        ActionPrevious: 
        ActionOverflow: 
        ActionButton: 
         text: 'some very very long text' 
        ActionButton: 
         text: 'some very very long text' 
        ActionButton: 
         text: 'some very very long text' 
        ActionButton: 
         text: 'some very very long text' 
        ActionButton: 
         text: 'some very very long text' 
        ActionButton: 
         text: 'try this button!' 
         on_press: 
          ScrMan.current = 'scr2' 
          Clock.schedule_once(partial(root.change_scr, ScrMan), 1) 
     Screen: 
      name: 'scr2' 
      Label: 
       text: 'second' 
''') 
class Test(BoxLayout): 
    def change_scr(self, man, *dt): 
     man.current = man.previous() 
runTouchApp(Test()) 
+0

Unfortunantely, ваше решение не helpend. Во-первых: ваши 'очень длинные строки' не вписывались в кнопки, Я исправил это добавление' minimum_width: '200sp'' Во-вторых: когда я нажимаю кнопку, экран меняется на второй и возвращается назад. 'ActionOverflow' остается открытым во время этого – Fogapod

+0

У вас есть версия 1.9.1 (или старшая главная ветвь. Положите [this] (https://github.com/kivy/kivy/commit/275cb51b2015685998cf87c2877239c270b20af2#diff-4b5fa03b170bae63a329314d2bab8866R263) исправить в своей панели действий .py' в '/Lib/site-packages/kivy/uix/actionbar.py' – KeyWeeUsr

+1

Да, у меня 1.9.1 на ПК и 1.9.0 на планшете (qpy) это исправление поможет мне на ПК – Fogapod

Смежные вопросы