You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求修改Tkinter屏幕键盘代码以支持两个Entry输入框

我来帮你解决这个问题!原来的代码之所以不管点哪个输入框,内容都往第一个里跑,是因为它把键盘输入固定绑定到了第一个Entry上。咱们只需要加个小逻辑,跟踪当前选中的输入框,让键盘把内容输入到当前激活的那个就行。

下面是修改后的完整代码:

import tkinter as tk
from functools import partial

root = tk.Tk()
root.geometry("400x250")  # 调整窗口大小,方便放下两个输入框和键盘

# 新增变量:记录当前获得焦点的输入框
current_active_entry = None

def update_current_entry(entry):
    """当输入框获得焦点时,更新当前激活的输入框"""
    global current_active_entry
    current_active_entry = entry

def insert_character(char):
    """往当前激活的输入框插入字符"""
    if current_active_entry:
        current_active_entry.insert(tk.END, char)

def delete_last_char():
    """删除当前激活输入框的最后一个字符"""
    if current_active_entry:
        current_active_entry.delete(len(current_active_entry.get()) - 1, tk.END)

# 创建第一个输入框
entry1 = tk.Entry(root, font=('Arial', 14))
entry1.pack(pady=10)
# 绑定焦点事件:当点击或切换到这个输入框时,标记它为当前激活的
entry1.bind("<FocusIn>", lambda event: update_current_entry(entry1))

# 创建第二个输入框
entry2 = tk.Entry(root, font=('Arial', 14))
entry2.pack(pady=10)
entry2.bind("<FocusIn>", lambda event: update_current_entry(entry2))

# 创建屏幕键盘的框架
keyboard_frame = tk.Frame(root)
keyboard_frame.pack(pady=10)

# 定义键盘按键布局
keyboard_rows = [
    ['1', '2', '3'],
    ['4', '5', '6'],
    ['7', '8', '9'],
    ['0', 'Del']
]

# 生成键盘按钮
for row in keyboard_rows:
    row_frame = tk.Frame(keyboard_frame)
    row_frame.pack()
    for key in row:
        if key == 'Del':
            button = tk.Button(row_frame, text=key, width=5, command=delete_last_char)
        else:
            # 使用partial把字符参数传给insert_character函数
            button = tk.Button(row_frame, text=key, width=5, command=partial(insert_character, key))
        button.pack(side=tk.LEFT, padx=2, pady=2)

root.mainloop()

关键修改点说明:

  • 新增了current_active_entry变量,用来保存当前用户选中的输入框对象。
  • 给每个Entry绑定了<FocusIn>事件:当用户点击或切换到某个输入框时,自动更新current_active_entry为这个输入框。
  • 修改了键盘按键的处理函数insert_character和delete_last_char,让它们操作current_active_entry而不是固定的某个输入框。

这样你点击第二个输入框后,键盘输入就会正确进入第二个框了,而且这个逻辑还支持扩展到更多输入框,只需要给新的Entry绑定同样的<FocusIn>事件就行。

内容的提问来源于stack exchange,提问作者scarface113

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:40:27