簡體   English   中英

Tkinter的例子

[英]Tkinter by example

我正在學習Tkinter並Tkinter by example使用Tkinter by example這本書。 我試圖測試這本書的示例,但出了點問題。

import Tkinter as tk
class Todo(tk.Frame):
def __init__(self,tasks=None):
    tk.Frame.__init__(self,tasks)
    if not tasks:
        self.tasks=[]
    else:
        self.tasks=tasks
    self.tasks.title("To-Do App v1")
    self.tasks.geometry("300x400")
    todol=tk.Label(self,text="---Ado Items Here---",bg="lightgrey",fg="black",pady=10)
    self.tasks.append(todol)
    for task in self.tasks:
        task.pack(side=tk.TOP,file=tk.X)
    self.task_creat=tk.Text(self,height=3,bg="white",fg="black")
    self.task_creat.pack(side=tk.BOTTOM,fill=tk.X)
    self.task_creat.focus_set()
    self.bind("<Return>",self.add_task)
    self.colour_schemes=[{"bg":"lightgrey","fg":"black"},{"bg":"grey","fg":"white"}]
def add_task(self,event=None):
    task_text=self.task_creat.get(1.0,tk.END).strip()
    if len(task_text)>0:
        new_task = tk.Label(self,text=task_text,pady=10)
        _,task_style_choice=divmod(len(self.tasks),2)
        my_scheme_choice = self.colour_schemes[task_style_choice]
        new_task.configure(bg=my_scheme_choice["bg"])
        new_task.configure(fg=my_scheme_choice["fg"])
        new_task.pack(side=tk.TOP,fill=tk.X)
        tk.append(new_task)
    self.task_create.delete(1.0,tk.END)
if __name__=="__main__":
    todo=tk.Tk()
    app=Todo(todo)
    todo.mainloop()

引發錯誤:

    Traceback (most recent call last):

  File "<ipython-input-1-40cf89ea27bb>", line 1, in <module>
    runfile('E:/TKinter/tkinter_by_example/2_1.py', wdir='E:/TKinter/tkinter_by_example')

  File "D:\Anaconda\lib\site-packages\spyder\utils\site\sitecustomize.py", line 880, in runfile
    execfile(filename, namespace)

  File "D:\Anaconda\lib\site-packages\spyder\utils\site\sitecustomize.py", line 87, in execfile
    exec(compile(scripttext, filename, 'exec'), glob, loc)

  File "E:/TKinter/tkinter_by_example/2_1.py", line 39, in <module>
    app=Todo(todo)

  File "E:/TKinter/tkinter_by_example/2_1.py", line 18, in __init__
    self.tasks.append(todol)

  File "D:\Anaconda\lib\lib-tk\Tkinter.py", line 1904, in __getattr__
    return getattr(self.tk, attr)

AttributeError: append

self.tasks是列表還是Tk對象? 如果是列表,則此代碼將不起作用,因為列表沒有title()geometry()方法。 如果是Tk對象,則此代碼將不起作用,因為Tk對象沒有append()方法。

嘗試為tasks列表和父窗口對象使用單獨的參數。

其他雜項錯誤:

  • 別忘了pack()你的Todo對象
  • for循環中修復該file=tk.X錯字。
  • 在文本而不是框架上調用bind
  • new_task附加到self.tasks而不是tk
  • task_creat而不是task_create上調用delete

import Tkinter as tk
class Todo(tk.Frame):
    def __init__(self,parent,tasks=None):
        tk.Frame.__init__(self,parent)
        if not tasks:
            self.tasks=[]
        else:
            self.tasks=tasks
        parent.title("To-Do App v1")
        parent.geometry("300x400")
        todol=tk.Label(self,text="---Ado Items Here---",bg="lightgrey",fg="black",pady=10)
        self.tasks.append(todol)
        for task in self.tasks:
            task.pack(side=tk.TOP,fill=tk.X)
        self.task_creat=tk.Text(self,height=3,bg="white",fg="black")
        self.task_creat.pack(side=tk.BOTTOM,fill=tk.X)
        self.task_creat.focus_set()
        self.task_creat.bind("<Return>",self.add_task)
        self.colour_schemes=[{"bg":"lightgrey","fg":"black"},{"bg":"grey","fg":"white"}]
    def add_task(self,event=None):
        task_text=self.task_creat.get(1.0,tk.END).strip()
        if len(task_text)>0:
            new_task = tk.Label(self,text=task_text,pady=10)
            _,task_style_choice=divmod(len(self.tasks),2)
            my_scheme_choice = self.colour_schemes[task_style_choice]
            new_task.configure(bg=my_scheme_choice["bg"])
            new_task.configure(fg=my_scheme_choice["fg"])
            new_task.pack(side=tk.TOP,fill=tk.X)
            self.tasks.append(new_task)
        self.task_creat.delete(1.0,tk.END)

if __name__=="__main__":
    todo=tk.Tk()
    app=Todo(todo)
    app.pack()
    todo.mainloop()

結果:

在此處輸入圖片說明

import tkinter as tk
class Todo(tk.Tk):
def __init__(self, tasks=None):
    super().__init__()

    if not tasks:
        self.tasks = []
    else:
        self.tasks = tasks

    self.title("To-Do App v1")
    self.geometry("300x400")

    todo1 = tk.Label(self, text="--- Add Items Here ---", bg="lightgrey", fg="black", pady=10)

    self.tasks.append(todo1)

    for task in self.tasks:
        task.pack(side=tk.TOP, fill=tk.X)

    self.task_create = tk.Text(self, height=3, bg="white", fg="black")

    self.task_create.pack(side=tk.BOTTOM, fill=tk.X)
    self.task_create.focus_set()

    self.bind("<Return>", self.add_task)

    self.colour_schemes = [{"bg": "lightgrey", "fg": "black"}, {"bg": "grey", "fg": "white"}]

def add_task(self, event=None):
    task_text = self.task_create.get(1.0,tk.END).strip()

    if len(task_text) > 0:
        new_task = tk.Label(self, text=task_text, pady=10)

        _, task_style_choice = divmod(len(self.tasks), 2)

        my_scheme_choice = self.colour_schemes[task_style_choice]

        new_task.configure(bg=my_scheme_choice["bg"])
        new_task.configure(fg=my_scheme_choice["fg"])

        new_task.pack(side=tk.TOP, fill=tk.X)

        self.tasks.append(new_task)

    self.task_create.delete(1.0, tk.END)
if __name__ == "__main__":
    todo = Todo()
    todo.mainloop()

此代碼將為您提供所需的輸出,以將項目添加到Tkinter列表中。

使用python 3.x

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM