我想創建一個清除按鈕,它將洗掉樹視圖中的所有記錄,同時我試圖通過 Tkinter 改進我的 OOP。(因此,如果代碼中還有其他非最佳實踐;請您也提供建議)。
根據我通過谷歌搜索發現的資訊,我可以在樹視圖上使用 get_children 方法,檢索它們,然后逐個洗掉它們。
def delButton(self):
x = main.tree.get_children()
for item in x:
main.tree.delete(item)
但是,我不斷收到屬性錯誤:AttributeError:'NoneType' 物件沒有屬性'get_children'。這是我在課堂上參考的方式嗎?
import tkinter as tk
from tkinter import ttk,messagebox
gray = '#808080'
green = '#7FFF00'
black = '#000000'
filter_font = ('Arial',12,'bold')
search_font = ('Arial',10)
class News:
def __init__(self):
self.window = tk.Tk()
self.window.geometry("1000x500")
self.window.resizable(0,0)
self.quit_button = self.create_quit_button()
self.clear_button = self.create_clear_button()
self.tree_view = self.create_tree_view()
def create_tree_view(self):
self.tree = ttk.Treeview(self.window,columns=(1,2,3,4) , show= 'headings',height='12')
self.tree.grid(row=0, column=0, rowspan=6, columnspan=9, padx=10, pady=10)
self.tree.column(1,width=70)
self.tree.column(2,width=70)
self.tree.heading(1,text ='Hello',anchor='w')
self.tree.heading(2,text ='World',anchor='w')
self.tree.insert(parent='',index='end',iid=0,values = ['John','[email protected]'])
self.tree.insert(parent='',index='end',iid=1,values = ['John','[email protected]'])
self.tree.grid(row=0, column=0, rowspan=6, columnspan=9, padx=10, pady=10)
def create_clear_button(self):
self.clear_button = tk.Button(self.window,text='Clear',fg=green,bg = black,command = lambda : self.clear())
self.clear_button.grid(row=0,column=20)
def create_quit_button(self):
quit_button = tk.Button(self.window,text='Quit',fg=green,bg = black,command =lambda: self.quit())
quit_button.grid(row =4,column = 10)
def quit(self):
self.window.quit()
def run(self):
self.window.mainloop()
def clear(self):
for item in self.tree_view.get_children():
self.tree.delete(item)
return (self.tree)
if __name__ == '__main__':
news = News()
news.run()
uj5u.com熱心網友回復:
請注意,在里面clear(),你已經self.tree_view在 line中使用了for item in ...,而self.tree在 for 回圈塊中使用了:
def clear(self):
for item in self.tree_view.get_children(): # used self.tree_view
self.tree.delete(item) # used self.tree
return (self.tree)
self.tree_view是None因為它是create_tree_view()不回傳任何東西的結果:
self.tree_view = self.create_tree_view()
其實你不需要self.tree_view,用self.tree在clear():
def clear(self):
for item in self.tree.get_children(): # used self.tree instead
self.tree.delete(item)
#return (self.tree) # return here is useless as clear() is triggered by a button
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/430945.html
標籤:Python 哎呀 tkinter ttk ttkwidgets
