最后一天我遇到了非常恼火的表现我的节目。 Mabye首先展示截图,描述错误,并在finnaly显示代码。
如您所见,Coin是一个包含几个子按钮的按钮。我在循环中生成这些小部件并动态添加到图层。 但它只在最后一次迭代中正常工作。 请查看代码。 这是一个代码" Coin Button:class。 请注意,例如:button apx,Refresh,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()
现在,请看一下Builder类的这些部分:
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)
正如你所看到的,一切似乎都是正确的,但只有一个类可见。 在类SubButtonDeleteCoinHistory我累了原始调试这个问题,看看这个代码已经运行了。正如我在控制台中看到的那样,文本打印了3次,这是正确的值。
答案 0 :(得分:0)
我不确定这里发生了什么,但是我试了一下。我相信每次初始化CoinButton时,底部按钮都会相对于FloatLayout添加,并使用pos_hint:向下按下kivy应用程序窗口下的按钮。但对于我的生活,当将下降值改为各种整数和浮点数时,没有任何变化。最好的方法是使用pos_hint' y'因为我们知道按钮的高度是0.49,所以顶部可以从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")
我使用的另一个更好的方法是创建另一个包含顶部和底部布局的BoxLayout,允许FloatLayout将窗口小部件添加为一件事。在我看来,它提供了更好的间距。 '在[[top / bottom]]之外'
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)