python TKinter:Listbox population misunderstanding.感谢帮助

roejwanj  于 2023-06-20  发布在  Python
关注(0)|答案(1)|浏览(81)

我正在开发一个非常粗糙的窗口,以扩大我对某些TKinter小部件的理解,如组合框和比例。
我目前正在开发的小部件是一个简单的列表框,其中包含要访问的页面列表。我一直在试图理解使用 Stringvar 填充列表框。
我的代码基于TKDocs的这个片段:

choices = ["apple", "orange", "banana"]
choicesvar = StringVar(value=choices)

这是我的代码:

other_frames = ['Cameras', 'Tasks', 'Maintainance', 'Clock', 'Assistance', 'Tools']
StringVar = " "
O_F_var = StringVar(value=other_frames)

我在这一步上得到了错误,而且只有这一步,所以我显然误解了如何使用 stringvar 和/或给予 stringvar 赋予什么值。
我在TKDocs网站上读到,就像 Entry 一样,Listbox 也使用 StringVar。为了尝试和理解,我访问了 Entry 小部件的解释。在代码片段中,StringVar 的值是 nonetype
TKDocs代码片段:

username = StringVar()
name = ttk.Entry(parent, textvariable=username)

我试着为我的StringVar* 使用一个 *Nonetype值,我期望让列表框由列表值填充,因为我已经“使用StringVar作为中介”。
反而收到错误:

类型错误:“str”对象不可调用

然后,我试图找出为什么事情没有排队,可悲的是无济于事。
一个解释和/或资源,以帮助我理解将不胜感激。

rkkpypqq

rkkpypqq1#

StringVar是tkinter中的类。你不能只使用StringVar = " "就指望它能正常工作。您需要创建StringVar类的示例。
然而,在本例中,您希望为Listbox使用一个变量,而listbox适用于列表而不是字符串。如果你使用列表作为StringVar的值,tkinter会将列表转换为字符串,并破坏它表示列表的事实。
相反,当使用带有Listbox的变量时,可以使用Variable类,它将保留数据的基本类型。
示例:

import tkinter as tk

choices = ["apple", "orange", "banana"]

root = tk.Tk()
var = tk.Variable(value=choices)

lb = tk.Listbox(root, listvariable=var)
lb.pack(fill="both", expand=True)

root.mainloop()

相关问题