Windows和Mac上主机进程中运行的Python显示模式(Tk)对话框 我正在开发一个C++应用程序的Python插件。C++应用程序承载Python解释器。我想显示一个模式框,向用户提问。捕获:它应该是3个带有自定义文本的按钮。它还应在Windows和Mac上工作。对话框必须是模态的,阻止应用程序主窗口的输入,因为它在执行操作之前警告用户
对于Windows,我可以使用Windows和Mac上主机进程中运行的Python显示模式(Tk)对话框 我正在开发一个C++应用程序的Python插件。C++应用程序承载Python解释器。我想显示一个模式框,向用户提问。捕获:它应该是3个带有自定义文本的按钮。它还应在Windows和Mac上工作。对话框必须是模态的,阻止应用程序主窗口的输入,因为它在执行操作之前警告用户,python,windows,macos,dialog,modal-dialog,Python,Windows,Macos,Dialog,Modal Dialog,对于Windows,我可以使用MessageBoxW()和一些Windows API技巧来解决我的问题,但我不确定如何为Mac做到这一点。我认为跨平台解决方案更可取,因此我目前正在考虑使用Tk来实现这一点 我找到了()。它显示一个对话框,但它不是模态的 我这样称呼它: import pymsgbox pymsgbox.confirm(text='text', title='title', buttons=['1', '2', '3']) 有什么办法解决这个问题吗 \u buttonbox()函
MessageBoxW()
和一些Windows API技巧来解决我的问题,但我不确定如何为Mac做到这一点。我认为跨平台解决方案更可取,因此我目前正在考虑使用Tk来实现这一点
我找到了()。它显示一个对话框,但它不是模态的
我这样称呼它:
import pymsgbox
pymsgbox.confirm(text='text', title='title', buttons=['1', '2', '3'])
有什么办法解决这个问题吗
\u buttonbox()
函数接受一个root
参数,我认为这将使对话框成为模态。然而,我没有一个Tk框架来提供。我在想,如果我可以将Tk“附加”到主机应用程序的主窗口,我就可以解决这个问题
来自\u buttonbox()
的相关(我认为)片段:
我可以用我的插件添加库,但我不想用一些繁重的框架来调试一个简单的插件
if root:
root.withdraw()
boxRoot = tk.Toplevel(master=root)
boxRoot.withdraw()
else:
boxRoot = tk.Tk()
boxRoot.withdraw()
messageFrame = tk.Frame(master=boxRoot)
buttonsFrame = tk.Frame(master=boxRoot)
messageWidget = tk.Message(messageFrame, text=msg, width=400)
boxRoot.deiconify()
boxRoot.mainloop() # Blocks my thread but not the main window, as MessageBoxW() does.