0
ポップアップを作成しました。これは基本的にいくつかの行のオプションです(最大5行)。Kivy Stack-GridLayoutから要素を削除する
「+」ボタンを押すと、新しい行が表示されます。
「 - 」ボタンを押すと、最後の行が表示されます。不幸にもそれはしません。
Iはroot.removeすでに以下を試してみた():
- > widget_path.pop(0): 視覚的変化、IがNの代わりにN-1の行を参照。
- > widget_path.pop(): 最後の行ではなく最初の行を削除します。
- >のGridLayout(COLS:4)の代わりにStackLayoutの:同様の結果
は、あなたが私を助けてもらえますか?ここで
は私のコードです:
.kvの-file。
<FormPopup>:
size_hint: None, None
size: '361pt', '220pt'
BoxLayout:
orientation: 'vertical'
BoxLayout:
size_hint: 1, None
height: '20pt'
orientation: 'horizontal'
Label:
text: 'column1'
Label:
text: 'column2'
Label:
text: 'column3'
Label:
text: 'column4'
# list of sensors
StackLayout:
padding: 0
spacing: 1
orientation: 'lr-tb'
pos_hint: {'center_x': .5, 'center_y': .5}
height: self.minimum_height
id: measure_stack
BoxLayout:
orientation: 'horizontal'
MyButton:
text: '+'
on_release: root.add()
MyButton:
text: '-'
on_release: root.remove()
私の.pyクラス:
class FormPopup(Popup):
"""Class: Popup for comments"""
def __init__(self):
super().__init__()
self.error = 0
self.linenumber = 0
self.add()
def add(self):
"""add a new option-line"""
widget_path = self.ids
if self.linenumber < 5 :
sensor_id = 'sensor_' + str(self.linenumber)
widget_path['measure_stack'].add_widget(Spinner(id = sensor_id, size_hint=(None,None), height='20pt', width='85pt', text = '---', values= ('A','B','C')))
measurand_id = 'measurand_' + str(self.linenumber)
widget_path['measure_stack'].add_widget(Spinner(id = measurand_id, size_hint=(None,None), height='20pt', width='85pt', text = '---', values= ('A','B','C')))
branchwise_id = 'branchwise_' + str(self.linenumber)
widget_path['measure_stack'].add_widget(Spinner(id = branchwise_id, size_hint=(None,None), height='20pt', width='85pt', text = '---', values= ('A','B','C')))
procedure_id = 'procedure_' + str(self.linenumber)
widget_path['measure_stack'].add_widget(Spinner(id = procedure_id, size_hint=(None,None), height='20pt', width='85pt', text = '---', values= ('A','B','C')))
self.linenumber += 1
def remove(self):
"""remove one option-line"""
widget_path = self.ids.measure_stack.children
# do not remove if there is only one line
if len(widget_path) > 4:
self.linenumber -= 1
for i in range(4):
widget_path.pop(0)