python listbox排序_python – 从tkinter.Listbox中提取项目列表
我編寫了以下tkinter腳本來了解如何將數(shù)據(jù)列表添加到tkinter.Listbox小部件中.我發(fā)現(xiàn)了兩種方法.
接下來,我想從tkinter.Listbox小部件中提取相同的列表.在4種不同的方法中,我只設(shè)法讓第4種方法(即e4)起作用.
如何使e1,e2和e3方法起作用?最終目標是獲取最初提供給tkinter.Listbox小部件的相同列表.
測試腳本:
import tkinter as tk # Python 3 tkinter modules
import tkinter.ttk as ttk
class App(ttk.Frame):
def __init__(self, parent, *args, **kwargs):
# 1. Initialise Frame
ttk.Frame.__init__(self, parent)
self.parent = parent
# Method1
name1 = ['Peter', 'Scotty', 'Walter', 'Scott', 'Mary']
self.lb1_values = tk.StringVar(value=name1)
self.listbox1 = tk.Listbox(self, listvariable=self.lb1_values)
# Method2
self.listbox2 = tk.Listbox(self)
name2 = ['Sarah', 'Sean', 'Mora', 'Mori', 'Mary']
for item in name2:
self.listbox2.insert(tk.END, item)
self.listbox1.grid(in_=self, row=0, column=0, sticky='nsew')
self.listbox2.grid(in_=self, row=0, column=1, sticky='nsew')
# Extract values from listbox and covert to a list
e1 = self.lb1_values.get()
print('e1 = ', e1)
print('type(e1) = ', type(e1))
e1 = e1.strip(',')
print('e1 = ', e1)
e2 = self.listbox1.cget('listvariable')
print('\ne2 = ', e2)
print('type(e2) = ', type(e2))
e2 = e2.split(',')
print('e2 = ', e2)
e3 = self.listbox2.cget('listvariable')
print('\ne3 = ', e3)
print('type(e3) = ', type(e3))
e4 = self.listbox2.get(0, tk.END)
print('\ne4 = ', e4)
print('type(e4) = ', type(e4))
e4 = list(e4)
print('e4 = ', e4)
if __name__ == '__main__':
root = tk.Tk()
root.title('App'), root.geometry('400x200')
app = App(root)
app.grid(row=0, column=0, sticky='nsew')
#root.mainloop()
輸出:
e1 = ('Peter', 'Scotty', 'Walter', 'Scott', 'Mary')
type(e1) =
e1 = ('Peter', 'Scotty', 'Walter', 'Scott', 'Mary')
e2 = PY_VAR0
type(e2) =
e2 = ['PY_VAR0']
e3 =
type(e3) =
e4 = ('Sarah', 'Sean', 'Mora', 'Mori', 'Mary')
type(e4) =
e4 = ['Sarah', 'Sean', 'Mora', 'Mori', 'Mary']
解決方法:
您不能將StringVar用作listvariable屬性的目標.正如您的代碼所示,這會導(dǎo)致列表轉(zhuǎn)換為字符串.
但是,你可以做的是使用tk.Variable的一個實例. Variable是StringVar的基類. get的基本實現(xiàn)不會將值強制轉(zhuǎn)換為字符串.
name1 = ['Peter', 'Scotty', 'Walter', 'Scott', 'Mary']
self.lb1_values = tk.Variable(value=name1)
self.listbox1 = tk.Listbox(self, listvariable=self.lb1_values)
...
e1 = self.lb1_values.get()
print('e1 = ', e1)
print('type(e1) = ', type(e1))
print('e1 = ', e1)
以上產(chǎn)生了這個輸出:
e1 = ('Peter', 'Scotty', 'Walter', 'Scott', 'Mary')
type(e1) =
e1 = ('Peter', 'Scotty', 'Walter', 'Scott', 'Mary')
對于e2和e3,你必須跳過額外的箍.遺憾的是,cget方法返回內(nèi)部變量名而不是對變量對象的引用.要按名稱獲取變量的值,您需要使用widget方法getvar.
例如:
e2 = self.listbox1.cget('listvariable')
print('\ne2 = ', e2)
print('type(e2) = ', type(e2))
print('e2 = ', self.getvar(e2))
以上產(chǎn)生了這個輸出:
e2 = PY_VAR0
type(e2) =
e2 = ('Peter', 'Scotty', 'Walter', 'Scott', 'Mary')
標簽:python,listbox,tkinter
來源: https://codeday.me/bug/20190607/1195248.html
總結(jié)
以上是生活随笔為你收集整理的python listbox排序_python – 从tkinter.Listbox中提取项目列表的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 双网卡上网冲突解决_【技术文章】局域网I
- 下一篇: mysql bigint转string_