Python 如何在tkinter中获得文本中的文字

Python 如何在tkinter中获得文本中的文字,python,tkinter,Python,Tkinter,我有一个包含两行文本的文本小部件。我需要在单击该行时获取该行。例如,如果我点击第二行文本,那么ı应该得到唯一的第二行文本。我想把它捆起来,但没用 还有一个问题。绑定函数只工作一次。如果我第二次单击文本小部件,它将不工作。我的代码得到的是不是我点击的每一行文本 from tkinter import * import time root = Tk() clicked = StringVar() text = Text(root,height = 10, width = 30,relief

我有一个包含两行文本的文本小部件。我需要在单击该行时获取该行。例如,如果我点击第二行文本,那么ı应该得到唯一的第二行文本。我想把它捆起来,但没用

还有一个问题。绑定函数只工作一次。如果我第二次单击文本小部件,它将不工作。我的代码得到的是不是我点击的每一行文本

from tkinter import *
import time

root = Tk()

clicked = StringVar()


text = Text(root,height = 10, width = 30,relief = SUNKEN )
text.grid(row = 0, column = 0,padx = 20,pady = 20)
text.insert(END,"Oda the Elder\nJohn the Baptist")

def getelement(event):
    for t in range(1,3):
        get_ = text.get(f"{t}.0",f"{t+1}.0")
        print(get_)

text.bind("<FocusIn>",getelement)

but = Button(root,text = "click")
but.grid(row = 1, column = 0)


root.mainloop()
从tkinter导入*
导入时间
root=Tk()
clicked=StringVar()
文字=文字(根部,高度=10,宽度=30,浮雕=凹陷)
网格(行=0,列=0,padx=20,pady=20)
正文.插入(结束,“老奥达\n施洗者奥达”)
def getelement(事件):
对于范围(1,3)内的t:
get=text.get(f“{t}.0”,f“{t+1}.0”)
打印(获取)
text.bind(“,getelement)
但是=按钮(根,text=“单击”)
但是.grid(行=1,列=0)
root.mainloop()

您不能使用文本框执行此操作,因为所有内容都只在该文本框内。这些线是从理论上定义的。您想使用列表框吗

语法

下面是创建此小部件的简单语法−

w = Listbox ( master, option, ... )
下面是一个代码示例:

from tkinter import *

top = Tk()

Lb1 = Listbox(top)
Lb1.insert(1, "Python")
Lb1.insert(2, "Perl")
Lb1.insert(3, "C")
Lb1.insert(4, "PHP")
Lb1.insert(5, "JSP")
Lb1.insert(6, "Ruby")
def items_selected(event):
    """ handle item selected event
    """
    # get selected indices
    selected_indices = Lb1.curselection()
    # get selected items
    selected_langs = ",".join([Lb1.get(i) for i in selected_indices])
    msg = f'You selected: {selected_langs}'

    print(msg)


Lb1.bind('<<ListboxSelect>>', items_selected)
Lb1.pack()
top.mainloop()


从tkinter导入*
top=Tk()
Lb1=列表框(顶部)
Lb1.插入(1,“Python”)
Lb1.插入(2,“Perl”)
Lb1.插入(3,“C”)
Lb1.插入(4,“PHP”)
Lb1.插入(5,“JSP”)
Lb1.插入(6,“红宝石”)
已选择的def项目(事件):
“”“处理所选项目事件”
"""
#获取选定的索引
选定的_索引=Lb1.l()
#获取所选项目
选中的_langs=“,”.join([Lb1.get(i)for i in selected_index])
msg=f'youselected:{selected_langs}'
打印(msg)
Lb1.绑定(“”,已选择项)
Lb1.pack()
top.mainloop()

您可以绑定到按钮单击事件(
)。在该函数中,您可以根据单击时鼠标的x/y来获取索引。通过使用“linestart”和“lineend”修改索引,可以获得整行的文本

该函数将如下所示:

def getelement(event):
    index = event.widget.index(f"@{event.x},{event.y}")
    text = event.widget.get(f"{index} linestart", f"{index} lineend")
    print(text)
text.bind("<1>",getelement)
绑定将如下所示:

def getelement(event):
    index = event.widget.index(f"@{event.x},{event.y}")
    text = event.widget.get(f"{index} linestart", f"{index} lineend")
    print(text)
text.bind("<1>",getelement)
text.bind(“,getelement)

thı是否使用绑定功能,我的意思是,当单击“C”时,我只能获得第三行吗?@omneer我更新了代码,如果这是您想要的,请接受回答“您不能使用文本框执行此操作”-这是一个错误的说法。@BryanOakley很想知道这是怎么回事done@EXODIA请参阅示例。如果我单击第二行下方的某个位置,则第二行仍在运行printed@EXODIA:是的,这就是代码的作用。如果需要,您拥有处理边缘情况所需的所有数据。您可以获取最后一行的坐标,并将其与单击的坐标进行比较。