You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击按钮显示列表书籍数量异常: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函数存在两个关键错误:

  1. 重复计数:循环中每遍历一个元素,count会被累加两次(分支内先count +=1,分支末尾又count +=1),导致最终计数是列表实际长度的2倍,数值完全错误。
  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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 05:07:00