我正在尝试创建一个循环的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
感谢您的帮助。
答案 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)
我希望这可以解决您的问题!