kerln888 发表于 2022-6-28 20:00:45

用For循环,Entry无法剪切、复制数据

本帖最后由 kerln888 于 2022-7-6 08:12 编辑

代码如下:
# Entry添加剪切、复制、粘贴功能
def cut(editor, event=None):
    editor.event_generate("<<Cut>>")

def copy(editor, event=None):
    editor.event_generate("<<Copy>>")

def paste(editor, event=None):
    editor.event_generate('<<Paste>>')

def rightKey(event, editor):
    menubar.delete(0, END)
    menubar.add_command(label='剪切', command=lambda: cut(editor))
    menubar.add_command(label='复制', command=lambda: copy(editor))
    menubar.add_command(label='粘贴', command=lambda: paste(editor))
    menubar.post(event.x_root, event.y_root)

menubar = tk.Menu(checkWindow, tearoff=False)

i = 0
listEntry = []
    for ticket in finishAll.select_db_data:
    # 第0列开始
      listEntry.append([])
      for j in range(len(ticket)):
            finishEntryData = tk.Entry(finishFrameShow, width=28, fg='blue', justify='center')
            listEntry.append(finishEntryData)
            # 输入框第i行第j列插入数据
            finishEntryData.grid(row=i, column=j)
            # 从上次存放的最后一个位置开始
            finishEntryData.insert(END, str(ticket))
      i = i + 1

for y in range(i):
    listEntry.bind("<Button-3>", lambda x: rightKey(x, listEntry))   

使用for循环,只有最后一个entry组件能正常复制里面的内容,其他的entry选中内容再点击右键复制,并不能复制该entry组件的内容。比如i=3
只有listEntry正常,listEntry,listEntry都不正常,而且在listEntry,listEntry点击粘贴,粘贴的内容出现在listEntry,
而不是listEntry,listEntry本身。
但是自己手动捆绑:
listEntry.bind("<Button-3>", lambda x: rightKey(x, listEntry))
listEntry.bind("<Button-3>", lambda x: rightKey(x, listEntry))
listEntry.bind("<Button-3>", lambda x: rightKey(x, listEntry))
这样的话,所有的entry组件都能正常的复制内容。请各位大神指点迷津,谢谢了!
                              
                              

ba21 发表于 2022-6-28 21:39:58

绑定事件这样看是没问题 。
提问把代码上全。

kerln888 发表于 2022-7-5 10:54:36

ba21 发表于 2022-6-28 21:39
绑定事件这样看是没问题 。
提问把代码上全。

不好意思啊,大神,代码来了,麻烦您帮看下,谢谢
import tkinter as tk
from tkinter import END

def cut(editor, event=None):
    editor.event_generate("<<Cut>>")

def copy(editor, event=None):
    editor.event_generate("<<Copy>>")

def paste(editor, event=None):
    editor.event_generate('<<Paste>>')

def rightKey(event, editor):
    menubar.delete(0, END)
    menubar.add_command(label='剪切', command=lambda: cut(editor))
    menubar.add_command(label='复制', command=lambda: copy(editor))
    menubar.add_command(label='粘贴', command=lambda: paste(editor))
    menubar.post(event.x_root, event.y_root)

finishWindow = tk.Tk()
selectScreenWidthFinish = finishWindow.winfo_screenwidth()
selectScreenHeightFinish = finishWindow.winfo_screenheight()
finishWindow.geometry('800x600+{}+{}'.format((selectScreenWidthFinish - 800) // 2,
                                             (selectScreenHeightFinish - 600) // 2))
finishWindow.config(bg='pink')
finishWindow.resizable(False, False)
menubar = tk.Menu(finishWindow, tearoff=False)

listEntry = []
for i in range(4):
    listEntry.append([])
    for j in range(4):
      finishEntryData = tk.Entry(finishWindow, width=28, fg='blue', justify='center')
      listEntry.append(finishEntryData)
      finishEntryData.grid(row=i, column=j)
      finishEntryData.insert(END, i*j)

for y in range(i+1):
    for z in range(j+1):
      listEntry.bind("<Button-3>", lambda x: rightKey(x, listEntry))

finishWindow.mainloop()

ba21 发表于 2022-7-5 22:08:45

kerln888 发表于 2022-7-5 10:54
不好意思啊,大神,代码来了,麻烦您帮看下,谢谢
import tkinter as tk
from tkinter import END


看了下,因listEntry调用的都是同一个函数rightKey, 又都是使用相同的变量给rightKey传值。所以只有最后一个entry起作用。这个有点麻烦,提高下悬赏,我看看。

kerln888 发表于 2022-7-6 08:13:30

ba21 发表于 2022-7-5 22:08
看了下,因listEntry调用的都是同一个函数rightKey, 又都是使用相同的变量给rightKey传值。所以只有最后 ...

最高就只能设置10个{:10_245:}

ba21 发表于 2022-7-6 18:17:45

kerln888 发表于 2022-7-6 08:13
最高就只能设置10个

办法是有的。自己在看看吧
页: [1]
查看完整版本: 用For循环,Entry无法剪切、复制数据