Dialog 对话框

Dialog 对话框

运行时的这一部分提供对原生对话框的调用,例如文件选择器和消息框。

Dialog 对话框 - 图1 JavaScript

JS 运行时当前不支持对话框。

OpenDirectoryDialog 打开选择目录对话框

打开一个对话框,提示用户选择目录。 可以使用 打开选择文件对话框参数选项 进行自定义。

Go: OpenDirectoryDialog(ctx context.Context, dialogOptions OpenDialogOptions) (string, error)

返回值: 所选目录(如果用户取消则为空白)或错误

OpenFileDialog 打开选择文件对话框

打开一个对话框,提示用户选择文件。 可以使用 打开选择文件对话框参数选项 进行自定义。

Go: OpenFileDialog(ctx context.Context, dialogOptions OpenDialogOptions) (string, error)

返回值: 所选文件(如果用户取消则为空白)或错误

OpenMultipleFilesDialog 打开选择多文件对话框

打开一个对话框,提示用户选择多个文件。 可以使用 打开选择文件对话框参数选项 进行自定义。

Go: OpenMultipleFilesDialog(ctx context.Context, dialogOptions OpenDialogOptions) ([]string, error)

返回值: 选定的文件(如果用户取消则为 nil)或错误

SaveFileDialog 保存文件对话框

打开一个对话框,提示用户选择文件名以进行保存。 可以使用 保存文件对话框参数选项 自定义。

Go: SaveFileDialog(ctx context.Context, dialogOptions SaveDialogOptions) (string, error)

返回值: 所选文件(如果用户取消则为空白)或错误

MessageDialog 消息对话框

使用消息对话框显示消息。 可以使用 消息对话框参数选项 进行自定义。

Go: MessageDialog(ctx context.Context, dialogOptions MessageDialogOptions) (string, error)

返回值: 所选按钮的文本或错误

参数选项

打开选择文件对话框参数选项

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| 文件过滤器列表| ✅| ✅| ✅  
ShowHiddenFiles| 显示系统隐藏的文件| | ✅| ✅  
CanCreateDirectories| 允许用户创建目录| | ✅|   
ResolvesAliases| 如果为 true,则返回文件而不是别名| | ✅|   
TreatPackagesAsDirectories| 允许导航到包| | ✅|   

### 保存文件对话框参数选项

type SaveDialogOptions struct { DefaultDirectory string DefaultFilename string Title string Filters []FileFilter ShowHiddenFiles bool CanCreateDirectories bool TreatPackagesAsDirectories bool } ``` 字段| 描述| Win| Mac| Lin
---|---|---|---|---
DefaultDirectory| 对话框打开时显示的目录| ✅| ✅| ✅
DefaultFilename| 默认文件名| ✅| ✅| ✅
Title| 对话框的标题| ✅| ✅| ✅
Filters| 文件过滤器列表| ✅| ✅| ✅
ShowHiddenFiles| 显示系统隐藏的文件| | ✅| ✅
CanCreateDirectories| 允许用户创建目录| | ✅|
TreatPackagesAsDirectories| 允许导航到包| | ✅|

消息对话框参数选项

type MessageDialogOptions struct {
    Type          DialogType
    Title         string
    Message       string
    Buttons       []string
    DefaultButton string
    CancelButton  string
}
``` 字段| 描述| Win| Mac| Lin  
---|---|---|---|---  
类型| 消息对话框的类型,例如问题、信息…| ✅| ✅| ✅  
Title| 对话框的标题| ✅| ✅| ✅  
Message| 向用户显示的消息| ✅| ✅| ✅  
Buttons| 按钮标题列表| | ✅|   
DefaultButton| 带有此文本的按钮应被视为默认按钮。 必定 `return`。| ✅*| ✅|   
CancelButton| 带有此文本的按钮应被视为取消。 必定 `escape`| | ✅|   

#### Windows

Windows 具有标准对话框类型,其中的按钮不可自定义。 返回的值将是以下之一:”Ok”、”Cancel”、”Abort”、”Retry”、”Ignore”、”Yes”、”No”、”Try Again”或”Continue”。

对于问题对话框,默认按钮是 “是”,取消按钮是 “否”。 可以通过将 `默认按钮` 值设置为 `"否"` 来改变这一点。

示例:

result, err := runtime.MessageDialog(a.ctx, runtime.MessageDialogOptions{
    Type:          runtime.QuestionDialog,
    Title:         "Question",
    Message:       "Do you want to continue?",
    DefaultButton: "No",
})

#### Linux

Linux 有标准的对话框类型,其中的按钮是不可定制的。 返回的值将是以下之一:“Ok”、“Cancel”、“Yes”、“No”

#### Mac

Mac 上的消息对话框最多可以指定 4 个按钮。 如果没有 `DefaultButton` 或 `CancelButton` 给出,第一个按钮被认为是默认的并绑定到 `return` 键。

对于以下代码:

selection, err := runtime.MessageDialog(b.ctx, runtime.MessageDialogOptions{ Title: "It's your turn!", Message: "Select a number", Buttons: []string{"one", "two", "three", "four"}, })


第一个按钮显示为默认值:

![Dialog 对话框 - 图2](https://static.bookstack.cn/projects/wails-2.10-zh/fd60088cf9bb13aa7d980c9f61ae9484.png) 

如果我们指定 `DefaultButton` 为“two”:

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”。

![Dialog 对话框 - 图3](https://static.bookstack.cn/projects/wails-2.10-zh/17c454b75d9a4b9f6ff87146a25bacdb.webp) 

如果我们现在指定`CancelButton`为“three”:

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”:

![Dialog 对话框 - 图4](https://static.bookstack.cn/projects/wails-2.10-zh/6ad016fb7302a5f0735fc4256de6bca3.png)

#### 对话框类型

const ( InfoDialog DialogType = "info" WarningDialog DialogType = "warning" ErrorDialog DialogType = "error" QuestionDialog DialogType = "question" )


### 文件过滤

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 将在对话框中显示为一个单独的条目:

![Dialog 对话框 - 图5](https://static.bookstack.cn/projects/wails-2.10-zh/b1bb0c91d703f4d7d84a4dbde55a9e49.png)

#### Linux

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

![Dialog 对话框 - 图6](https://static.bookstack.cn/projects/wails-2.10-zh/cc7a88f9fe03c6b1b322b0c508b50400.webp)

#### Mac

Mac 对话框只有一组模式来过滤文件的概念。 如果提供了多个 FileFilters,Wails 将使用所有定义的模式。

示例:

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 作为过滤器打开文件对话框。