简体   繁体   English

使用Tkinter在函数之间传递列表

[英]Passing List between Functions with Tkinter

I am making a To-Do List for fun and I'm having troubles with bringing lists to different functions. 我正在制作待办事项清单,但很麻烦,无法将清单用于其他功能。 The goal of the program is that the user presses the "New Task" button and inputs something and then the string is added to the list, then shown via Listbox. 该程序的目标是用户按下“新建任务”按钮并输入内容,然后将字符串添加到列表中,然后通过列表框显示。 Here is what I have so far. 这是我到目前为止所拥有的。

PS Ignore the DelTask function as that is still WIP PS忽略DelTask​​函数,因为它仍然是WIP

from Tkinter import *
import Tkinter
import tkMessageBox
import sys

count = 0

class ToDoList:

def __init__(self):

    #print testlist


    self._count = 0
    self.main_window = Tkinter.Tk()

    #size   
    self.main_window.minsize(1000,800)
    self.main_window.maxsize(1000,800)

    #frames
    self.title_frame = Tkinter.Frame(self.main_window)
    #self.side_frame = Tkinter.Frame(self.main_window)

    #labels
    self.title = Tkinter.Label(self.title_frame, text = 'To Do List', font = ("Purisa",30))
    self.title2 = Tkinter.Label(self.title_frame, text = 'By Kevin', font = ("Purisa",15))

    #buttons
    self.newtask_button = Tkinter.Button(self.main_window, text='New Task', command = self.NewTask, width=20)
    self.newtask_button.grid()

    self.deltask_button = Tkinter.Button(self.main_window, text='Delete Task', command = self.DelTask, width=20)
    self.deltask_button.grid()




    #execute
    self.title.pack(side='top')
    self.title2.pack(side='top')
    self.title_frame.pack(side='top')
    self.newtask_button.pack(padx=4, pady=4)
    self.deltask_button.pack(padx=1, pady=1)

    #list stuff
    listbox = Listbox(self.main_window, width=100, height = 100, font=('Fixed',20) )
    listbox.pack()


    #print testlist


    Tkinter.mainloop()

def NewTask(self):
    self.newtask_window = Tkinter.Tk()


    self.newtask_window.minsize(250,150)
    self.newtask_window.maxsize(250,150)

    #text
    self.task_label = Tkinter.Label(self.newtask_window, text='Enter Task.')
    self.task_label.pack()

    #entry
    self.task_entry = Tkinter.Entry(self.newtask_window, width=30)
    self.task_entry.pack()


    #button
    self.task_button = Tkinter.Button(self.newtask_window, text='Ok', command = self.NewTaskCount, width = 20)
    self.task_button.pack()


    Tkinter.mainloop()

def NewTaskCount(self):
    listbox = Listbox(self.main_window, width=100, height = 100, font=('Fixed',20) )
    listbox.pack()
    self._count += 1
    self.newtask_window.destroy()

def DelTask(self):
    tkMessageBox.showinfo('Title', 'Task Deleted')

 program = ToDoList()

You're using Tkinter incorrectly. 您使用的Tkinter错误。 You should always create exactly one instance of the Tk class and call mainloop exactly once during the life of your program. 您应该始终只创建Tk类的一个实例,并在程序生命mainloop仅一次调用mainloop If you want multiple windows, after creating the instance of Tk , any other windows need to be an instance of Toplevel . 如果要多个窗口,则在创建Tk实例后,其他所有窗口都必须是Toplevel的实例。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM