Tkinter GUI的Python销毁和循环

时间:2019-08-21 23:57:58

标签: python python-3.x tkinter

我正在尝试创建一个循环的Tkinter GUI,这意味着它会被破坏并重新创建,或者它是否可以收集输入到其中的名称。我之前问了一个问题并得到了一个列表,但是,我更改了方法,现在想在同一窗口中循环,当我单击完成时,它将终止该窗口。希望您能理解,就像您输入数据时一样,在您按完按钮后,也给您时间来检查它。

from tkinter import *
window = Tk()
class Name:
    def __init__(self, window):
        window.title('Names to be processed please: ')
        frame1 = Frame(window)
        frame1.pack()
        label = Label(frame1, text = "Enter a name: ")
        self.name = StringVar()
        self.v2 = IntVar()
        entryname = Entry(frame1, text = self.name)
        btGetName = Button(frame1, text = 'Get Name', command = self.processButton)
        btFinished = Button(frame1, text = 'Finished',
                            command = self.processfinishedButton)
        btNotFinished = Checkbutton(frame1, text = 'Not Finished',
                                 variable = self.v2, command = self.unfinishedButton)
        label.grid(row = 1, column = 2)
        btGetName.grid(row = 1, column = 3)
        btFinished.grid(row = 2, column = 2)
        btNotFinished.grid(row = 2, column = 3)
        entryname.grid(row = 3, column = 1)
        window.mainloop()
    def processButton(self):
        global name_list
        name_list = []
        name = self.name.get()
        name_list.append(name)
        return name_list
    def processfinishedButton(self):
        global a
        a = 1
        return a
    def unfinishedButton(self):
        b = (1 if self.v2.get() == 1 else 0)
        return b
a = 0
c = Name(window)
while a != 1:
    Name(window)
    window.mainloop()
print(name_list)

我的问题是以下

Traceback (most recent call last)
<ipython-input-2-8b1e1b0bb9c1> in <module>
     37 c = Name(window)
     38 while a != 1:
---> 39     Name(window)
     40     window.mainloop()
     41 print(name_list)

<ipython-input-2-8b1e1b0bb9c1> in __init__(self, window)
      3 class Name:
      4     def __init__(self, window):
----> 5         window.title('Names to be processed please: ')
      6         frame1 = Frame(window)
      7         frame1.pack()

C:\ProgramData\Anaconda3\lib\tkinter\__init__.py in wm_title(self, string)
   1983     def wm_title(self, string=None):
   1984         """Set the title of this widget."""
-> 1985         return self.tk.call('wm', 'title', self._w, string)
   1986     title = wm_title
   1987     def wm_transient(self, master=None):

TclError: can't invoke "wm" command: application has been destroyed

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

当我尝试运行代码时,我没有遇到任何错误,但我也注意到该应用程序并未真正起作用。我重新编写了一些代码,以使您的应用程序按我认为的意图运行。我试图使所有变量名保持相同,以便您可以看到我对它们所做的事情。

from tkinter import *

global name_list
name_list = []

class Name(Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.create_window()

    def create_window(self):
        label = Label(self.master, text="Enter a name: ")
        self.entryname = Entry(self.master)
        btGetName = Button(self.master, text='Get Name', command=self.processButton)
        btFinished = Button(self.master, text='Finished', command=self.master.destroy)
        label.grid(row=1, column=2)
        btGetName.grid(row=1, column=3)
        btFinished.grid(row=2, column=2)
        self.entryname.grid(row=3, column=1)

    def processButton(self):
        name = self.entryname.get()
        name_list.append(str(name))
        self.entryname.delete(0, END)


window = Tk()
window.title('Names to be processed please: ')
app = Name(master=window)
app.mainloop()

print(name_list)

我希望这可以解决您的问题!

相关问题