Kivy Popup подтверждение удаления элемента списка - PullRequest
0 голосов
/ 17 февраля 2019

Я хотел бы удалить элемент из списка, если пользователь нажмет кнопку удаления совещания.

В этом случае появится всплывающее окно с запросом подтверждения удаления совещания.

Все работает нормально, ожидайте, когда пользователь нажмет на кнопку Да (чтобы подтвердить удаление собрания), мне не удалось удалить собрание из списка.

Я быхотел бы написать для кнопки Да:

on_press : self.meeting_list.adapter.data.remove(selection) and self.meeting_list._trigger_reset_populate()

class MeetingDB(BoxLayout):
    meeting_list = ObjectProperty()
    attendance_list = ObjectProperty()

    def delete_meeting(self):
        if self.meeting_list.adapter.selection:
            selection = self.meeting_list.adapter.selection[0].text

            self.box_popup = BoxLayout(orientation = 'horizontal')
            self.box_popup.add_widget(Label(text = "Confirm the deletion of the meeting ?"))

            self.box_popup.add_widget(Button(
                text = "Yes",
                on_press = App.get_running_app().root.ids.meeting_list.adapter.data.remove(selection),
                size_hint = (0.215, 0.075)))

            self.box_popup.add_widget(Button(
                text = "No",
                on_press = lambda *args: self.popup_exit.dismiss(),
                size_hint=(0.215, 0.075)))

            self.popup_exit = Popup(title = "Delete Meeting Confirmation",
                content = self.box_popup,
                size_hint = (0.4, 0.4),
                auto_dismiss = True)

            self.popup_exit.open()

            #self.meeting_list.adapter.data.remove(selection)
            #self.meeting_list._trigger_reset_populate()

Kv файл:

<MeetingDB>:
    orientation:'vertical'
    meeting_list: meeting_view
    attendance_list: attendance_view

    BoxLayout:
        size_hint_y: None
        height: "40dp"

        Button:
            text: 'Add meeting'
            size_hint_x: 20
            on_press: root.add_meeting()
        Button:
            text: 'Delete Meeting'
            size_hint_x: 20
            on_press: root.delete_meeting()

    ListView:
        id: meeting_view
        adapter:
            ListAdapter(data = app.r, cls = main.MeetingListButton)

    ListView:
        id: attendance_view
        adapter:
            ListAdapter(data = [], cls = main.AttendanceListButton, selection_mode = 'multiple')

1 Ответ

0 голосов
/ 17 февраля 2019

Первая проблема заключается в том, что вы сохраняете выполнение remove() в качестве связанной функции для on_press, а не функции remove.

Поэтому выполнение следующих действий будет более целесообразным:

on_press = App.get_running_app().root.ids.meeting_list.adapter.data.remove

Но я бы вместо этого преобразовал вызов в пользовательскую функцию, чтобы вы могли лучше контролировать происходящее, выполнив что-то вроде:

class MeetingDB(BoxLayout):
    meeting_list = ObjectProperty()

    def remove_thing(self, event):
        selection = self.meeting_list.adapter.selection[0].text
        App.get_running_app().root.ids.meeting_list.adapter.data.remove(selection),

    def delete_meeting(self):
        if self.meeting_list.adapter.selection:
            self.box_popup = BoxLayout(orientation = 'horizontal')
            self.box_popup.add_widget(Label(text = "Confirm the deletion of the meeting ?"))

            self.box_popup.add_widget(Button(
                text = "Yes",
                on_press = self.remove_thing
                size_hint = (0.215, 0.075))
            )

            self.popup_exit.open()

Теперь я неУ меня не установлен Kivy, и я не могу проверить этот код.
Так что извините, если он не идеален, но вы должны понять.

...