Python:如何在主应用程序Windows之前创建对话框窗口

时间:2017-09-15 11:01:58

标签: python tkinter

序:

我有一个带有工作GUI的Python ControlGPIO代码(我们称之为MainGUI)。

我希望在运行MainGUI之前有一个对话框弹出窗口,用户可以在MainGUI中启用/禁用功能。 但是只有在关闭对话框弹出窗口后,MainGUI才会开始运行。

我的问题是:如何制作一个推迟MainGUI的弹出窗口,直到它关闭?

下面的代码 - boot_windows是我的对话框弹出窗口(其中所有启用/禁用复选框都是),但显然不会根据需要推迟App

root = Tk()
#output_gpioPins = [4,22,6,26]
#input_gpioPins = [3,21,5,27]
#ip = '192.168.2.112'

boot_windows = Toplevel(root)
text1 = ttk.Label(boot_windows, text="Hello World !!!")
text1.grid()

App = ContorlGPIOWindow(root, ip = '192.168.2.113', with_sf_bt=1, with_hw_bt=1, switch_names=['Light Kitchen','Light Room1', 'Window1', 'Window2'])

root.mainloop()

1 个答案:

答案 0 :(得分:1)

你无法做到你想要的。小部件存在于树状结构中。除根之外的所有窗口都需要根窗口。必须首先创建根窗口(这就是它被称为 root 窗口的原因)。

如果您不希望用户看到它,您可以隐藏它直到它准备好显示。

import tkinter as tk
root = tk.Tk()
root.withdraw()
boot_window = tk.Toplevel(...)
...

然后,当您准备好显示root.deiconify()时,可以致电wait_window

另一种常见的解决方案是使用根窗口进行对话或启动画面或其他任何操作,然后在准备就绪时将其内容替换为真实内容。

至于如何等待弹出窗口......根窗口有一个名为import Tkinter as tk class MainGUI(tk.Frame): def __init__(self, parent): tk.Frame.__init__(self, parent) label = tk.Label(self, text="Hello, world!") label.pack(fill="both", expand=True, padx=20, pady=20) class Popup(tk.Toplevel): def __init__(self, root): tk.Toplevel.__init__(self, root) label = tk.Label(self, text="Click to continue...") label.pack(fill="both", expand=True, padx=20, pady=20) button = tk.Button(self, text="OK", command=self.destroy) button.pack(side="bottom") if __name__ == "__main__": root = tk.Tk() root.withdraw() popup = Popup(root) root.wait_window(popup) main = MainGUI(root) main.pack(fill="both", expand=True) root.deiconify() root.mainloop() 的方法,该方法将进入事件循环,直到给定窗口被销毁后才返回。

以下是其使用示例:

Sub EX3_1_6MsgBoxFunction()
Dim Ans As VbMsgBoxResult

'Have the message box display the buttons Yes, No and Cancel
Ans = MsgBox("Are you awake ? ", vbQuestion + vbYesNoCancel)

Select Case Ans
    Case vbYes
        Range("A1").Value = "Hurray"
        Range("A2").Value = "Yes"
    Case vbNo
        Range("A1").Value = "ZZZZZZZZZZ"
        Range("A2").Value = "No"
    Case Else
        Range("A1").Value = ""
        Range("A2").Value = "Calcel"
End Select

End Sub