首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Tkinter更改粘贴命令

Tkinter更改粘贴命令
EN

Stack Overflow用户
提问于 2022-11-25 01:59:16
回答 1查看 33关注 0票数 0

我试图在我的程序上更改粘贴命令。当我们从excel中复制表值时,无论它是垂直的还是水平线,它都将转换为垂直条目列表。但问题是,当我只想将单个值粘贴到随机条目行时,它总是从第一行条目中打印值,而不是从我选择的条目行中打印值。是否也可以使用鼠标创建函数来选择所有条目?

这是我的密码:

代码语言:javascript
运行
复制
from tkinter import *

root=Tk()
d=[]
for i in range(4):
    e=Entry(root,)
    e.grid(row=i)
    d.append(e)

def paste(event):
    for entry in d:
        entry.delete(0,'end')
    data=root.clipboard_get().split()
    for entry,i in zip(d,data):
        if '\n':
            entry.insert(0, i.split('\n'))
            print(data)
        elif '\t':
            entry.insert(0, i.split('\t'))
            print(data)
    return 'break'

root.bind_all("<<Paste>>", paste)

root.mainloop()

你能帮我解决这个问题吗?

谢谢你!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-25 02:19:02

这是因为for循环总是从第一个输入框开始。您需要在条目列表d中找到所选条目的索引,并粘贴剪贴板数据,从它开始:

代码语言:javascript
运行
复制
def paste(event):
    try:
        # get selected entry
        w = root.focus_get()
        # get the index of the selected entry in the entry list
        idx = d.index(w)
        # get the data from clipboard and split them into list
        data = root.clipboard_get()#.rstrip() # strip the trailing '\n'
        #print(repr(data)) # for debug purpose
        if '\t' in data:
            data = data.split('\t')
        elif '\n' in data:
            data = data.split('\n')
        # paste the data starts from the selected entry
        for entry, txt in zip(d[idx:], data):
            entry.delete(0, 'end')
            entry.insert('end', txt)
        return 'break'
    except Exception as ex:
        # something wrong, like no entry is selected
        print(ex)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74567678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档