我的想法是创建一个订单列表。如果订单需要,这必须可以扩大或减少。所以我在尝试如何做一个按钮,可以将"Box Label"添加到网格中,同时这个"Box Label"具有通过按钮自行删除的属性。我尝试了很多东西,但我真的是新手,所以什么都不适合我。
class OperatorWindow(BoxLayout):
def __init__(self, **kwargs):
super().__init__(**kwargs)
Window.size = (1366, 768)
def remove_item(self):
self.ids.parent.clear_widgets()
def add_more(self):
prod_addmore = self.ids.product_inputs
product = BoxLayout(size_hint_x=1, height=30, spacing=5)
prod = TextInput(size_hint_x=.2)
qty = TextInput(size_hint_x=.1)
price = TextInput(size_hint_x=.1)
delete = Button(text='-', size_hint_x=.05)
product.add_widget(prod)
product.add_widget(qty)
product.add_widget(price)
product.add_widget(delete)
prod_addmore.add_widget(product)
delete.bind(on_release=self.deleting(prod_addmore, product))
def deleting(self, prod_addmore, product):
prod_addmore.remove_widget(product)
class OperatorApp(App):
def build(self):
return OperatorWindow()
if __name__ == "__main__":
oa = OperatorApp()
oa.run()
Kivy文件
...
BoxLayout:
id: products_labels
size_hint_y: None
size_hint_x: .45
height: 40
spacing: 5
FlatButton:
size_hint_x: .2
text: 'Producto'
canvas.before:
Color:
rgba: (.30,.30,.30,1)
Rectangle:
size: self.size
pos: self.pos
FlatButton:
size_hint_x: .1
text: 'Cantidad'
canvas.before:
Color:
rgba: (.30,.30,.30,1)
Rectangle:
size: self.size
pos: self.pos
FlatButton:
size_hint_x: .1
text: 'Precio'
canvas.before:
Color:
rgba: (.30,.30,.30,1)
Rectangle:
size: self.size
pos: self.pos
FlatButton:
text: '+'
size_hint_x: .05
on_release: root.add_more()
canvas.before:
Color:
rgba: (.30,.30,.30,1)
Rectangle:
size: self.size
pos: self.pos
ScrollView:
size_hint_y: .15
do_scroll_x: False
do_scroll_y: True
GridLayout:
id: product_inputs
size:(self.width, self.height)
size_hint_x: .45
spacing: 5
size_hint_y: None
cols: 1
height: self.minimum_height
row_default_height: 30
row_force_default: True
请参阅此链接!关于小部件的一些复习。
你的代码很好,你只需要在这里和那里做一些小的调整。
首先更改
product
至
self.product
它总是让调用函数变得更容易,因为self表示所有权是可以的。
第二次更改此线路
delete.bind(on_release=self.deleting(prod_addmore, product))
至
delete.bind(on_release=self.deleting)
这个错误的原因是因为括号。最后是
Chang这个
def deleting(self, prod_addmore, product):
prod_addmore.remove_widget(product)
至
def deleting(self, widget):
prod_addmore = self.ids.product_inputs
prod_addmore.remove_widget(self.product)
希望这有帮助,如果你需要更多的解释,请告诉我:(