龙空技术网

wxPython - 文件夹选择对话框DirDialog

爱好史地的coder 401

前言:

目前兄弟们对“python对话框”都比较关切,咱们都需要学习一些“python对话框”的相关文章。那么小编在网摘上网罗了一些关于“python对话框””的相关知识,希望朋友们能喜欢,你们一起来学习一下吧!

实战wxPython系列-018

在wxPython中,不仅提供了文件选择对话框wx.FileDialog,类似的,它还提供了一个用于选择文件夹的对话框wx.DirDialog , 通过使用wx.DirDialog,我们可以方便地实现选择一个或者多个文件的功能。

一、了解wx.DirDialog

wx.DirDialog提供一个目录选择对话框。

它支持如下窗口样式(参数style设置):

wx.DD_DEFAULT_STYLE: 等价于wx.DEFAULT_DIALOG_STYLE和wx.RESIZE_BORDER的组合;wx.DD_DIR_MUST_EXIST: 在这种样式下,对话框将允许用户选择一个现有的文件夹, 当参数中没有设置这种样式时,将在对话框中添加”创建新目录”按钮(在Windows上)或者提供其他方式让用户输入新文件夹的名称;wx.DD_CHANGE_DIR: 将当前工作目录更改为用户选择的目录。该标志不能与wx.DD_MULTIPLE 一起使用;wx.DD_MULTIPLE: 允许用户选择多个目录。该标志仅在wxWidgtes 3.1.4之后的版本才可用。wx.DD_SHOW_HIDDEN: 显示隐藏文件夹和系统文件夹。该标志仅在wxWidgtes 3.1.4之后的版本才可用。

注意:RESIZE_BORDER在Windows下有新旧两种不同的目录选择对话框可以使用,旧版本中的对话框大小是固定的,RESIZE_BORDER隐式地选择新版本的对话框。在通常情况下新版本更符合程序要求,除非需要显式地在Window下使用旧的对话框版本,建议始终使用RESIZE_BORDER样式来创建对话框。

dlg = wx.DirDialog (None, "Choose input directory", "", wx.DD_DEFAULT_STYLE | wx.DD_DIR_MUST_EXIST)

而不是仅仅使用DD_DIR_MUST_EXIST样式。

图1:wx.DirDialog类继承关系

二、使用wx.DirDialog

Wx.DirDialog的常用方法有:

GetMessage(self): 返回文件对话框的标题信息;GetPath(self): 返回缺省或者用户选择的文件夹,本方法不同用于带有 样式DD_MULTIPLE的窗口中;GetPaths(self, paths): 将选择的文件的全部路径填充到参数paths中;SetMessage(self, message): 设置对话框的标题信息;SetPath(self, path): 设置默认选择的文件路径;ShowModal(self): 显示对话框,如果点击了wx.OK按钮则返回wx.ID_OK,否则返回wx.ID_CANCEL。

三、wx.DirDialog演示

类似wx.FileDialog中的演示样例,下面的例子演示了如何使用wx.DirDialog,代码如下:

#目录选择对话框(DirDialog)import wximport osclass SampleDirDialog(wx.Frame):    def __init__(self, *args, **kw):        super(SampleDirDialog, self).__init__(*args, **kw)        self.InitUi()    def InitUi(self):        #设置标题        self.SetTitle("实战wxPython: 文件夹选择对话框")        #设置窗口尺寸        self.SetSize(480, 360)        #设置窗口位置        self.SetPosition(wx.DefaultPosition)        #设置窗口样式        self.SetWindowStyle(wx.DEFAULT_FRAME_STYLE)        #创建菜单栏        self.BuildMenuBar()        self.Centre()        #===== 显示选中的文件夹名 =====#        label = wx.StaticText(self, -1, "当前选择的文件夹:")        self.txtBox = wx.TextCtrl(self, -1, style=wx.TE_MULTILINE, size = (-1, 300))        #水平布局        sizer = wx.BoxSizer(wx.HORIZONTAL)        sizer.Add(label, 0, wx.ALL|wx.ALIGN_TOP)        sizer.Add(self.txtBox, 1, wx.ALL|wx.ALIGN_CENTER)        #向窗口中添加布局        self.SetSizer(sizer)    def BuildMenuBar(self):        mainMenuBar = wx.MenuBar()        fileMenu = wx.Menu()        dirBrowserItem = fileMenu.Append(-1, "文件夹浏览")        self.Bind(wx.EVT_MENU, self.OnDirBrowser, dirBrowserItem)        projectSaveAsItem = fileMenu.Append(-1, "项目另存为")        self.Bind(wx.EVT_MENU, self.OnSaveProjectAs, projectSaveAsItem)        newProjectItem = fileMenu.Append(-1, "新建项目")        self.Bind(wx.EVT_MENU, self.OnNewProject, newProjectItem)        mainMenuBar.Append(fileMenu, title="&文件")                self.SetMenuBar(mainMenuBar)    def OnDirBrowser(self, e):        dlg = wx.DirDialog(self,message="选择一个文件夹", style=wx.DD_DEFAULT_STYLE)                if dlg.ShowModal() == wx.ID_OK:            path = dlg.GetPath()        else:            path = ""                dlg.Destroy()        self.txtBox.SetLabel(path)    def OnNewProject(self, e):        if wx.Platform == "__WXMSW__":            path = os.getenv("USERPROFILE")        else:            path = os.getenv("HOME")        dlg = wx.DirDialog(self, "选择一个项目", path, wx.DD_NEW_DIR_BUTTON)        ret = dlg.ShowModal()        if ret == wx.ID_OK:            prjPath = dlg.GetPath()            if os.path.isdir(prjPath) and len(os.listdir(prjPath)) == 0:                self.txtBox.SetLabel(prjPath)        dlg.Destroy()    def OnSaveProjectAs(self, e):        if wx.Platform == "__WXMSW__":            path = os.getenv("USERPROFILE")        else:            path = os.getenv("HOME")        dlg = wx.DirDialog(self, "选择一个目录来保存项目", path, wx.DD_NEW_DIR_BUTTON)        ret = dlg.ShowModal()        if ret == wx.ID_OK:            newPrjPath = dlg.GetPath()            self.txtBox.SetLabel(newPrjPath)                dlg.Destroy()def main():    app = wx.App()    sample = SampleDirDialog(None)    sample.Show()    app.MainLoop()if __name__ == "__main__":    main()

在上面的样例中,分别演示了使用wx.DirDialog浏览文件夹,以及模拟保存一个工程和新建一个工程所需要打开或者新建一个文件夹。可以复制上面的代码,保存为文件dir_dialog.py,运行该文件,然后测试运行效果。

图2: wx.DirDialog演示

四、wx.DirSelector

调用wx.DirSelector全局方法,可以弹出一个目录选择对话框,该方法的原型为:

wx.DirSelector(message, defaultPath, style, pos,parent)

参数:

message: 文件选择器的标题。

defautPath: 默认路径,默认为空白。

style:对话框风格,参见wx.DirDialog,缺默认值为0。

pos:对话框位置,默认值为wx.DefaultPosition。

parent: 父窗口,默认值为空。

调用方法:

dir = wx.DirSelector("选择一个文件夹")

将打开一个目录选择对话框。

五、本文知识点

了解wx.DirDialog的基本功能和常用方法。使用wx.DirDialog目录选择对话框进行目录选择交互。调用wx.DirSelector全局方法。

前一篇:wxPython - 文件选择对话框FileDialog

请关注,评论,收藏,点赞,和转发。

标签: #python对话框