2017-07-17 38 views
0

私は今この壁に対してほぼ一日走っています。私はすべてを試したような気がします。まずはここで私が望むものと私が目にするものがあります。私が今持っているものKivyラベルの左揃えとサイジング

この:画像で

enter image description here

enter image description here

私が欲しいものはこれです 'CurrentHistory:\ nHeader:' 単一ラベルです。私はそれを左に整列させることができますが、私はそれが上下に大量のパディングを持って取得することはできません。私はラベルが四角形で、テキストのまわりに四角形がないのが好きです。私は約2日間Kivy'ingされているので、もし私が何か超基本的なものを逃した場合、私を許してください。私は完全に機能するデモで更新

EDIT

。奇妙なことは、.kv製のラベルは、私がやりたいことを正確に行いますが、Python経由で生成されたLabelはそうではありません。

SegmentLayoutが.kvファイルで定義されているのGridLayoutと同じです:(

全体的なレイアウトはこれです:私が見つけ.kv

#:kivy 1.8.0 

<MainWidget> 
    BoxLayout 
     size: root.size 

     ScrollView 
      id: scrlv 
      size_hint: .75, 1 

      GridLayout 
       cols: 1 
       size_hint: 1, None 
       height: max(self.minimum_height, scrlv.height) 

       canvas: 
        Color: 
         rgba: 150/255, 150/255, 150/255, 1 
        Rectangle: 
         pos: self.pos 
         size: self.size 

       SegmentLayout 

       GridLayout 
        cols: 1 
        size_hint: 1,None 
        height: self.minimum_height 

        Label 
         text: '[b]CurrentHistory:[/b]\nHeader:' 
         size_hint: (None, None) 
         halign: 'left' 
         markup: True 
         size: self.texture_size 

        TextInput 
         size_hint: (1,None) 
         height: self.minimum_height 
         text: 'Enter Text Here' 

     BoxLayout 
      orientation: "vertical" 
      size_hint: .25, 1 

      canvas: 
       Color: 
        rgba: 240/255, 180/255, 80/255, 1 
       Rectangle: 
        pos: self.pos 
        size: self.size 

      Label 
       text: "Label 1" 
      Label 
       text: "Label 2" 

Pythonのドライバのデモ

import kivy 

kivy.require('1.8.0') # replace with your current kivy version ! 

from kivy.app import App 
from kivy.uix.widget import Widget 
from kivy.factory import Factory 

from kivy.uix.label import Label 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.textinput import TextInput 

class SegmentLayout(GridLayout): 

    def __init__(self, **kwargs): 
     super(SegmentLayout, self).__init__(cols=1, size_hint=(1,None), **kwargs) 
     self.bind(minimum_height=self.setter('height')) 

     label_text = '[b]CurrentHistory:[/b]\nHeader:' 

     label = Label(text=label_text, halign='left', size_hint=(None,None), markup=True) 
     label.bind(size=label.setter('texture_size'))  
     self.add_widget(label) 

     text_input = TextInput(text='Enter Text Here', size_hint=(1,None)) 
     text_input.bind(minimum_height=text_input.setter('height')) 
     self.add_widget(text_input) 

class MainWidget(Widget): 
    pass 

class MyApp(App): 

    def build(self): 
     return MainWidget() 

Factory.register('SegmentLayout', cls=SegmentLayout) 

if __name__ == '__main__': 
    MyApp().run() 
+0

私は完全に機能するデモを追加した、奇妙なことは、ということです単純な.kvファイルの中で私が望むものを作るとき、それは期待どおりに動作します。 .kvファイルは、私が起こると予想されることをします。 – Hangman4358

答えて

0

以下のリンクhttps://kivy.org/docs/api-kivy.uix.label.html#kivy.uix.label.Label.halignは、halignプロパティの使用を警告しています。私の解決策は、以下のとおりです。

  BoxLayout: 
       size_hint_y: None 
       height: sized_label.height 
       Label: 
        id: sized_label 
        text: "[b]CurrentHistory:[/b]\\nHeader:" 
        size_hint: (None, None) 
        markup: True 
        size: self.texture_size 
       Label: 

私はあなたのテキストをBoxLayoutに配置しています。サイズの高さをテキスト付きのラベルのサイズに設定しました。テキスト付きのラベルは、そのテキストのサイズになるようにサイズが設定されます。テキスト付きのラベルはBoxLayoutと同じ幅ではないので、空のスペースを埋めるために別のラベルを使用します。

ここにあなたの更新コードがあります。私はそれをすべて.pyファイルに入れました。あなたがコメントで苦労していたからです。二重でも必要でもないので、私が消したコードもたくさんありました。私は今、あなたがそれを続けていくことがより簡単になることを願っています。 TextInputのtext_hintのようなものも使用しました。あなたはそれらの変更を元に戻すことは容易であることをしたくない場合は...ここで

は私の更新されたコードです:

from kivy.app import App 
from kivy.uix.widget import Widget 
from kivy.factory import Factory 

from kivy.uix.label import Label 
from kivy.uix.gridlayout import GridLayout 
from kivy.uix.textinput import TextInput 

from kivy.base import Builder 

kv_string = Builder.load_string(""" 
BoxLayout: 
    BoxLayout: 
     canvas: 
      Color: 
       rgba: 150/255, 150/255, 150/255, 1 
      Rectangle: 
       pos: self.pos 
       size: self.size 

     ScrollView: 
      id: scrlv 

      GridLayout: 
       cols: 1 
       size_hint_y: None 
       height: max(self.minimum_height, scrlv.height) 

       BoxLayout: 
        size_hint_y: None 
        height: sized_label.height 
        Label: 
         id: sized_label 
         text: "[b]CurrentHistory:[/b]\\nHeader:" 
         size_hint: (None, None) 
         markup: True 
         size: self.texture_size 
        Label: 

       TextInput: 
        size_hint_y: None 
        height: 80 
        hint_text: 'Enter Text Here' 
       Label: 

    BoxLayout: 
     orientation: "vertical" 
     size_hint_x: .25 

     canvas: 
      Color: 
       rgba: 240/255, 180/255, 80/255, 1 
      Rectangle: 
       pos: self.pos 
       size: self.size 

     Label: 
      text: "Label 1" 
     Label: 
      text: "Label 2" 
""") 



class MyApp(App): 

    def build(self): 
     return kv_string 



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

enter image description here

+0

問題はそれほどではないので、私が望むようにラベルを手に入れることはできませんが、kvファイルでやっていることは、Pythonでやっている間に望む結果が得られます。私のデモファイルでは、SegmentLayoutはkvファイルで定義されているグリッドレイアウトの姉妹と同じです。唯一の違いは、SegmentLayoutがPythonとKVファイルで定義されていることです。 – Hangman4358

+0

私が投稿したkvファイルにSegmentLayoutを追加します。私が質問を編集したとき、私は文字通り私のpythonファイルと私のkvファイルを元の投稿にコピーしました。どこに「:」がないのですか?私が提供したデモでは、セグメントレイアウトが全く同じkv定義構造とは異なる動作をしていることが示されています。なぜ私が混乱しているのですか – Hangman4358