python tkinter如何让get菜单“select all”函数工作?

2024-09-28 01:32:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试向这个程序添加一个带有“全选”的菜单。我想让它选择所有的文本在回答文本框,这是“空白2”。我可以得到菜单和下拉菜单工作,但当我点击“全选”它给我一个错误。 这是密码

#!/usr/bin/env python3
from tkinter import *

#function for select all menu item
def select_all(event=None):
    blank2.tag_add('sel', '1.0', 'end')
    return "break"

def getDaText():
    src = blank.get()

    if '_' in src:
        dst = src.replace("_", " ")
    else:
        dst = src.replace(" ", "_")

    blank2.insert(0, dst)

def clear_answer():

    blank.delete('0', END)
    blank2.delete('0', END)

main = Tk()
# Creating Menubar
menubar = Menu(main)

# Adding Edit Menu and commands
edit = Menu(menubar, tearoff = 0)
menubar.add_cascade(label ='Edit', menu = edit)
#edit.add_command(label ='Cut', command = None)
#edit.add_command(label ='Copy', command = None)
#edit.add_command(label ='Paste', command = None)
edit.add_command(label ='Select All', command=select_all)

Label(main, text=" add or remove underscore ").grid(row=0, columnspan=3, sticky=W, pady=1)

blank = Entry(main)
blank2 = Entry(main)

blank.grid(row=1, column=0, columnspan=2, sticky=W)
blank2.grid(row=2, column=0, columnspan=2, sticky=W)

Button(main, text='Show answer', command=getDaText).grid(row=3, column=0, sticky=W, pady=1)
Button(main, text='Clear', command=clear_answer).grid(row=3, column=1, sticky=W, pady=1)

# display Menu
main.config(menu = menubar)
mainloop()

这就是错误

Exception in Tkinter callback

Traceback (most recent call last):
  File "/usr/lib/python3.5/tkinter/__init__.py", line 1553, in __call__
    return self.func(*args)
  File "/home/mthomas/python_progs/add_or_remove_underscore/add_or_remove_underscore-tk-with-label.py", line 5, in select_all
    blank2.tag_add('sel', '1.0', 'end')
AttributeError: 'Entry' object has no attribute 'tag_add'

Tags: insrcnoneaddmainalleditselect
1条回答
网友
1楼 · 发布于 2024-09-28 01:32:42

Entry-小部件上调用方法tag_add。此小部件没有tag_add方法。可能您希望使用Text-小部件

# replace
blank2 = Entry(main)
# with
blank2 = Text(main)

参考文献:

条目小部件:https://www.tutorialspoint.com/python/tk_entry.htm

文本小部件:https://www.tutorialspoint.com/python/tk_text.htm

编辑

我用Entry-小部件寻找了一个解决方案,发现了以下内容:

def select_all(event=None)
    # first set the focus to the entry widget
    blank2.focus()

    # use the selection_range method from the entry widget
    blank2.selection_range(0, END)

https://effbot.org/tkinterbook/entry.htm#Tkinter.Entry.selection_range-method

Setting focus to specific TKinter entry widget

相关问题 更多 >

    热门问题