Киви открывает два всплывающих окна, когда я ожидал только одно - PullRequest
0 голосов
/ 04 октября 2018

Итак, я пытался открыть всплывающее окно в Kivy и закрыть его при нажатии Escape.Однако я столкнулся с необходимостью дважды нажать на нее, а затем обнаружил, что она открывает два всплывающих окна.

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.core.window import Window
from kivy.uix.popup import Popup
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button

from kivy.config import Config
Config.set('kivy', 'exit_on_escape', '0')

class KeyDown(App):
    def build(self):
        self.popup_exists = 0
        Window.bind(on_key_down=self.key_action)
        return Widget()

    def key_action(self, *args):
        key1 = args[1]
        key2 = args[2]
        special_keys = args[4]
        letter = args[3]

        if special_keys == ['ctrl'] and letter == 'f':                          # Ctrl-F
            print('Find')
            self.open_find_dialog()
        if key1 == 13 and key2 == 40 and self.popup_exists == 1:                # ENTER KEY
            pass
        if key1 == 27 and key2 == 41 and self.popup_exists == 1:    # ESC
            self.find_window.dismiss()

    def open_find_dialog(self):
        content = BoxLayout(orientation='horizontal')
        col1_cont = BoxLayout(size_hint_x = 2,orientation = 'vertical')
        col2_cont = BoxLayout(size_hint_x = 4,orientation = 'vertical')
        find_labl = Label(text='Find',size_hint_y=None, height = 40)
        repl_labl = Label(text='Replace',size_hint_y=None, height = 40)

        find_text = TextInput(text='', size_hint_y = None, height = 40)
        repl_text = TextInput(text='', size_hint_y = None, height = 40)
        col1_cont.add_widget(find_labl)
        col1_cont.add_widget(repl_labl)
        col2_cont.add_widget(find_text)
        col2_cont.add_widget(repl_text)

        content.add_widget(col1_cont)
        content.add_widget(col2_cont)
        self.find_window = Popup(title='Find and Replace',content = content,size_hint=(None, None), size=(240, 140))
        self.find_window.open()
        self.popup_exists = 1
if __name__ == '__main__':
    KeyDown().run()

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...