簡體   English   中英

如何清除 kivy 小部件?

[英]How to clear kivy widgets?

我有一個情緒識別 kivy 應用程序,可以通過 2 個選項完成,上傳照片和整個相機視頻源。 我使用 MDDropdownMenu 讓用戶選擇。

下拉部分和上傳照片和加載視頻部分的代碼:

(編輯:我添加了我使用文件選擇器的部分,並在圖像部分添加了我的 .kv 文件)

        self.menu_list = [
            {
                "viewclass":"OneLineListItem",
                "text":"Upload Photo",
                "on_release": lambda x = "Test": self.upload_picture(),
            },
            {
                "viewclass": "OneLineListItem",
                "text": "Open Camera",
                "on_release": lambda x="Test": self.load_video(),
            }
        ]
        self.menu = MDDropdownMenu(
            items = self.menu_list,
            width_mult = 3
        )
        self.menu.caller = self.wm.get_screen('main_screen').ids.capture_emotion_button
        self.menu.open()

def upload_picture(self):
        filechooser.open_file(on_selection=self.selected)
        self.photo = Image()
        loc = self.wm.get_screen('main_screen').ids.display_pic_emotion
        loc.clear_widgets()
        return self.photo

def selected(self, selection):
        if selection:
            self.choosen_image = selection[0]

def load_video(self, *args):
        self.image = Image()
        self.wm.get_screen('main_screen').ids.display_pic_emotion.add_widget(self.image)
        self.capture = cv2.VideoCapture(0)
        Clock.schedule_interval(self.detect_emotion, 1.0 / 30.0)
        return self.image


                    MDRoundFlatButton:
                            id: capture_emotion_button
                            text:"Capture Emotion"
                            pos_hint: {"center_x": .77, "center_y": .47}
                            line_color: 1, 1, 1, 1
                            on_press:
                                                             app.choice_dropdown()
                    MDBoxLayout:
                        orientation: 'vertical'
                        md_bg_color: app.theme_cls.bg_normal
                        radius: [40, 0, 0, 0]
                        MDBoxLayout:
                            padding: [10, 10, 10, 10]
                            adaptive_height: True
                            MDLabel:
                                halign: 'center'
                                text: "Camera Viewer"
                                font_size: 15
                                bold: True
                                pos_hint: {"center_7": .70}
                        MDBoxLayout:
                            id: display_pic_emotion
                            padding: [10, 10, 10, 10]
                            Image:
                                id: emoimage


但是,如果您注意到,上傳照片和加載視頻實用程序都在同一空間。 這意味着當用戶單擊上傳照片時,照片將出現在該框中。 當使用再次單擊下拉菜單但選擇打開相機時,我想清除該框,以便現在可以在框中顯示視頻源。 但是我現在擁有的是,當我多次單擊下拉菜單中的選項時,它只會為照片/視頻提要添加另一個框。 每次單擊下拉菜單中的選項時,有沒有辦法清除空間?

嘗試添加對clear_widgets()的調用。 改變:

def upload_picture(self):
    self.photo = Image()
    self.wm.get_screen('main_screen').ids.display_pic_emotion.add_widget(self.photo)
    return self.photo

至:

def upload_picture(self):
    self.photo = Image()
    loc = self.wm.get_screen('main_screen').ids.display_pic_emotion
    loc.clear_widgets()
    loc.add_widget(self.photo)

Ans 與load_video()類似。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM