我有一个python程序,我在其中创建了一些自定义模式窗口,它们是顶级tkinter窗口的子窗口。下面是这样一个窗口的一个例子,但我有其他更复杂的窗口。我想做什么,但无法确定如何,在某个地方,我称之为等待响应。我尝试过类似下面的内容,但无法创建窗口
modal = ModalWindow(tk.Tk(), 'Title', 'Text')
while modal.choice is None:
pass
if modal.choice == 'Yes':
# Do Something
处理此类事情的适当方法是什么?
自定义模态窗口示例
class ModalWindow(object):
def __init__(self, root, title, text):
self.choice = None
# Setup the window
self.modalWindow = tk.Toplevel(root)
self.modalWindow.title(title)
self.modalWindow.resizable(False, False)
# Setup the widgets in the window
label = ttk.Label(self.modalWindow, text = text, font = '-size 10')
label.grid(row = 0, column = 0, columnspan = 2, padx = 2, pady = 2)
but = ttk.Button(self.modalWindow, text = 'Yes', command = self.choiceYes)
but.grid(row = 1, column = 0, sticky = 'nsew', padx = 2, pady = 5)
but = ttk.Button(self.modalWindow, text = 'No', command = self.choiceNo)
but.grid(row = 1, column = 1, sticky = 'nsew', padx = 2, pady = 5)
self.modalWindow.rowconfigure(1, minsize = 40)
def choiceYes(self):
self.choice = 'Yes'
self.modalWindow.destroy()
def choiceNo(self):
self.choice = 'No'
self.modalWindow.destroy()
答案 0 :(得分:1)
经过进一步的挖掘,我找到了自己的答案。以下是我想要的。函数wait_window
接受tkinter窗口并暂停,直到该窗口关闭。
root = tk.Tk()
modal = ModalWindow(root, 'Title', 'Text')
root.wait_window(modal.modalWindow)
if modal.choice == 'Yes':
# Do Something
答案 1 :(得分:0)
我在这里缺少一些基本的东西。如果窗口是应用程序模式,那么您将被迫等待:没有任何程序化要做。如果你正在尝试等待属于另一个应用程序的窗口中发生的事件,除非你编写一些棘手的OLE代码(我在这里假设Windows,因为UNIX做事的方式永远不会导致前夕考虑)这样的解决方案组件)。