2017-11-21 10 views
0

最後に私が出会った最後の日は非常に苛立ちが私のプログラムを振る舞います。 Mabyeは最初にスクリーンショットを表示し、エラーを説明し、finnalyはコードを示します。 enter image description herePython kivyはループで生成された最後のラベルのみを表示します

ご覧のとおり、コインはいくつかのサブボタンを含むボタンです。これらのウィジェットをループで生成し、レイヤーに動的に追加します。 しかし、それは最後の反復でのみ正しく動作します。 コードを見てください。ここで コード「コインボタンです。クラスたとえばこと (注)この、:ボタンAPX、更新、H、DHおよびDは今

class SubButtonRefreshCoinData(Button): 
    def __init__(self, coin_name, **kwargs): 
     super(SubButtonRefreshCoinData, self).__init__(**kwargs) 
     self.CoinName = coin_name 
     self.text = "Refresh" 
    def on_press(self): 
     PopupNotImplementedItem().open() 

class SubButtonCoinName(Button): 
    def __init__(self, **kwargs): 
     super(SubButtonCoinName, self).__init__(**kwargs) 
     self.text = r'[color=ff3333]{}[/color]'.format(kwargs["text"]) 
     self.markup = True 
     self.font_size='20sp' 

class SubButtonGoToCoinHistory(Button): 
    def __init__(self, coin_name, **kwargs): 
     super(SubButtonGoToCoinHistory, self).__init__(**kwargs) 
     self.CoinName = coin_name 
     self.text = "H" 
    def on_press(self): 
     subprocess.Popen(f'py HistoryWindow.py {self.CoinName}', shell=True) 

class SubButtonDeleteCoin(Button): 
    def __init__(self, coin_name, **kwargs): 
     super(SubButtonDeleteCoin, self).__init__(**kwargs) 
     self.CoinName = coin_name 
     self.text = "D" 
    def on_press(self): 
     PopupNotImplementedItem().open() 

class SubButtonDeleteCoinHistory(Button): 
    def __init__(self, coin_name, **kwargs): 
     super(SubButtonDeleteCoinHistory, self).__init__(**kwargs) 
     self.CoinName = coin_name 
     self.text = "DH" 
     print("sdfecvsdcdfwreafsq3456tedcqr4536wtger34r5cedwt4g5aced erf34") 
    def on_press(self): 
     PopupNotImplementedItem().open() 

1クラスのメンバーであり、上を見てください。ビルダークラスこれらの作品は:

class CoinButton(FloatLayout): 
    def __init__(self, coin_name, **kwargs): 
     super(CoinButton, self).__init__(**kwargs) 
     self.CoinName = coin_name 
     topHalfLayout = BoxLayout(pos_hint={"top":1}, size_hint = [1,0.49], orientation = "horizontal") 
     topHalfLayout.add_widget(SubButtonCoinName(text=str(self.CoinName))) 
     topHalfLayout.add_widget(SubButtonRefreshCoinData(self.CoinName)) 
     self.add_widget(topHalfLayout) 

     downHalfLayout = BoxLayout(pos_hint={"down":1}, size_hint = [1,0.49], orientation = "horizontal") 
     downHalfLayout.add_widget(SubButtonGoToCoinHistory(self.CoinName)) 
     downHalfLayout.add_widget(SubButtonDeleteCoinHistory(self.CoinName)) 
     downHalfLayout.add_widget(SubButtonDeleteCoin(self.CoinName)) 
     self.add_widget(downHalfLayout) 

あなたが見ることができるように、すべてが正しいことと思われるが、クラスの唯一ONE piceceが表示され、私は疲れたプリミティブデバッグこの問題は、このコードが既に実行されていた参照するにはSubButtonDeleteCoinHistoryクラスで 。私がコンソールで見たように、テキストは3回印刷された、それは正しい値です。

答えて

0

ここで何が起こっているのか分かりませんが、私はショットを撮ります。私は、CoinButtonが初期化されるたびに、bottom_buttonがFloatLayoutに対して追加され、pos_hintを使用していることを確信しています:downボタンをkivyアプリケーションウィンドウから押してください。しかし、私の人生のために、ダウン値をさまざまな整数や浮動小数点数に変更するとき、変更はありませんでした。最善の方法は、ボタンの高さが0.49であることがわかっているのでpos_hint 'y'を使用することでした。上部は0.5から0.99まで、下部は0から0.49まで開始できます。私が使用し

topHalfLayout = BoxLayout(pos_hint={"y":0.5},size_hint = [1,0.49], orientation = "horizontal") 
...... 
downHalfLayout = BoxLayout(pos_hint={"y":0},size_hint = [1,0.49], orientation = "horizontal") 

別のより良いアプローチは、FloatLayoutは一つのことのようにウィジェットを追加することができ、上部と下部のレイアウトを保持している別のBoxLayoutを作成することでした。それは私の意見でより良い間隔を提供します。 '外側[[上/下]]外側'

outside = BoxLayout(pos_hint={"top":1},size_hint = [1,2*0.49], orientation = "vertical") 
...... 
topHalfLayout = BoxLayout(size_hint = [1,0.49], orientation = "horizontal") 
...... 
outside.add_widget(topHalfLayout) 
...... 
downHalfLayout = BoxLayout(size_hint = [1,0.49], orientation = "horizontal") 
...... 
outside.add_widget(downHalfLayout) 
self.add_widget(outside) 
関連する問題