PysimpleGUI:当在其他地方单击窗口时如何从输入框中删除光标?

问题描述 投票:0回答:1

我正在使用 PySimpleGui 创建一个界面,其中包含一些输入框、按钮、文本和一些显示的图像。我正在尝试将数字键绑定到其他按下按钮的操作。但是,默认焦点位于输入框中,因此只要按下我设置绑定的数字键,数字就会在输入框中输入。我想从输入框中移除焦点,并且不输入键盘输入,除非我专门选择了输入框。这是我能想到的几乎所有其他应用程序的行为。例如,如果我在当前正在输入的文本输入框之外单击,则光标将不再存在,并且我输入的任何内容都不会输入)。

我尝试将焦点设置到另一个文本框,每次单击鼠标按钮时该文本框都不可见,但如果我确实想在其中输入内容,那么它会立即将焦点从输入框移开。

有办法做到这一点吗?

window.bind('<Button-1>', "-OUTFOCUS-")
if event =="-OUTFOCUS-":
     window['-FOCUSOUT-'].set_focus()

我已经尝试了无数次迭代来找到焦点所在并将其设置在其他地方,但没有任何效果。

python-3.x input focus pysimplegui text-cursor
1个回答
0
投票

PySimpleGUI 演示浏览器执行类似的操作。按 F1、F2、F3 可以访问 3 个输入元素。

您尝试的解决方案的问题是文本元素无法获得焦点,因此将焦点设置在一个元素上失败。

创建窗口时设置

use_default_focus=False
将解决初始焦点问题。另一种选择是将焦点设置到不可见的元素。

正如您所看到的,tkinter 在处理焦点的方式上有点不同。在输入外部单击不足以导致该元素失去焦点。您可以按 Tab 移动到下一个可以获得焦点的元素。

我不建议使用数字键作为导航方式,因为它们可能会作为文本输入。也许功能键适合您?

这是一个使用功能键进行导航的示例程序:

import PySimpleGUI as sg layout = [ [sg.Text('Use Function Keys to Navigate to Input Elements')], [sg.Text('F1'), sg.Input(key='-IN1-')], [sg.Text('F2'), sg.Input(key='-IN2-')], # [sg.Input(key='-INVISIBLE-', visible=False)], # Optional if you use use_default_focus=False [sg.Button('Does Nothing'), sg.Button('Exit')] ] window = sg.Window('Function Keys to Navigate', layout, finalize=True, use_default_focus=False) # window['-INVISIBLE-'].set_focus() window.bind('<F1>', '-F1-') window.bind('<F2>', '-F2-') while True: event, values = window.read() print(event, values) if event == sg.WIN_CLOSED or event == 'Exit': break elif event == '-F1-': window['-IN1-'].set_focus() elif event == '-F2-': window['-IN2-'].set_focus() window.close()

eCookbook 中还有一个条目,显示使用箭头键在输入元素之间导航。

© www.soinside.com 2019 - 2024. All rights reserved.