I have an MDList containing various ThreeLineAvatarIconListItem widgets. These list items contain an MDCheckbox as the right icon. The functionality I would like to implement - when the Checkbox is ticked i.e. 'on_active', the parent list item is completely removed. The list is a Task Tracker and the idea is that the task can be 'ticked' and is then no longer displayed within the list.
Some (possibly not-so!)relevant code extracts:
class TasksScreen(Screen) :
def on_enter(self, *args):
for i in TaskStore.keys() :
self.ids.wiki_cardcontainer.add_widget(TaskItems(id='wikitask {}'.format('task_title'),
text=str(TaskStore.get(i)['task_title']),
secondary_text=str(TaskStore.get(i)['task_detail']),
tertiary_text=str(TaskStore.get(i)['task_deadline'])))
def on_leave(self, *args):
self.ids.wiki_cardcontainer.clear_widgets()
def get_date(self, date) :
'''
:type date: <class 'datetime.date'>
'''
self.ids.wiki_dateselected.text = str(date)
def show_date_picker(self) :
date_dialog = MDDatePicker(callback=self.get_date)
date_dialog.open()
def create_task(self):
task_title = self.ids.i_wiki_tasktitle.text
task_detail = self.ids.i_wiki_taskdetail.text
task_deadline = self.ids.wiki_dateselected.text
print('Task title is {}, task detail is {}, and task deadline is {}'.format(task_title, task_detail, task_deadline))
self.ids.wiki_cardcontainer.add_widget(TaskItems(id = 'wikitask_{}'.format(task_title),
text=str(task_title),
secondary_text = str(task_detail),
tertiary_text = str(task_deadline)))
TaskStore[str(task_title)] = {'task_title': str(task_title), 'task_detail': str(task_detail), 'task_deadline': str(task_deadline)}
TaskStore = JsonStore("TaskStore.json")
class TaskItems(ThreeLineAvatarIconListItem):
def complete_task(self):
print('widget removed')
#TODO Add in functionality to remove widget when checkbox is ticked.
pass
class Container(IRightBodyTouch, MDBoxLayout):
adaptive_width = True
class RightCheckBox(IRightBodyTouch, MDCheckbox):
pass
.kv
: name: 'TasksScreen'
MDBoxLayout:
orientation: 'horizontal'
size_hint_y: 1
size_hint_x: 1
MDBoxLayout:
size_hint: (0.4, 1)
orientation: 'vertical'
MDCard:
id: wiki_card_1
orientation: 'vertical'
size_hint: (1, 1)
spacing: 5
MDLabel:
size_hint: (1, None)
text: 'Task Entry'
text_size: self.size
font_size: 40
halign: 'left'
pos_hint: {'top': 1}
md_bg_color: app.theme_cls.accent_light
elevation: 10
MDLabel:
size_hint: (1, None)
text: 'Task Details'
font_size: 15
halign: 'left'
pos_hint: {'top': 1}
MDTextField:
id: i_wiki_tasktitle
size_hint: (0.8, None)
pos_hint: {'top': 1}
hint_text: "Enter task title: "
mode: "rectangle"
multiline: False
required: True
color_mode: 'accent'
icon_right: "arrow-down-drop-circle-outline"
icon_right_color: app.theme_cls.accent_color
MDTextField:
id: i_wiki_taskdetail
size_hint: (0.8, None)
hint_text: "Details of task: (max 200 chars.)"
mode: "rectangle"
multiline: True
max_text_length: 200
color_mode: 'accent'
icon_right: "arrow-down-drop-circle-outline"
icon_right_color: app.theme_cls.accent_color
MDBoxLayout:
orientation: 'horizontal'
size_hint: (1, None)
height: self.minimum_height
width: root.ids.wiki_card_1.width
spacing: '20dp'
MDRaisedButton:
text: 'Select Deadline'
size_hint: (None, None)
halign: 'left'
height: '40dp'
md_bg_color: app.theme_cls.accent_light
on_release: root.show_date_picker()
MDLabel:
text: '[select date]'
id: wiki_dateselected
icon: 'calendar'
size_hint: (None, None)
height: '40dp'
width: '200dp'
MDLabel:
text: ''
size_hint_x: '0.4'
MDRaisedButton:
text: 'Submit'
md_bg_color: app.theme_cls.accent_light
on_release: root.create_task()
MDLabel:
text: ''
ScrollView:
size_hint: (0.6, 1)
MDList:
id: wiki_cardcontainer
<TaskItems>
IconLeftWidget:
icon: 'star'
RightCheckBox:
on_active:
root.complete_task()
Aucun commentaire:
Enregistrer un commentaire