python - Kivy 打开两个弹出窗口,而我只期望一个
问题描述
因此,我一直在尝试在 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()
有谁知道它为什么会打开两个弹出窗口?我将如何阻止它这样做?
解决方案
推荐阅读
- apache-spark - 为什么 SparkSession 在 Spark2.3 中不可用
- php - 如何在 PHP 中获取自午夜以来经过的毫秒数?
- c# - How to Hide/Handle back button in C# UWP App frame
- excel - 键盘挂钩不起作用?KeyboardProc 回调函数未执行?
- wordpress - 在 wordpress add_action 中,我如何在使用类时传递 $priority $accepted_args
- list - 采用两个列表并计算第一个列表中的模式出现在第二个列表中的次数的方案函数
- javascript - 更改时区笔记本电脑并在 Firefox 上刷新页面不更改使用新的 Date() js
- java - 从 Http 下载图像获取响应
- ios - 如何在 IOS 中 scaleType=centerCrop?
- reactjs - 为什么要在 React 功能组件中使用局部变量?