用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
绑定事件这样看是没问题 。
提问把代码上全。
不好意思啊,大神,代码来了,麻烦您帮看下,谢谢
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() kerln888 发表于 2022-7-5 10:54
不好意思啊,大神,代码来了,麻烦您帮看下,谢谢
import tkinter as tk
from tkinter import END
看了下,因listEntry调用的都是同一个函数rightKey, 又都是使用相同的变量给rightKey传值。所以只有最后一个entry起作用。这个有点麻烦,提高下悬赏,我看看。 ba21 发表于 2022-7-5 22:08
看了下,因listEntry调用的都是同一个函数rightKey, 又都是使用相同的变量给rightKey传值。所以只有最后 ...
最高就只能设置10个{:10_245:} kerln888 发表于 2022-7-6 08:13
最高就只能设置10个
办法是有的。自己在看看吧
页:
[1]