在标签Python3 Tkinter的显示列表框项目时,点击
问题描述:
我有这个列表框作为类的一部分:在标签Python3 Tkinter的显示列表框项目时,点击
def myListbox(self):
selection = Label(self, text="Please select Country").grid(row=0,column=0)
countries = Listbox(self, width = 20, height = 75)
countries.grid(row=0, column=1)
# I have a function that populates the country names from
# a text file and displays the names in the Listbox.
# I want to be able to select a country from the Listbox
# and have it displayed in a Label
country_display = Label(self, text = "").grid(row = 0, column = 9)
# this is where I'm not sure what code to use.
# my code is
countries.bind("<<ListboxSelect>>",country_display)
目前什么都不显示。我在这里错过了什么? 谢谢
答
首先,当您在窗口小部件上执行方法grid
时,它将返回None
。这意味着您的变量现在保存值None
,而不是对小部件的引用。 其次,方法bind
将函数绑定到事件。此功能尚未被调用。但是,在您的bind
中,您尝试将Label
(不是函数)分配给该事件;这根本不可能。 在下面的解决方案中,将为该事件分配一个函数,该函数将检索国家并设置标签。
from tkinter import *
countries_list = ["Netherlands",
"America",
"Sweden",
"England"]
class MyClass(Tk):
def myListbox(self):
# better to structure it this way. The method grid simply returns None
# which meant that the variable hold None
# Now, the variable selection holds the widget
selection = Label(self, text="Please select Country")
selection.grid(row=0,column=0)
countries = Listbox(self, width = 20, height = len(countries_list))
countries.grid(row=0, column=1)
for country in countries_list:
countries.insert(END, country)
country_display = Label(self, text = country, width = 15)
country_display.grid(row = 0, column = 9)
def get_country(*x):
# gets which country is selected, and changes
# the label accordingly
country = countries_list[countries.curselection()[0]]
country_display.config(text = country)
countries.bind("<<ListboxSelect>>", get_country)
app = MyClass()
app.myListbox()
编辑:获取更多信息Listbox
看到http://effbot.org/tkinterbook/listbox.htm (虽然我的感觉,你可能想使用一个Combobox
,如http://www.tkdocs.com/tutorial/widgets.html描述?)