--- sidebar_position: 5 --- # 对话框 ## 概述 运行时的这一部分提供对原生对话框的调用,例如文件选择器和消息框。 :::info Javascript JS 运行时当前不支持对话框。 ::: ### 打开选择目录对话框 打开一个对话框,提示用户选择目录。 可以使用 [打开选择文件对话框参数选项](#打开选择文件对话框参数选项)进行自定义。 Go 方法签名: `OpenDirectoryDialog(ctx context.Context, dialogOptions OpenDialogOptions) (string, error)` 返回值: 所选目录(如果用户取消则为空白)或错误 ### 打开选择文件对话框 打开一个对话框,提示用户选择文件。 可以使用 [打开选择文件对话框参数选项](#打开选择文件对话框参数选项)进行自定义。 Go 方法签名: `OpenFileDialog(ctx context.Context, dialogOptions OpenDialogOptions) (string, error)` 返回值: 所选文件(如果用户取消则为空白)或错误 ### 打开选择多个文件对话框 打开一个对话框,提示用户选择多个文件。 可以使用 [打开选择文件对话框参数选项](#打开选择文件对话框参数选项)进行自定义。 Go 方法签名: `OpenMultipleFilesDialog(ctx context.Context, dialogOptions OpenDialogOptions) ([]string, error)` 返回值: 选定的文件(如果用户取消则为零)或错误 ### 保存文件对话框 打开一个对话框,提示用户选择文件名以进行保存。 可以使用[保存文件对话框参数选项](#保存文件对话框参数选项)自定义。 Go 方法签名: `SaveFileDialog(ctx context.Context, dialogOptions SaveDialogOptions) (string, error)` 返回值: 所选文件(如果用户取消则为空白)或错误 ### 消息对话框 使用消息对话框显示消息。 可以使用[消息对话框参数选项](#消息对话框参数选项)进行自定义。 Go 方法签名: `MessageDialog(ctx context.Context, dialogOptions MessageDialogOptions) (string, error)` 返回值: 所选按钮的文本或错误 ## 参数选项 ### 打开选择文件对话框参数选项 ```go type OpenDialogOptions struct { DefaultDirectory string DefaultFilename string Title string Filters []FileFilter ShowHiddenFiles bool CanCreateDirectories bool ResolvesAliases bool TreatPackagesAsDirectories bool } ``` | 字段 | 描述 | Win | Mac | Lin | | -------------------------- | ------------------- | --- | --- | --- | | DefaultDirectory | 对话框打开时显示的目录 | ✅ | ✅ | ✅ | | DefaultFilename | 默认文件名 | ✅ | ✅ | ✅ | | Title | 对话框的标题 | ✅ | ✅ | ✅ | | [Filters](#filefilter) | 文件过滤器列表 | ✅ | ✅ | ✅ | | ShowHiddenFiles | 显示系统隐藏的文件 | | ✅ | ✅ | | CanCreateDirectories | 允许用户创建目录 | | ✅ | | | ResolvesAliases | 如果为 true,则返回文件而不是别名 | | ✅ | | | TreatPackagesAsDirectories | 允许导航到包 | | ✅ | | ### 保存文件对话框参数选项 ```go type SaveDialogOptions struct { DefaultDirectory string DefaultFilename string Title string Filters []FileFilter ShowHiddenFiles bool CanCreateDirectories bool TreatPackagesAsDirectories bool } ``` | 字段 | 描述 | Win | Mac | Lin | | -------------------------- | ----------- | --- | --- | --- | | DefaultDirectory | 对话框打开时显示的目录 | ✅ | ✅ | ✅ | | DefaultFilename | 默认文件名 | ✅ | ✅ | ✅ | | Title | 对话框的标题 | ✅ | ✅ | ✅ | | [Filters](#filefilter) | 文件过滤器列表 | ✅ | ✅ | ✅ | | ShowHiddenFiles | 显示系统隐藏的文件 | | ✅ | ✅ | | CanCreateDirectories | 允许用户创建目录 | | ✅ | | | TreatPackagesAsDirectories | 允许导航到包 | | ✅ | | ### 消息对话框参数选项 ```go type MessageDialogOptions struct { Type DialogType Title string Message string Buttons []string DefaultButton string CancelButton string } ``` | 字段 | 描述 | Win | Mac | Lin | | ------------- | ----------------------------------- | --- | --- | --- | | Type | 消息对话框的类型,例如问题、信息... | ✅ | ✅ | ✅ | | Title | 对话框的标题 | ✅ | ✅ | ✅ | | Message | 向用户显示的消息 | ✅ | ✅ | ✅ | | Buttons | 按钮标题列表 | | ✅ | | | DefaultButton | 带有此文本的按钮应被视为默认按钮。 Bound to `return` | | ✅ | | | CancelButton | 带有此文本的按钮应被视为取消。 Bound to `escape` | | ✅ | | #### Windows Windows 具有标准对话框类型,其中的按钮不可自定义。 返回的值将是以下之一:"Ok"、"Cancel"、"Abort"、"Retry"、"Ignore"、"Yes"、"No"、"Try Again"或"Continue" #### Linux Linux 有标准的对话框类型,其中的按钮是不可定制的。 返回的值将是以下之一:“Ok”、“Cancel”、“Yes”、“No” #### Mac Mac 上的消息对话框最多可以指定 4 个按钮。 如果没有`DefaultButton`或`CancelButton`给出,第一个按钮被认为是默认的并绑定到`return`键。 对于以下代码: ```go selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{ Title: "It's your turn!", Message: "Select a number", Buttons: []string{"one", "two", "three", "four"}, }) ``` 第一个按钮显示为默认值:

如果我们指定`DefaultButton`为“two”: ```go selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{ Title: "It's your turn!", Message: "Select a number", Buttons: []string{"one", "two", "three", "four"}, DefaultButton: "two", }) ``` 第二个按钮显示为默认值。 当 `return` 被按下时,则返回数值“two”。

如果我们现在指定`CancelButton`为“three”: ```go selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{ Title: "It's your turn!", Message: "Select a number", Buttons: []string{"one", "two", "three", "four"}, DefaultButton: "two", CancelButton: "three", }) ``` 带有“three”的按钮显示在对话框的底部。 当`escape`被按下时,则返回值“three”:



#### 对话框类型 ```go const ( InfoDialog DialogType = "info" WarningDialog DialogType = "warning" ErrorDialog DialogType = "error" QuestionDialog DialogType = "question" ) ``` ### 文件过滤 ```go type FileFilter struct { DisplayName string // Filter information EG: "Image Files (*.jpg, *.png)" Pattern string // semi-colon separated list of extensions, EG: "*.jpg;*.png" } ``` #### Windows Windows 允许您在对话框中使用多个文件过滤器。 每个 FileFilter 将在对话框中显示为一个单独的条目:



#### Linux Linux 允许您在对话框中使用多个文件过滤器。 每个 FileFilter 将在对话框中显示为一个单独的条目:



#### Mac Mac 对话框只有一组模式来过滤文件的概念。 如果提供了多个 FileFilters,Wails 将使用所有定义的模式。 示例: ```go selection, err := runtime.OpenFileDialog(b.ctx, runtime.OpenDialogOptions{ Title: "Select File", Filters: []runtime.FileFilter{ { DisplayName: "Images (*.png;*.jpg)", Pattern: "*.png;*.jpg", }, { DisplayName: "Videos (*.mov;*.mp4)", Pattern: "*.mov;*.mp4", }, }, }) ``` 这将导致使用`*.png,*.jpg,*.mov,*.mp4`作为过滤器打开文件对话框。