[英]Copy items from treeview tkinter
我的 tkinter 应用程序中有一个树视图,我想知道是否真的有可能,只需在用户右键单击时复制选定的字段。 如果没有,是否有任何其他小部件允许用户复制 GUI window 中显示的选定字段。
代码:
log = Toplevel(root)
log.title('View all Visitors')
log.focus_force()
# setup treeview
columns = (('ID', 80), ('S_ID', 80), ('S_NAME', 300), ('Title of the book', 500), ('Accession no. of
book', 80),
('Date Taken', 100), ('Due Date', 100), ('Date_Returned', 100), ('Status', 80))
tree = ttk.Treeview(log, height=20, columns=[
x[0] for x in columns], show='headings')
tree.grid(row=0, column=0, sticky='news')
# setup columns attributes
for col, width in columns:
tree.heading(col, text=col)
tree.column(col, width=width, anchor=tk.CENTER)
# fetch data
con = mysql.connect(host='localhost', user='root',
password='monkey123', database='library')
c = con.cursor()
sql_command_1 = 'SELECT * FROM borrow;'
c.execute(sql_command_1)
# populate data to treeview
for rec in c:
tree.insert('', 'end', value=rec)
# scrollbar
sb = tk.Scrollbar(log, orient=tk.VERTICAL, command=tree.yview)
sb.grid(row=0, column=1, sticky='ns')
tree.config(yscrollcommand=sb.set)
a = tree.item(tree.focus())['values']
btn = tk.Button(log, text='Close', command=out,
width=20, bd=2, fg='red',font=font_text)
btn.grid(row=2, column=0, columnspan=2, sticky=E+W)
提前致谢:)
您必须创建一个弹出菜单并将其绑定到 Button-3。 这是从我的一个项目中快速构建的示例
popup1 = tk.Menu(tree, tearoff=0)
popup1.add_command(
command=your_copy,
label="Copy")
def your_copy():
item = tree.selection()[0]
log.clipboard_clear()
log.clipboard_append(tree.item(item, option='text')
def popup_menu(event):
tree.identify_row(event.y)
popup1.post(event.x_root, event.y_root)
tree.bind('<Button-3>', popup_menu)
我遇到了同样的问题,并创建了一个非常模块化的 function。
import pyperclip
def copy_from_treeview(tree, event):
selection = tree.selection()
column = tree.identify_column(event.x)
column_no = int(column.replace("#", "")) - 1
copy_values = []
for each in selection:
try:
value = tree.item(each)["values"][column_no]
copy_values.append(str(value))
except:
pass
copy_string = "\n".join(copy_values)
pyperclip.copy(copy_string)
只需将 function 绑定到 ctrl + c:
tree.bind("<Control-Key-c>", lambda x: copy_from_treeview(tree, x))
您可以尝试获取选定的行,然后从那里开始工作:
import pyperclip
treeview.bind("<Control-Key-c>", copy_from_treeview)
def copy_from_treeview(treeview, _):
selections = treeview.selection() # get hold of selected rows
copied_string = ""
for row in selections:
values = treeview.item(row, 'values') # get values for each selected row
for item in values:
copied_string += f"{item} "
pyperclip.copy(copied_string)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.