import tkinter as tk
class MainWindow:
def __init__(self, master):
self.master = master
self.button_height = 2
self.button_width = 8
self.list_of_tasks = []
**#Other irrelevant code**
#Button for adding a new task to current tab
self.new_task = tk.Button(self.buttons_frame, bg="yellow", height=self.button_height, width=self.button_width*2,
text="New Task", command=self.create_new_task)
self.new_task.grid(row=1, column=0, columnspan=2, sticky="N"+"W"+"S"+"E")
#Frame for holding all tasks in currently selected tab
self.tasks_in_tab = tk.Frame(master, height=300, width=300)
self.tasks_in_tab.grid(row=2, rowspan=5, column=0, columnspan=5)
def create_new_task(self):
#Creates a new task
new_window = tk.Toplevel(self.master)
entry_window = Task_Entry(new_window)
entry_window.wait_window(entry_window)
task = tk.Button(self.tasks_in_tab, text=entry_window.test_entry)
self.list_of_tasks.append(task)
task.pack()
class Task_Entry:
#Window for entering data into a new window
def __init__(self, master):
self.master = master
self.test_entry_field = tk.Entry(self.master)
self.test_entry_field.pack()
self.test_entry = self.test_entry_field.get()
self.cancel_button = tk.Button(self.master, text="Cancel", command=self.exit_program)
self.cancel_button.pack()
def exit_program(self):
self.master.destroy()
root = tk.Tk()
gui = MainWindow(root)
root.mainloop()
我试图在我的代码中使用Tkinter的wait_window
函数,但我不确定如何在我希望实现它的上下文中正确使用它。
假设发生的是用户点击new_task
按钮,调用函数create_new_task
。然后,它会提示存储在类Task_Entry
下的新窗口,该窗口包含用于输入文本的Entry字段。一旦用户输入他们的输入Task_Entry
窗口终止,用户输入 - 在被调用的test_entry
窗口类的Task_Entry
字段下 - 应该被传递给新的按钮名为task
。
我很确定我应该使用wait_window()
冻结create_new_task
函数,直到用户提交了他们的输入,但我无法正确实现其实现。
此外,我认为我错误地从Task_Entry
下的entry_window
类get()
set()
和content:
EMPLOYEE:
ADDITIONALLANGUAGES:
ADDITIONALLANGUAGE:
LANGUAGE: "Spanish"
检索了用户的输入。任何澄清也会在那里提供巨大的帮助。
答案 0 :(得分:1)
替换:
entry_window.wait_window(entry_window)
使用:
entry_window.test_entry_field.wait_window(entry_window.test_entry_field)
因为wait_window
是 widget 类对象的方法,而entry_window
是Task_Entry
的对象,它甚至不从窗口小部件类继承。这意味着没有定义wait_window
方法。但是,它有一个属性test_entry_field
,它是一个小部件,因此有一个定义的wait_window
方法。
原样,你在代码中过早地使用get
,它会立即返回条目内的内容,在销毁条目之前应该将其移动到右边,例如在{{1}的回调中}按钮:
"Cancel"
使用def exit_program(self):
self.test_entry = self.test_entry_field.get()
self.master.destroy()
按钮时,代码应该按照您希望的方式工作:
"Cancel"
另请注意,您无法使用import tkinter as tk
class MainWindow:
def __init__(self, master):
self.master = master
self.button_height = 2
self.button_width = 8
self.list_of_tasks = []
#Other irrelevant code**
#Button for adding a new task to current tab
self.new_task = tk.Button(self.master, bg="yellow",
height=self.button_height,
width=self.button_width*2,
text="New Task",
command=self.create_new_task)
self.new_task.grid(row=1, column=0, columnspan=2,
sticky="N"+"W"+"S"+"E")
#Frame for holding all tasks in currently selected tab
self.tasks_in_tab = tk.Frame(master, height=300, width=300)
self.tasks_in_tab.grid(row=2, rowspan=5, column=0, columnspan=5)
def create_new_task(self):
#Creates a new task
new_window = tk.Toplevel(self.master)
entry_window = Task_Entry(new_window)
entry_window.test_entry_field.wait_window(entry_window.test_entry_field)
task = tk.Button(self.tasks_in_tab, text=entry_window.test_entry)
self.list_of_tasks.append(task)
task.pack()
class Task_Entry:
#Window for entering data into a new window
def __init__(self, master):
self.master = master
self.test_entry_field = tk.Entry(self.master)
self.test_entry_field.pack()
self.cancel_button = tk.Button(self.master, text="Cancel",
command=self.exit_program)
self.cancel_button.pack()
def exit_program(self):
self.test_entry = self.test_entry_field.get()
self.master.destroy()
root = tk.Tk()
gui = MainWindow(root)
root.mainloop()
作为输入字段,但是,您可以使用set
,或者您可以为条目指定variable class,然后能够使用insert
。