Wait for visibility before setting a grab. Fixes #946153.
diff --git a/Lib/lib-tk/FileDialog.py b/Lib/lib-tk/FileDialog.py
index 5e848da..b08d3a8 100644
--- a/Lib/lib-tk/FileDialog.py
+++ b/Lib/lib-tk/FileDialog.py
@@ -119,6 +119,7 @@
         self.set_selection(default)
         self.filter_command()
         self.selection.focus_set()
+        self.top.wait_visibility() # window needs to be visible for the grab
         self.top.grab_set()
         self.how = None
         self.master.mainloop()          # Exited by self.quit(how)
diff --git a/Lib/lib-tk/SimpleDialog.py b/Lib/lib-tk/SimpleDialog.py
index bb63a8d..cb08318 100644
--- a/Lib/lib-tk/SimpleDialog.py
+++ b/Lib/lib-tk/SimpleDialog.py
@@ -64,6 +64,7 @@
         widget.deiconify() # Become visible at the desired location
 
     def go(self):
+        self.root.wait_visibility()
         self.root.grab_set()
         self.root.mainloop()
         self.root.destroy()
diff --git a/Lib/lib-tk/tkSimpleDialog.py b/Lib/lib-tk/tkSimpleDialog.py
index 01709d8..4d11ce0 100644
--- a/Lib/lib-tk/tkSimpleDialog.py
+++ b/Lib/lib-tk/tkSimpleDialog.py
@@ -61,6 +61,7 @@
 
         self.buttonbox()
 
+        self.wait_visibility() # window needs to be visible for the grab
         self.grab_set()
 
         if not self.initial_focus: