Почему предоставление аргумента initialfile для tkFileDialog.asksaveasfilename отменяет выбор элементов Listbox? - PullRequest
0 голосов
/ 19 октября 2019

Проблема

Когда я предоставляю ключевое слово initialfile для tkFileDialog.asksaveasfilename, все мои Listbox элементы не выбраны.

MCVE

Я использую Python2.7.15+ с Tkinter версии 8.6 под Ubuntu 18.04.3 LTS.

import Tkinter as tk
import tkFileDialog
import ttk

# set up a box with some selected elements
root = tk.Tk()
box = tk.Listbox(root, selectmode=tk.MULTIPLE)
for s in ('this', 'is a', 'minimal', 'example'):
    box.insert(tk.END, s)
box.selection_set(1)
box.selection_set(3)
box.grid()

# hitting this button does not reset the current selection in box
ttk.Button(root, text='no initialfile',
    command=tkFileDialog.asksaveasfilename).grid()

# hitting this button resets the current selection in box - why?
ttk.Button(root, text='with initialfile',
    command=lambda: tkFileDialog.asksaveasfilename(initialfile='XXX')).grid()

root.mainloop()

Результат

1 Ответ

1 голос
/ 19 октября 2019

Это связано с тем, что по умолчанию может быть выбран только один набор текста за раз. Это связано с тем, что виджеты tk экспортируют выделение в буфер обмена, и только один элемент может быть одновременно в буфере обмена.

Это можно предотвратить, установив exportselection в False в списке. удаление связи между выбором списка и буфером обмена.

box = tk.Listbox(root, selectmode=tk.MULTIPLE, exportselection=False)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...