2016-11-05 6 views
0

내 앱 (ScreenManager)에 2 Screens이 있습니다. 그 중 하나는 ActionBar이고 ActionOverflow입니다. 현재 Screen을 변경하고 ActionOverflow을 닫으려는 버튼이 있지만 Screen이 변경되고 ActionOverflow이 열린 채로 남아 있습니다. 다른 장소에서 화면을 탭합니다. 여기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 

?

답변

1

편집 :. 당신이 버전 1.9.1 (또는 그 이상 마스터 지점을 가지고로서, this 수정 <python dir>/Lib/site-packages/kivy/uix/actionbar.py에서 actionbar.py는 이전 버전에 대한 기본 동작을 제공합니다 변경없는 있었다


드롭 다운가 닫아야합니다. . 기본적으로 자신의 아마 위젯으로 ActionOverflow에 귀하의 예를 들어 코드 ActionButton 배치에 뭔가 잘못 또는 다른 어쩌면 뭔가가있다이을 시도해보십시오.

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, 솔루션하지 않았다 도와주세요. 첫 번째 : 매우 긴 문자열이 버튼에 맞지 않았습니다. 'minimum_width :'200sp '를 추가했습니다. 두 번째 : 버튼을 누르면 두 번째 화면으로 바뀌고 다시 돌아옵니다. 'ActionOverflow'가 열린 채로 남아 있습니다 – Fogapod

+0

버전 1.9.1 (또는 이전 버전의 master 브랜치)'액션 바에 [this] (https://github.com/kivy/kivy/commit/275cb51b2015685998cf87c2877239c270b20af2#diff-4b5fa03b170bae63a329314d2bab8866R263) .py "in /Lib/site-packages/kivy/uix/actionbar.py' – KeyWeeUsr

+1

예, PC에서 1.9.1, 타블렛에서 1.9.0 (qpy)이 픽스는 PC에서 도움이됩니다 – Fogapod

관련 문제