【发布时间】:2021-07-15 20:59:38
【问题描述】:
我已经开始学习如何编码,目前正在学习 Python 的基础知识。我一直在尝试让一个小型待办事项列表应用程序工作并在我单击列表项时显示描述,但它出现“无属性描述”。有人可以告诉我我的代码中缺少什么吗?
from tkinter import *
from tkinter.font import BOLD
import tkinter as tk
class ToDoItem:
def __init__(self, name, description):
self.name= name
self.description = description
class ToDoListApp:
def __init__(self, root):
root.title("To Do List")
frame = Frame(root, borderwidth=2, relief=SUNKEN)
frame.grid(column=1,row=1, sticky= (N, E, S, W))
root.columnconfigure(1, weight=1)
root.rowconfigure(1, weight=1)
list_label= Label(frame, text='To Do Items')
list_label.grid(column=1,row=1, sticky=(S, W))
self.to_do_items = [
ToDoItem('cleaning','laundry,dishes,sweeping'),
ToDoItem('job','coding, dashing, bills'),
ToDoItem('self_care', 'bubble bath , manicure, sleep'),
]
self.to_do_names =StringVar(value= list(map(lambda x: x.name,self.to_do_items)))
items_list= Listbox(frame, listvariable=self.to_do_names)
items_list.bind('<<ListboxSelect>>',lambda s: self.select_item(items_list.curselection()))
items_list.grid(column=1,row=2, sticky= (W, E), rowspan=5)
self.selected_descriptions =StringVar()
selected_descriptions_label = Label(frame, textvariable=self.selected_descriptions, wraplength=200)
selected_descriptions_label.grid(column=1, row=7, sticky=(E, W))
#New ITem
new_item_label= Label(frame, text="new item")
new_item_label.grid(column=2,row=1, sticky=(S,W))
name_label= Label(frame, text="item name")
name_label.grid(column=2,row=2, sticky=(S,W))
self.name= StringVar()
name_entry=Entry(frame, textvariable=self.name)
name_entry.grid(column=2,row=3, sticky=(N,E,W))
#Description/Definition
description_label= Label(frame, text="item description")
description_label.grid(column=2,row=4, sticky=(S,W))
self.description=StringVar()
description_entry=Entry(frame, textvariable=self.description)
description_entry.grid(column=2,row=5, sticky=(N,E,W))
save_button= Button(frame, text= 'save', command=self.save_item)
save_button.grid(column=2,row=6, sticky=(E))
def save_item(self,):
name= self.name.get()
description =self.description.get()
new_item=ToDoItem(name,description)
self.to_do_items.append(new_item)
self.to_do_names.set(list(map(lambda x: x.name,self.to_do_items)))
def select_item(self, index):
selected_item =self.to_do_items[index[0]]
self.selected_descriptions.set(selected_item.descriptions)
root = Tk()
ToDoListApp(root)
root.mainloop()
【问题讨论】:
-
请发布完整的回溯。听起来
selected_item不是ToDoItem对象。
标签: python user-interface tkinter