dragov 发表于 2025-8-17 17:28:44

Tkinter 焦点问题



from tkinter import *
root=Tk()
m=["北京","天津","上海","重庆"]
for i in m :
   n=Button(root,text=i)
   n.pack()
   n.focus_set()
mainloop()

程序运行后,要求焦点要落在【北京】

FishC 发表于 2025-8-17 17:32:41

在Tkinter中,焦点设置会覆盖之前的设置,循环中最后设置的按钮(上海)会获得焦点。要使焦点落在[北京]按钮上,需要单独设置并保留其引用:

from tkinter import *

root = Tk()
m = ["北京", "上海"]# 确保包含目标按钮文本

# 创建列表存储按钮引用
buttons = []
for text in m:
    btn = Button(root, text=text)
    btn.pack()
    buttons.append(btn)# 保存引用到列表

# 单独设置北京按钮焦点
for btn in buttons:
    if btn["text"] == "北京":# 通过文本匹配目标按钮
      btn.focus_set()
      break# 找到后立即退出循环

mainloop()

**关键点说明:**
1. 用列表 buttons 存储所有按钮对象
2. 循环结束后再单独遍历查找文本为"北京"的按钮
3. 找到后调用 focus_set() 并跳出循环
4. 循环创建时不能直接设置焦点(会被后续覆盖)

**其他方案:**
若按钮顺序固定(如北京是第一个),可直接:
first_btn = buttons
first_btn.focus_set()

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

ydwb 发表于 2025-8-17 19:33:50

from tkinter import *

root = Tk()
m = ["北京", "天津", "上海", "重庆"]
buttons = []# 创建存储按钮的列表

for i in m:
    n = Button(root, text=i)
    n.pack()
    buttons.append(n)# 将按钮添加到列表

# 循环结束后设置第一个按钮(北京)的焦点
if buttons:# 确保列表不为空
    buttons.focus_set()

mainloop()
页: [1]
查看完整版本: Tkinter 焦点问题