点击按钮显示列表书籍数量异常:count_books函数故障求助
问题:count_books函数无法正常显示书籍数量
我编写了count_books函数,期望每次有书籍保存到lists_of_saved_Books列表时计数加1,当计数达到10时弹出通知,并在Book_count_window文本框显示书籍总数。但修改后的函数无法正常显示数量,原始版本可以正常运行。
修改后有问题的count_books函数
def count_books(): count = 0 for i in lists_of_saved_Books: count += 1 if count == 10: Book_count_window.insert(1.0, f'{count}') tkinter.messagebox.showinfo("Notification", '10 books is a milestone to celebrate:D!') count +=1 else: Book_count_window.insert(1.0, f'{count}') count +=1
原始可正常运行的函数
def count_books(): count = 0 for i in lists_of_saved_Books: count += 1 Book_count_window.insert(1.0 ,f'{count}')
追加书籍的get_info函数代码
def get_info(): if len(Book1.get("1.0", "end-1c")) == 0 and len(Book2.get("1.0", "end-1c")) == 0 and len(Book3.get("1.0", "end-1c")) == 0 : Book1.insert(1.0, f'Pages: {sotrang.get(1.0, END)}') Book1.insert(1.0, f'Author:{Tacgia.get(1.0, END)}') Book1.insert(1.0, f'Genre: {tttheloai.get(1.0, END)}') Book1.insert(1.0, f'Book name: {tensach.get(1.0, END)}') lists.insert(1.0, f'Book name: {tensach.get(1.0, END)}') lists_of_saved_Books.append(tensach.get(1.0, END)) Book1.config(state = DISABLED) tkinter.messagebox.showinfo("Notification", 'Success!') elif len(Book1.get("1.0", "end-1c")) >= 1 and len(Book2.get("1.0", "end-1c")) >=1 and len(Book3.get("1.0", "end-1c")) >=1 : tkinter.messagebox.showinfo("Notification", ' Finish all the books bruh') elif len(Book1.get("1.0", "end-1c")) > 1 and len(Book2.get("1.0", "end-1c")) > 1 : Book3.insert(1.0, f'Pages: {sotrang.get(1.0, END)}') Book3.insert(1.0, f'Author:{Tacgia.get(1.0, END)}') Book3.insert(1.0, f'Genre: {tttheloai.get(1.0, END)}') Book3.insert(1.0, f'Book name: {tensach.get(1.0, END)}') lists.insert(1.0, f'Book name: {tensach.get(1.0, END)}') lists_of_saved_Books.append(tensach.get(1.0, END)) Book3.config(state=DISABLED) tkinter.messagebox.showinfo("Notification", 'Success!') elif len(Book1.get("1.0", "end-1c")) >= 1 and len(Book3.get("1.0", "end-1c")) >= 1: Book2.insert(1.0, f'Pages: {sotrang.get(1.0, END)}') Book2.insert(1.0, f'Author:{Tacgia.get(1.0, END)}') Book2.insert(1.0, f'Genre: {tttheloai.get(1.0, END)}') Book2.insert(1.0, f'Book name: {tensach.get(1.0, END)}') lists.insert(1.0, f'Book name: {tensach.get(1.0, END)}') lists_of_saved_Books.append(tensach.get(1.0, END)) Book2.config(state=DISABLED) tkinter.messagebox.showinfo("Notification", 'Success!') elif len(Book2.get("1.0", "end-1c")) >= 1 and len(Book3.get("1.0", "end-1c")) >= 1: Book1.insert(1.0, f'Pages: {sotrang.get(1.0, END)}') Book1.insert(1.0, f'Author:{Tacgia.get(1.0, END)}') Book1.insert(1.0, f'Genre: {tttheloai.get(1.0, END)}') Book1.insert(1.0, f'Book name: {tensach.get(1.0, END)}') lists.insert(1.0, f'Book name: {tensach.get(1.0, END)}') lists_of_saved_Books.append(tensach.get(1.0, END)) Book1.config(state=DISABLED) tkinter.messagebox.showinfo("Notification", 'Success!') elif len(Book1.get("1.0", "end-1c")) >= 1 and len(Book3.get("1.0", "end-1c")) == 0: Book2.insert(1.0, f'Pages: {sotrang.get(1.0, END)}') Book2.insert(1.0, f'Author:{Tacgia.get(1.0, END)}') Book2.insert(1.0, f'Genre: {tttheloai.get(1.0, END)}') Book2.insert(1.0, f'Book name: {tensach.get(1.0, END)}') lists.insert(1.0, f'Book name: {tensach.get(1.0, END)}') lists_of_saved_Books.append(tensach.get(1.0, END)) Book2.config(state=DISABLED) tkinter.messagebox.showinfo("Notification", 'Success!') elif len(Book1.get("1.0", "end-1c")) ==0 and len(Book2.get("1.0", "end-1c")) == 0 and len(Book3.get("1.0", "end-1c")) >= 1 : Book1.insert(1.0, f'Pages: {sotrang.get(1.0, END)}') Book1.insert(1.0, f'Author:{Tacgia.get(1.0, END)}') Book1.insert(1.0, f'Genre: {tttheloai.get(1.0, END)}') Book1.insert(1.0, f'Book name: {tensach.get(1.0, END)}') lists.insert(1.0, f'Book name: {tensach.get(1.0, END)}') lists_of_saved_Books.append(tensach.get(1.0, END)) Book1.config(state=DISABLED) tkinter.messagebox.showinfo("Notification", 'Success!') elif len(Book1.get("1.0", "end-1c")) ==0 and len(Book3.get("1.0", "end-1c")) == 0 and len(Book2.get("1.0", "end-1c")) >= 1 : Book1.insert(1.0, f'Pages: {sotrang.get(1.0, END)}') Book1.insert(1.0, f'Author:{Tacgia.get(1.0, END)}') Book1.insert(1.0, f'Genre: {tttheloai.get(1.0, END)}') Book1.insert(1.0, f'Book name: {tensach.get(1.0, END)}') lists.insert(1.0, f'Book name: {tensach.get(1.0, END)}') lists_of_saved_Books.append(tensach.get(1.0, END)) Book1.config(state=DISABLED) tkinter.messagebox.showinfo("Notification", 'Success!') elif len(Book2.get("1.0", "end-1c")) ==0 and len(Book3.get("1.0", "end-1c")) == 0 and len(Book1.get("1.0", "end-1c")) >= 1 : Book2.insert(1.0, f'Pages: {sotrang.get(1.0, END)}') Book2.insert(1.0, f'Author:{Tacgia.get(1.0, END)}') Book2.insert(1.0, f'Genre: {tttheloai.get(1.0, END)}') Book2.insert(1.0, f'Book name: {tensach.get(1.0, END)}') lists.insert(1.0, f'Book name: {tensach.get(1.0, END)}') lists_of_saved_Books.append(tensach.get(1.0, END)) Book2.config(state=DISABLED) tkinter.messagebox.showinfo("Notification", 'Success!') tensach.delete(1.0, END) tttheloai.delete(1.0, END) Tacgia.delete(1.0, END) sotrang.delete(1.0, END) lists_of_saved_Books = []
问题原因
修改后的count_books函数存在两个关键错误:
- 重复计数:循环中每遍历一个元素,
count会被累加两次(分支内先count +=1,分支末尾又count +=1),导致最终计数是列表实际长度的2倍,数值完全错误。 - 重复插入文本:循环过程中每次都向
Book_count_window插入内容,虽然用1.0位置会覆盖之前的内容,但因为计数错误,最终显示的数值也不对,而且频繁插入完全没有必要。
原始版本的逻辑是遍历完所有元素得到正确总数后再插入一次,所以能正常显示。
修复后的count_books函数
方案1:直接使用列表长度(更高效)
def count_books(): count = len(lists_of_saved_Books) # 先清空文本框原有内容,避免内容叠加 Book_count_window.delete(1.0, tkinter.END) Book_count_window.insert(1.0, f'{count}') # 达到10本时弹出通知 if count == 10: tkinter.messagebox.showinfo("Notification", '10 books is a milestone to celebrate:D!')
方案2:保留循环计数(符合最初思路)
def count_books(): count = 0 # 先清空文本框 Book_count_window.delete(1.0, tkinter.END) for _ in lists_of_saved_Books: count += 1 Book_count_window.insert(1.0, f'{count}') if count == 10: tkinter.messagebox.showinfo("Notification", '10 books is a milestone to celebrate:D!')
额外提示
在get_info函数的每个lists_of_saved_Books.append(...)语句之后,记得调用count_books(),这样每次添加书籍后,计数会实时更新显示。
内容的提问来源于stack exchange,提问作者CO BA KIET
相关产品推荐
相关产品推荐

