2016-11-05 18 views
0

私のアプリ(ScreenManager)に2 Screensがあります。そのうちの1つはActionBarActionOverflowです。現在の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(またはそれ以前のmasterブランチを持っているとして、thisがあった行方不明修正<python dir>/Lib/site-packages/kivy/uix/actionbar.pyactionbar.pyを変更すると、古いバージョンのデフォルトの動作をもたらします


ドロップダウンがで閉じる必要があります。 。デフォルトでは、独自のかもしれない例えばウィジェットまたは多分何か他のものとしてActionOverflowActionButtonを置くあなたのコードで間違った何かがあります、これを試してみてください:。

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''を追加しました。 2番目:ボタンを押すと2番目の画面に変わり戻ります。 'ActionOverflow'はこの間に開いたままです – Fogapod

+0

あなたはバージョン1.9.1(またはそれより古いマスターブランチ)を持っています。アクションバーに[this](https://github.com/kivy/kivy/commit/275cb51b2015685998cf87c2877239c270b20af2#diff-4b5fa03b170bae63a329314d2bab8866R263) .py "in /Lib/site-packages/kivy/uix/actionbar.py' – KeyWeeUsr

+1

はい、パソコンで1.9.1、タブレット(qpy)で1.9.0です。この修正はPCで手助けします – Fogapod

関連する問題