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

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

在按鈕上制作新標簽時出現問題 tkinter

在按鈕上制作新標簽時出現問題 tkinter

慕雪6442864 2023-07-05 11:11:37
   import tkinter as tkroot = tk.Tk()root.title("To Do")root.geometry("500x750")root.resizable(False, False)class App:    def __init__(self, window):        #Button font        self.buttonFont = ("Courier", 13, "normal")        #Header        self.header = tk.Label(text = "To Do List\n", font = ("Helvetica", 26, "bold"))        self.header.grid()        #Add item button        self.addButton = tk.Button(text = "Add Item", font = self.buttonFont, bg = "green", command = self.OpenAddItem)        self.addButton.grid(row = 1, column = 0, )        #Del item button        self.delButton = tk.Button(text = "Delete Item", font = self.buttonFont, bg = "red")        self.delButton.grid(row = 1, column = 1, )        #items frame and stuff        self.itemsframe = tk.Frame()        self.itemsframe.grid(row = 2)        self.item = tk.Label(self.itemsframe, font = ("Helvetica", 11, "normal"))    def OpenAddItem(self):        #COnfiguring prompt win        self.addPromptWin = tk.Toplevel(root)        self.addPromptWin.title("Prompt")        self.addPromptWin.geometry("375x100")        self.addPromptWin.resizable(False,False)        #Entry label        self.entryLabel = tk.Label(self.addPromptWin,text = "Enter item name:", font = ("Courier", 11, "normal"))        self.entryLabel.grid(sticky = tk.E)        #Adding entry         self.entry = tk.Entry(self.addPromptWin, font = ("Courier", 11, "normal"))        self.entry.grid(row = 0, column = 1)        self.entry.bind("<Return>", lambda e: self.AddItem())        #Add new item button        self.addNewItemButton = tk.Button(self.addPromptWin, text = "Add", font = self.buttonFont, bg = "green", command = self.AddItem)        self.addNewItemButton.grid(row = 1, sticky = tk.W)大家好,我的 tkinter gui 程序有問題。當我調用 addItem 函數時,它不是每次都創建一個新標簽,而是替換當前標簽。任何幫助將非常感激!
查看完整描述

1 回答

?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

你創建了一個Label命名文件self.item,然后不斷地覆蓋它,期望它神奇地成為一個新的Label. 修復方法很簡單~不要創建self.item. 相反,創建一個列表并Labels根據需要將新內容推送到其中。這為您的刪除方法奠定了基礎,因為您可以解壓縮緩存中的所有內容,刪除所需的項目并重新打包緩存中剩余的所有內容。我的例子在重要的地方進行了評論。我沒有給你寫刪除方法。


import tkinter as tk


root = tk.Tk()

root.title("To Do")

root.geometry("500x750")

root.resizable(False, False)


class App:

    def __init__(self, window):

        #Button font

        self.buttonFont = ("Courier", 13, "normal")

        #Header

        self.header = tk.Label(text = "To Do List\n", font = ("Helvetica", 26, "bold"))

        self.header.grid()

        #Add item button

        self.addButton = tk.Button(text = "Add Item", font = self.buttonFont, bg = "green", command = self.OpenAddItem)

        self.addButton.grid(row = 1, column = 0, )

        #Del item button

        self.delButton = tk.Button(text = "Delete Item", font = self.buttonFont, bg = "red")

        self.delButton.grid(row = 1, column = 1, )

        #items frame and stuff

        self.itemsframe = tk.Frame()

        self.itemsframe.grid(row = 2)

        

        ''' you just keep overwriting this '''

        #self.item = tk.Label(self.itemsframe, font = ("Helvetica", 11, "normal"))

        

        #start a cache instead

        self.items = []

        

    def OpenAddItem(self):

        #COnfiguring prompt win

        self.addPromptWin = tk.Toplevel(root)

        self.addPromptWin.title("Prompt")

        self.addPromptWin.geometry("375x100")

        self.addPromptWin.resizable(False,False)

        #Entry label

        self.entryLabel = tk.Label(self.addPromptWin,text = "Enter item name:", font = ("Courier", 11, "normal"))

        self.entryLabel.grid(sticky = tk.E)

        #Adding entry 

        self.entry = tk.Entry(self.addPromptWin, font = ("Courier", 11, "normal"))

        self.entry.grid(row = 0, column = 1)

        self.entry.bind("<Return>", lambda e: self.AddItem())

        #Add new item button

        self.addNewItemButton = tk.Button(self.addPromptWin, text = "Add", font = self.buttonFont, bg = "green", command = self.AddItem)

        self.addNewItemButton.grid(row = 1, sticky = tk.W)

        

    def AddItem(self):

        self.entryValue = self.entry.get()

        

        '''

            you can keep configuring and repacking this for infinity

            it's not going to change the fact that it's the same label every time

        '''

        #self.item.config(text = f"1.  {self.entryValue}")

        #self.item.pack()

        

        #append a new label to the cache instead

        self.items.append(tk.Label(self.itemsframe, font = ("Helvetica", 11, "normal"), anchor='w'))

        

        #config and pack the last item in the cache

        self.items[-1].config(text = f"{len(self.items)}.  {self.entryValue}",)

        self.items[-1].pack(anchor='w')

        

        self.addPromptWin.destroy()


app = App(root) 

root.mainloop()



查看完整回答
反對 回復 2023-07-05
  • 1 回答
  • 0 關注
  • 136 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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