Как переместить элемент между двумя списками с помощью Dynami c BTN и списком с помощью Tkinter? - PullRequest
0 голосов
/ 28 февраля 2020

Я зашел в тупик в своих знаниях GUI и знаниях Tkinter.

Вопрос:

Я хочу перемещать элементы между списками в виде «динамик c» way.

Я в своей функции Create_Widget() определил несколько списков вроде этого. В этом случае 5.

for lbIdx in range(1:6):
    self.listbox[lbIdx] = tk.Listbox(self.center, selectmode='multiple', height=25, 
                                     width=40, exportselection=0)

Я также создал несколько кнопок, которые появляются между списками:

# dynamic buttons
for btn_rID in range(1,6):
    self.btn_right[btn_rID] = tk.Button(self.center, text = '>>', 
                                        command=lambda i=btn_rID: self.move_item_right(i))

for btn_lID in range(1,6):
    self.btn_left[btn_lID] = tk.Button(self.center, text = '<<', 
                                       command= lambda i=btn_lID: self.move_item_left(i))

Кнопки используют аналогичные функции move_item_right() и move_item_left() .

Проблема возникает, когда я хочу переместиться вправо или влево со следующим кодом:

def move_item_right(self, btn_ID):
    # btn_ID holds the information of which button_idx was pressed
    idxToMove = self.listbox[btn_ID].curselection()
    itemToMove = self.listbox[btn_ID].selection_get()
    self.listbox[btn_ID+1].insert(idxToMove,itemToMove)
    self.listbox[btn_ID].delete(idxToMove)

Я получаю эту ошибку:

File "C:\Python38\lib\tkinter\__init__.py", line 968, in selection_get
    return self.tk.call(('selection', 'get') + self._options(kw))
_tkinter.TclError: PRIMARY selection doesn't exist or form "STRING" not defined

До этого все работало хорошо Я начал использовать динамические определения кнопок. Но потом я должен был написать одну функцию для каждого вызова кнопки.

Может кто-нибудь интерпретировать эту странную ошибку? Когда я использую отладчик, отладчик входит в определение кнопки после

itemToMove = self.listbox[btn_ID].selection_get()

1 Ответ

0 голосов
/ 28 февраля 2020

Я сам реализовал ошибку с опечаткой exportselection=0 в определении списка.

Без этого она хорошо работает.

# solution
for lbIdx in range(1:6):
    self.listbox[lbIdx] = tk.Listbox(self.center, selectmode='multiple', height=25, 
                                     width=40)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...