У меня есть приведенный ниже код, который создает простой список и позволяет пользователям выбирать элемент и перемещать его вверх или вниз по списку, тем самым реорганизуя список.
Проблема, с которой я сталкиваюсь сейчас, заключается в том, что каждый разнажмите «двигаться вверх» или «двигаться вниз», действие выполняется правильно, но курсор больше не остается выбранным.Мне нужно повторно выбрать элемент, чтобы снова выполнить функцию.
Я попытался настроить exportselection = False при настройке списка, но это не сработало.
import tkinter as tk
class SampleApp(tk.Tk):
def __init__(self, *args, **kwargs):
tk.Tk.__init__(self, *args, **kwargs)
self.wm_title("Animals")
self._frame = None
class AnimalPage(tk.Frame):
def __init__(self, master, controller):
tk.Frame.__init__(self, master)
self.master = master
self.controller = controller
self.config(relief='sunken', borderwidth=2)
self.pack(fill = "both", expand = False)
tk.Label(self, text="This is the Animal Configuration Page").pack()
self.animalList = ['Cat', 'Dog', 'Bear', 'Dolphin', 'Kangaroo']
self.animalString = tk.StringVar(value=self.animalList)
self.animalBox = tk.Listbox(self, listvariable=self.animalString,
height=25, width=50, borderwidth=2)
self.animalBox.pack()
moveUpButton = tk.Button(self, text="Move Up", command=lambda: self.moveup())
moveUpButton.pack()
moveDownButton = tk.Button(self, text="Move Down", command=lambda: self.movedown())
moveDownButton.pack()
def moveup(self, *args):
try:
self.idxs = self.animalBox.curselection()
if not self.idxs:
return
for pos in self.idxs:
if pos==0:
continue
text=self.animalBox.get(pos)
self.animalBox.delete(pos)
self.animalBox.insert(pos-1, text)
self.animalList.pop(pos)
self.animalList.insert(pos-1, text)
except:
pass
def movedown(self, *args):
try:
self.idxs = self.animalBox.curselection()
if not self.idxs:
return
for pos in self.idxs:
if pos==0:
continue
text=self.animalBox.get(pos)
self.animalBox.delete(pos)
self.animalBox.insert(pos+1, text)
self.animalList.pop(pos)
self.animalList.insert(pos+1, text)
except:
pass
if __name__ == "__main__":
app = SampleApp()
newFrame = AnimalPage(app, app)
app.geometry("1200x700")
app.mainloop()