Как мне скопировать содержимое строки списка в Tkinter, которую пользователь выбирает в буфер обмена windows - PullRequest
0 голосов
/ 20 марта 2020

Итак, я хочу создать список Tkinter Listbox, в котором, если пользователь щелкнет (желательно дважды щелкните) строку, содержимое этой строки будет скопировано в буфер обмена.

Вот пример кода того, что мне нужно Помощь с:

from tkinter import *

app = Tk()
def listbox_copy():
    app.clipboard_clear()
    app.clipboard_append(listbox[1])

listbox = Listbox(app)
list = ['string 1', 'string 2', 'string 3']
for c in list:
    listbox.insert(END,c)
listbox.place(relx=0.5, rely=0.55, anchor="center")
listbox.bind('<<ListboxSelect>>', lambda event: listbox_copy())

app.mainloop()

Прямо сейчас я получаю эту ошибку:

  File "C:\Users\elias\Desktop\test.py", line 14, in <lambda>
    listbox.bind('<<ListboxSelect>>', lambda event: listbox_copy())
  File "C:\Users\elias\Desktop\test.py", line 7, in listbox_copy
    app.clipboard_append(listbox[1])
  File "C:\Users\elias\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1489, in cget
    return self.tk.call(self._w, 'cget', '-' + key)
TypeError: can only concatenate str (not "int") to str

Спасибо за любую помощь.

1 Ответ

1 голос
/ 21 марта 2020

Вы должны получить выбранный пункт, используя listbox.get(ANCHOR) вместо listbox[1]. Если вы хотите скопировать выбранный элемент в буфер обмена, когда пользователь дважды щелкает элемент, связывайте <Double-Button-1> вместо <<ListboxSelect>>:

def listbox_copy(event):
    app.clipboard_clear()
    selected = listbox.get(ANCHOR)
    app.clipboard_append(selected)

...

listbox.bind('<Doubld-Button-1>', listbox_copy)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...