亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 Tkinter 在 Python 中重置生成的小部件計數

使用 Tkinter 在 Python 中重置生成的小部件計數

慕村225694 2021-08-17 17:04:26
使用 Python 3.7 - 在 Pycharm 中工作我目前正在做一個項目,我不斷地生成新的小部件并刪除它們以顯示不同的東西,我遇到了一個相當煩人的問題,我似乎無法弄清楚,更不用說找到相關信息了。當一排框架中的頂部小部件(框架)被制作 255 次時它會崩潰。我想這與它如何以字節為單位存儲信息有關。編輯*我意識到我最初的解釋比它需要的要復雜,所以這里是一個簡化版本:from tkinter import *list = []for x in range(1):    e = Frame()    list.append(e)print(list) #Prints .!framelist.clear()print(list) #Prints [], the list is now emptyfor x in range(1):    e = Frame()    list.append(e)print(list) #Prints .!frame2, which is one step up from the previous one even the list started emptylist[0].destroy()list[0].forget()print(list) #.!frame2 is still therelist.clear()print(list) #list is now empty againfor x in range(1):    e = Frame()    list.append(e)print(list) #Prints .!frame3, and it still remembers.如您所見,它不斷添加到 .!frame 編號。我正在尋找的是一種防止它到達 .!frame255 的方法
查看完整描述

1 回答

?
翻翻過去那場雪

TA貢獻2065條經驗 獲得超14個贊

當一排框架中的頂部小部件(框架)被制作 255 次時它會崩潰。我想這與它如何以字節為單位存儲信息有關。


不,這與此無關。我認為您關于程序在數字達到 255時崩潰的斷言可能是錯誤的。很容易創建一個 tkinter 程序,即使這個數字達到數千,它也能繼續工作。如果您查看 tkinter 源代碼,您會發現它只是一個附加到字符串的普通整數。


您似乎誤解了list變量與存儲在其中的小部件之間的關系。清除列表不會破壞列表中的小部件。您必須單獨刪除每一個,或者銷毀它們的父級。在這種情況下,它們的父窗口是根窗口,因此這不是一個可行的解決方案。


如果要銷毀所有幀,請在清除列表之前使用一個小循環:


for frame in list:

    frame.destroy()

tkinter 分配給小部件的數字無關緊要。數字是多少并不重要,它可能反映也可能不反映實際存在的小部件數量。這是一個不重要的內部細節。


如果要查看實際存在多少個小部件,可以winfo_children在根窗口上調用。為此,您需要對根窗口的引用。最簡單和最好的方法是在代碼的開頭顯式創建根窗口:


root = Tk()

在腳本結束時,您可以打印出實際存在的所有窗口:


print("all windows:", root.winfo_children())

在您的示例代碼中,它正好顯示了兩個小部件,這是預期的。您創建一個小部件,然后創建第二個小部件,然后刪除第一個小部件,然后創建第三個小部件。


查看完整回答
反對 回復 2021-08-17
  • 1 回答
  • 0 關注
  • 196 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號