鱼C论坛

 找回密码
 立即注册
查看: 2575|回复: 5

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

[复制链接]
发表于 2022-6-28 20:00:45 | 显示全部楼层 |阅读模式
10鱼币
本帖最后由 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[i].append(finishEntryData)
            # 输入框第i行第j列插入数据
            finishEntryData.grid(row=i, column=j)
            # 从上次存放的最后一个位置开始
            finishEntryData.insert(END, str(ticket[j]))
        i = i + 1

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

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-6-28 21:39:58 | 显示全部楼层
绑定事件这样看是没问题 。
提问把代码上全。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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[i].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[y][z].bind("<Button-3>", lambda x: rightKey(x, listEntry[y][z]))

finishWindow.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-5 22:08:45 | 显示全部楼层
kerln888 发表于 2022-7-5 10:54
不好意思啊,大神,代码来了,麻烦您帮看下,谢谢
import tkinter as tk
from tkinter import END

看了下,因listEntry调用的都是同一个函数rightKey, 又都是使用相同的变量给rightKey传值。所以只有最后一个entry起作用。这个有点麻烦,提高下悬赏,我看看。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

最高就只能设置10个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-7-6 18:17:45 | 显示全部楼层
kerln888 发表于 2022-7-6 08:13
最高就只能设置10个

办法是有的。自己在看看吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-17 16:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表