2017-04-14 10 views
1

私は、情報を表示するゴルフ競技の詳細を含む 'sqlite'データベースを持つkivyプログラムを持っています&標準のポップアップ機能を介した警告メッセージ - pop_mess() テスト目的のためにfunction - set_test_db()で代替の 'testing'データベースを開きます。これが完了したら、ポップアップの背景色を変更して、メインデータベースが使用されていないことをユーザーに警告したいと思います。pythonでkivyポップアップウィジェットの背景を変更

私はこれをやろうとしました( 'set_test_db'の最後のコード)。しかし、ルーチンは現在の背景色を正しく取得しますが、それを変更することはありません。

誰かが解決策の方向で私を指摘できますか?コーディング方法は、ウィジェットのテキストプロパティを変更するために正常に動作します。 (同様の質問は通常、テキストプロパティを参照します)。私はリストの両方を使用して&タプルの色の値です。 .kyファイルで

main.pyで

<CustomPopup>: 
    popup_message: popup_message 
    size_hint: .98, .75 
    id: popup_id 
    title: "Casual and Ancient" 
    title_align: 'center' 
    title_color: 1,.5,.3,1 
    BoxLayout: 
     id: contentbox 
     orientation: 'vertical' 
     TextInput: 
      id: popup_message 
      color: .3,.4,1.0,1 
      background_color: [.7,1.0,.2,1] 
      text: "text message goes here" 
      font_size: 16 
      font_name: 'RobotoMono-Regular' 

….. 
CaaRoot: 
<CaaRoot>: 
    orientation: 'lr-tb' 
    padding: 10 
    etc 
    ... 

def pop_mess(self,message): 
     p_up=CustomPopup() 
     lab=p_up.ids['popup_message'] 
     lab.text=message 
     p_up.open() 

(自己= CaaRoot) ...

def set_test_db(self): 
     # on button in CaaRoot 
     # open test data base instead of real 
     if self.db != None: 
      print 'Cannot Open Test Data Base - already running' 
     else: 
    # open ‘test’ database 
    # set background colour of popup to warn user. 

     fn='/home/.... caatestdb.db 
     self.op_db(fn) 
     self.testing='TEST database' 

     p_up=CustomPopup() 
     lab=p_up.ids['popup_message'] 
     x=lab.background_color 

     new_col=[.9,.3,.3,1] 
     lab.background_color=new_col 

     self.pop_mess('color set to : '+str(new_col)+ ' was : '+str(x)) 

私はKivyの背景を変更する(同様の質問に出くわした私の問題の更なる調査にポップアップ表示さ

color set to : [0.9, 0.3, 0.3, 1] was : [0.7, 1.0, 0.2, 1]

(まだ[0.7、1.0、0.2、1]に設定された背景を持つ)

答えて

0

ポップアップ)

「継承された」キャンバス要素(?)のプロパティを含む「直感的ではない」という事実が私にはわかりました(覚えていますか?変更可能なプロパティ。

私が取得していた 'background_color'プロパティはCanvasから継承されたもので、簡単に変更できませんでした。

私は既存のウィジェットを変更するのではなく、使用するたびに 'ポップアップ'ウィジェットを作成することでこの問題を回避しました。私はまだ(単純に)ポップアップのbackground_colorを変更することはできませんが、親要素の背景色を変更して、ユーザーの目が即座に別のものを見るようにすることができます。私はまた、ポップアップメッセージ機能を呼び出すときにテキストの色を変更することができます。

def pop_mess(self,message,colour=(.9,.6,.9,1)): 
    # 
    # text color can ve overridden by the 'colour' parameter 
    # self.backc can be set as required to set the color behind the 
    # popup depending on circumstances 


popup=Popup(title='Casual & Ancient', \ 
     content=Label(text=message,color=colour,\ 
         font_name = 'RobotoMono-Regular'),\ 
       size_hint=(.98,.75),background_color=self.backc) 


    popup.open() 

私は分析が正しいことや、いくつかの副作用があるかもしれないことを完全にはよく分からないが、それは正常に動作しているようだ(と、コードに多少単純だった)

0

kivymdを見てくださいこのような問題を非常にうまく解決します。それは基本的にGoogle's Material Designに基づいてキビのための非常にエレガントなテンプレートです。 私にとっては、デザイナーではなくプログラマーであるため、一般的に色付けの仕方や外観がずっと簡単になります。

デモには、ポップアップを含む非常に完全な例があります。

+0

リンクありがとうございます。私は 'md'をクローンし、 'kitchen sink'デモを実行しようとしましたが、 'ImportError:No recycleview 'というモジュールと 'kivymd.menu.MDDropdownMenu'パッケージをインポートできませんでした。私がそれを必要とすることはありますが、kivyの特定の側面があります。 – Iain1940

+0

RecycleViewはKivyライブラリでは非常に新しいので、Kivy-Gardenからバージョンをダウンロードする必要があります。他にもすばらしいウィジェットがいくつかあります。他の可能性は、1.9.2-devを複製することです。 [link](https://kivy.org/docs/api-kivy.uix.recycleview.html)を見てください。recycleviewはバージョン1.10で追加されました – Fari