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

如何禁用Tkinter文本组件的内容选中功能(不使用state=disabled)

解决Text组件禁止选中且不使用state=disabled的问题

exportselection=False仅用于禁用跨组件的选中内容共享,无法阻止组件内部的选中操作。要实现禁止选中且不依赖state=disabled,可以通过绑定事件拦截所有触发选中的行为:

  1. 绑定鼠标点击和拖动事件,清除选中并阻止默认行为
  2. 绑定全选快捷键(Ctrl+A),阻止默认全选操作

修改后的完整代码如下:

import tkinter as tk
from tkinter import ttk

window = tk.Tk()
numb_of_times = 5

window.geometry('1920x1080')
window.configure(bg='blue')

# 初始化Text组件,不设置state=disabled
input_board = tk.Text(window)
input_board.pack()
input_board.place(x=100, y=40)

def disable_selection(event):
    # 清除已选中的文本
    input_board.tag_remove(tk.SEL, "1.0", tk.END)
    # 阻止事件继续传播,取消默认选中行为
    return "break"

# 绑定鼠标事件,阻止选中
input_board.bind("<Button-1>", disable_selection)
input_board.bind("<B1-Motion>", disable_selection)
# 绑定全选快捷键,阻止默认全选
input_board.bind("<Control-a>", disable_selection)
input_board.bind("<Control-A>", disable_selection)
# 加上exportselection=False,避免跨组件共享选中内容
input_board.config(exportselection=False)

def send():
    # 无需切换state,直接插入内容
    input_board.insert(tk.INSERT, '%s\n' % user_input)

for i in range(numb_of_times):
    user_input = input()
    print(user_input)
    send()

window.mainloop()

说明:

  • 通过disable_selection函数拦截所有触发选中的事件,清除选中并返回"break"阻止默认行为
  • 同时保留exportselection=False,避免选中内容被其他组件共享
  • Text组件保持正常状态,但用户无法选中文本,仅能通过代码插入内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:31:35