删除自身的按钮



我的想法是创建一个订单列表。如果订单需要,这必须可以扩大或减少。所以我在尝试如何做一个按钮,可以将"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) 

希望这有帮助,如果你需要更多的解释,请告诉我:(

最新更新