通过 Tkinter 中的 listvariable 修改列表框条目

buh*_*htz 4 tkinter python-3.x

我在教程中读到,我可以将数据从其中分离tkinter.Listbox到我自己的列表中。我在这里的例子中做到了这一点。但是我如何根据我自己的变量列表操纵列表框条目的顺序?

#!/usr/bin/env python3

from tkinter import *

root = Tk()
mylist = ['one', 'two', 'three']
var = StringVar(value=mylist)
box = Listbox(master=root, listvariable=var)
box.pack(fill=BOTH, expand=True)

# this need to affect the list
mylist.append('four')
mylist.remove('two')
mylist.insert(3, mylist.pop(1))

root.mainloop()
Run Code Online (Sandbox Code Playgroud)

这里的列表框(GUI 中)不受影响。

据我了解,有一种方法可以Listbox在修改数据列表时绝对自动刷新其内容。所以我不用碰Listbox。我只需要触摸里面的数据list().

有办法吗?

fur*_*ras 5

列表框get(),delete()insert()
您可以从中获得价值box,将其删除并将其放在新的位置。

或者您可以从中删除所有项目box并从中添加新项目mylist
我觉得这个方法比较通用。

box.delete(0, 'end')
for item in mylist:
    box.insert('end', item)
Run Code Online (Sandbox Code Playgroud)

因为你使用listvariable所以你可以直接替换列表var

var.set(mylist)
Run Code Online (Sandbox Code Playgroud)

完整代码

from tkinter import *

root = Tk()

mylist = ['one', 'two', 'three']

var = StringVar(value=mylist)
box = Listbox(master=root, listvariable=var)
box.pack(fill=BOTH, expand=True)

mylist.append('four')
mylist.remove('two')
mylist.insert(3, mylist.pop(1))

var.set(mylist)

root.mainloop()
Run Code Online (Sandbox Code Playgroud)