Python 在TKinter的列表框中显示某些信息

Python 在TKinter的列表框中显示某些信息,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,因此,我希望能够向Listbox对象添加元素,并以某种方式显示这些元素。假设我添加小写元素,但希望它们以大写形式显示,或者向列表框添加元组,并且只希望显示元组的第一个元素 在OptionMenu中,通过.add_命令()添加项目时,可以设置label属性,但Listbox没有此选项 我有什么办法可以这样做吗 例如: 我只想用小写字母显示城市,并让它包含onselect的更多信息,例如整个元组或字符串的原始外观 import tkinter as tk root = tk.Tk() root.ge

因此,我希望能够向Listbox对象添加元素,并以某种方式显示这些元素。假设我添加小写元素,但希望它们以大写形式显示,或者向列表框添加元组,并且只希望显示元组的第一个元素

在OptionMenu中,通过.add_命令()添加项目时,可以设置label属性,但Listbox没有此选项

我有什么办法可以这样做吗

例如: 我只想用小写字母显示城市,并让它包含onselect的更多信息,例如整个元组或字符串的原始外观

import tkinter as tk
root = tk.Tk()
root.geometry('{}x{}'.format(400, 400))

def onselect(event):
    w = event.widget
    if (w.curselection() == ()): return
    index = int(w.curselection()[0])
    value = w.get(index)
    print(value) # prints tuple on select

listbox = tk.Listbox(root)
listbox.bind('<<ListboxSelect>>', lambda event: onselect(event))
listbox.pack()


listContent = ((1, 'LONDON', 'A city in Great Britain'), 
                (2, 'NEW YORK', 'A city in USA'), 
                (3, 'PARIS', 'A city in France'))

# refresh listbox with content
listbox.delete(0,tk.END)
for item in listContent:
    listbox.insert(tk.END, item) # Sadly shows entire tuple in listbox

root.mainloop()

您的代码如下所示:

import tkinter as tk
root = tk.Tk()
root.geometry('{}x{}'.format(400, 400))

def onselect(event):
    value=listbox.get(listbox.curselection())
    for lst in listContent:
        if value in lst:
            break
    print(lst)

listbox = tk.Listbox(root)
listbox.bind('<<ListboxSelect>>', lambda event: onselect(event))
listbox.pack()


listContent = ((1, 'LONDON', 'A city in Great Britain'), 
                (2, 'NEW YORK', 'A city in USA'), 
                (3, 'PARIS', 'A city in France'))

# refresh listbox with content
listbox.delete(0,tk.END)
for item in listContent:
    listbox.insert(tk.END, item[1]) # Here Use item[1] for show Only the second element
root.mainloop()
将tkinter作为tk导入
root=tk.tk()
几何体(“{}x{}.”格式(400400))
def onselect(事件):
value=listbox.get(listbox.curselection())
对于listContent中的lst:
如果lst中的值为:
打破
打印(lst)
listbox=tk.listbox(根)
bind(“”,lambda事件:onselect(事件))
listbox.pack()
listContent=((1,‘伦敦’,‘英国的一座城市’),
(2,“纽约”,“美国的一个城市”),
(3,“巴黎”、“法国的一座城市”)
#使用内容刷新列表框
listbox.delete(0,tk.END)
对于listContent中的项目:
listbox.insert(tk.END,项[1])#此处使用项[1]仅显示第二个元素
root.mainloop()
您可以将列表内容从列表列表更改为字典,以最小化代码:

import tkinter as tk
root = tk.Tk()
root.geometry('{}x{}'.format(400, 400))

def onselect(event):
    value=listbox.get(listbox.curselection())
    print(value + ' : ' +listContent[value])

listbox = tk.Listbox(root)
listbox.bind('<<ListboxSelect>>', lambda event: onselect(event))
listbox.pack()

listContent = {'LONDON': 'A city in Great Britain', 
            'NEW YORK': 'A city in USA', 
            'PARIS': 'A city in France'}

listbox.delete(0,tk.END)
for item in listContent.keys():
    listbox.insert(tk.END, item) 
root.mainloop()
将tkinter作为tk导入
root=tk.tk()
几何体(“{}x{}.”格式(400400))
def onselect(事件):
value=listbox.get(listbox.curselection())
打印(值+':'+列表内容[值])
listbox=tk.listbox(根)
bind(“”,lambda事件:onselect(事件))
listbox.pack()
listContent={'LONDON':'英国的一座城市',
“纽约”:美国的一座城市,
“巴黎”:“法国的一座城市”
listbox.delete(0,tk.END)
对于listContent.keys()中的项:
列表框.插入(tk.END,项)
root.mainloop()

在此处发布最小化的代码,我们将为您提供帮助。在插入列表框之前,您可以执行任何操作。那么问题出在哪里?@Alchimie希望这足够了:D@acw1668我想使用列表框来反映对象,但它只包含名称。我可以使用名称作为映射到对象的键,但我更希望列表框控制它并允许重复。
def onselect(content):print(content)
Listbox.bind(“”,lambda:onselect(listContent[Listbox.curselection()[0]])
Listbox.insert(tk.END,item[1].lower())
。这是你想要的吗?
import tkinter as tk
root = tk.Tk()
root.geometry('{}x{}'.format(400, 400))

def onselect(event):
    value=listbox.get(listbox.curselection())
    print(value + ' : ' +listContent[value])

listbox = tk.Listbox(root)
listbox.bind('<<ListboxSelect>>', lambda event: onselect(event))
listbox.pack()

listContent = {'LONDON': 'A city in Great Britain', 
            'NEW YORK': 'A city in USA', 
            'PARIS': 'A city in France'}

listbox.delete(0,tk.END)
for item in listContent.keys():
    listbox.insert(tk.END, item) 
root.mainloop()