如何将多个文件的列表放入listctrl python

如何将多个文件的列表放入listctrl python,python,wxpython,listctrl,Python,Wxpython,Listctrl,根据链接,我试图编写一个代码,将文件添加到listctrl中。 但它不起作用 def OnButtonPath(self, event): # wxGlade: MyDialog.<event_handler> dlg = wx.DirDialog(self, "Choose Directory...", \ style = wx.DD_DEFAULT_STYLE|wx.DD_DIR_MUST_EXIST) if dlg

根据链接,我试图编写一个代码,将文件添加到listctrl中。 但它不起作用

def OnButtonPath(self, event):  # wxGlade: MyDialog.<event_handler>
    dlg = wx.DirDialog(self, "Choose Directory...", \
                       style = wx.DD_DEFAULT_STYLE|wx.DD_DIR_MUST_EXIST)
    if dlg.ShowModal() == wx.ID_OK:
        self.listCtrl.Value = path = dlg.GetPath()
        #self.AddtoList(path)
    dlg.Destroy()

def AddToList(self, path):
    fname = os.path.basename(path)  # insert only folder-name
    self.listCtrlFile.Append(fname)
def OnButtonPath(self,event):#wxGlade:MyDialog。
dlg=wx.DirDialog(self,“选择目录…”)\
style=wx.DD_默认_样式| wx.DD_目录_必须存在)
如果dlg.showmodel()==wx.ID\u正常:
self.listCtrl.Value=path=dlg.GetPath()
#self.AddtoList(路径)
dlg.Destroy()
def AddToList(自身,路径):
fname=os.path.basename(路径)#仅插入文件夹名称
self.listCtrlFile.Append(fname)
如果我激活了belows,我就无法打开pythongui

self.AddtoList(路径)

我想要的就是将多个文件放入listctrl。 我该怎么做

=========================整个代码==================

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
#
# generated by wxGlade 0.6.8 (standalone edition) on Thu Jul 31 17:55:10 2014
#

import wx

# begin wxGlade: dependencies
import gettext
# end wxGlade

# begin wxGlade: extracode
# end wxGlade


class MyDialog(wx.Dialog):
    def __init__(self, *args, **kwds):
        # begin wxGlade: MyDialog.__init__
        kwds["style"] = wx.DEFAULT_DIALOG_STYLE
        wx.Dialog.__init__(self, *args, **kwds)
        self.labelPath = wx.StaticText(self, wx.ID_ANY, _("Path : "))
        self.textCtrlPath = wx.TextCtrl(self, wx.ID_ANY, "")
        self.button_1 = wx.Button(self, wx.ID_ANY, _("Open..."))
        self.labelFile = wx.StaticText(self, wx.ID_ANY, _("File List :"))
        self.listCtrlFile = wx.ListCtrl(self, wx.ID_ANY, style=wx.LC_REPORT | wx.SUNKEN_BORDER)
        self.buttonAccept = wx.Button(self, wx.ID_ANY, _("RUN"))
        self.buttonExit = wx.Button(self, wx.ID_ANY, _("EXIT"))

        self.__set_properties()
        self.__do_layout()

        self.Bind(wx.EVT_BUTTON, self.OnButtonPath, self.button_1)
        self.Bind(wx.EVT_BUTTON, self.OnButtonAccept, self.buttonAccept)
        self.Bind(wx.EVT_BUTTON, self.OnButtonExit, self.buttonExit)
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: MyDialog.__set_properties
        self.SetTitle(_("test"))
        self.textCtrlPath.SetBackgroundColour(wx.Colour(255, 255, 255))
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: MyDialog.__do_layout
        mainSizer = wx.BoxSizer(wx.VERTICAL)
        footerSizer = wx.BoxSizer(wx.HORIZONTAL)
        pathSizer = wx.BoxSizer(wx.HORIZONTAL)
        pathSizer.Add(self.labelPath, 0, wx.ALL | wx.ALIGN_CENTER_VERTICAL, 2)
        pathSizer.Add(self.textCtrlPath, 1, wx.LEFT | wx.RIGHT | wx.EXPAND, 3)
        pathSizer.Add(self.button_1, 0, 0, 0)
        mainSizer.Add(pathSizer, 0, wx.ALL | wx.EXPAND | wx.ALIGN_CENTER_VERTICAL, 4)
        mainSizer.Add(self.labelFile, 0, wx.ALL, 6)
        mainSizer.Add(self.listCtrlFile, 7, wx.ALL | wx.EXPAND, 4)
        footerSizer.Add(self.buttonAccept, 1, wx.LEFT | wx.RIGHT | wx.EXPAND, 3)
        footerSizer.Add(self.buttonExit, 1, wx.LEFT | wx.RIGHT | wx.EXPAND, 3)
        mainSizer.Add(footerSizer, 1, wx.ALL | wx.EXPAND | wx.ALIGN_RIGHT, 2)
        self.SetSizer(mainSizer)
        mainSizer.Fit(self)
        self.Layout()
        # end wxGlade

    def OnButtonPath(self, event):  # wxGlade: MyDialog.<event_handler>
        dlg = wx.DirDialog(self, "Choose a directory:")
        if dlg.ShowModal() == wx.ID_OK:
            self.textCtrlPath.Value = dlg.GetPath()
        dlg.Destroy()

    def OnButtonAccept(self, event):  # wxGlade: MyDialog.<event_handler>
        print "Event handler 'OnButtonAccept' not implemented!"
        event.Skip()

    def OnButtonExit(self, event):  # wxGlade: MyDialog.<event_handler>
        self.Destroy()

# end of class MyDialog
if __name__ == "__main__":
    gettext.install("test") # replace with the appropriate catalog name

    test = wx.PySimpleApp(0)
    wx.InitAllImageHandlers()
    mainDialog = MyDialog(None, wx.ID_ANY, "")
    test.SetTopWindow(mainDialog)
    mainDialog.Show()
    test.MainLoop()
#/usr/bin/env python
#-*-编码:UTF-8-*-
#
#由wxGlade 0.6.8(独立版)于2014年7月31日星期四17:55:10生成
#
导入wx
#开始wxGlade:依赖项
导入gettext
#结束wxGlade
#开始wxGlade:外部代码
#结束wxGlade
类MyDialog(wx.Dialog):
定义初始值(self,*args,**kwds):
#开始wxGlade:MyDialog.\uu init__
kwds[“样式”]=wx.DEFAULT\u对话框\u样式
对话框。初始化(self,*args,**kwds)
self.labelPath=wx.StaticText(self,wx.ID\u ANY,u(“路径:”)
self.textCtrlPath=wx.TextCtrl(self,wx.ID_ANY,“”)
self.button_1=wx.button(self,wx.ID_ANY,u(“打开…”))
self.labelFile=wx.StaticText(self,wx.ID\u ANY,u(“文件列表:”)
self.listCtrlFile=wx.ListCtrl(self,wx.ID_ANY,style=wx.LC_REPORT | wx.undken_BORDER)
self.buttonacept=wx.Button(self,wx.ID_ANY,uu(“运行”))
self.buttonnexit=wx.Button(self,wx.ID\u ANY,uu(“退出”))
self.\uuuu set\u properties()
self.\u do\u布局()
self.Bind(wx.EVT_按钮、self.OnButtonPath、self.BUTTON_1)
self.Bind(wx.EVT_按钮、self.onbuttonacept、self.buttonacept)
self.Bind(wx.EVT_按钮、self.onbuttonnexit、self.buttonnexit)
#结束wxGlade
定义设置属性(自):
#开始wxGlade:MyDialog.\uuu设置\u属性
self.SetTitle(测试)
self.textCtrlPath.setbackgroundcolor(wx.color(255、255、255))
#结束wxGlade
定义布局(自):
#开始wxGlade:MyDialog.\uu do\u布局
mainSizer=wx.BoxSizer(wx.VERTICAL)
footerSizer=wx.BoxSizer(wx.HORIZONTAL)
pathSizer=wx.BoxSizer(wx.HORIZONTAL)
添加(self.labelPath,0,wx.ALL | wx.ALIGN_CENTER_VERTICAL,2)
添加(self.textCtrlPath,1,wx.LEFT | wx.RIGHT | wx.EXPAND,3)
添加(self.button_1,0,0,0)
mainSizer.Add(pathSizer,0,wx.ALL | wx.EXPAND | wx.ALIGN_CENTER_VERTICAL,4)
mainSizer.Add(self.labelFile,0,wx.ALL,6)
mainSizer.Add(self.listCtrlFile,7,wx.ALL | wx.EXPAND,4)
footerSizer.Add(self.buttonacept,1,wx.LEFT | wx.RIGHT | wx.EXPAND,3)
footerSizer.Add(self.buttonnexit,1,wx.LEFT | wx.RIGHT | wx.EXPAND,3)
mainSizer.Add(footerSizer,1,wx.ALL | wx.EXPAND | wx.ALIGN_RIGHT,2)
自我设定器(主施胶器)
mainSizer.Fit(自身)
self.Layout()
#结束wxGlade
def OnButtonPath(self,event):#wxGlade:MyDialog。
dlg=wx.DirDialog(self,“选择目录:”)
如果dlg.showmodel()==wx.ID\u正常:
self.textCtrlPath.Value=dlg.GetPath()
dlg.Destroy()
def onbuttonacept(self,event):#wxGlade:MyDialog。
打印“未实现事件处理程序OnButtonCept!”
event.Skip()
def onbuttonnexit(self,event):#wxGlade:MyDialog。
自我毁灭
#类结束MyDialog
如果名称=“\uuuuu main\uuuuuuuu”:
gettext.install(“test”)#替换为适当的目录名
test=wx.PySimpleApp(0)
wx.InitAllImageHandlers()文件
mainDialog=MyDialog(无,wx.ID_ANY,“”)
test.SetTopWindow(主对话框)
mainDialog.Show()
test.MainLoop()

通过使用Python的glob模块获取通过
DirDialog
选择的文件夹中的所有文件路径,您可以非常轻松地做到这一点。一旦有了路径列表,就可以迭代这些路径,并使用列表控件的
InsertStringItem
方法将文件名添加到第一列。下面是一个简单的例子:

import glob
import os
import wx

########################################################################
class MyPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)

        self.list_ctrl = wx.ListCtrl(self, 
                                     style=wx.LC_REPORT
                                     |wx.BORDER_SUNKEN
                                     )
        self.list_ctrl.InsertColumn(0, 'Filename')

        btn = wx.Button(self, label="Open Folder")
        btn.Bind(wx.EVT_BUTTON, self.onOpenDirectory)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.list_ctrl, 1, wx.ALL|wx.EXPAND, 5)
        sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)
        self.SetSizer(sizer)

    #----------------------------------------------------------------------
    def onOpenDirectory(self, event):
        """"""
        dlg = wx.DirDialog(self, "Choose a directory:")
        if dlg.ShowModal() == wx.ID_OK:
            path = dlg.GetPath()
            self.updateDisplay(path)
        dlg.Destroy()

    #----------------------------------------------------------------------
    def updateDisplay(self, folder_path):
        """
        Update the listctrl with the file names in the passed in folder
        """
        paths = glob.glob(folder_path + "/*.*")
        for index, path in enumerate(paths):
            self.list_ctrl.InsertStringItem(index, os.path.basename(path))


########################################################################
class MyFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Add Files")
        panel = MyPanel(self)
        self.Show()

if __name__ == "__main__":
    app = wx.App(False)
    frame = MyFrame()
    app.MainLoop()

注意,我使用Python的
os
模块只获取文件名,而不是将整个路径插入列表控件。如果你想变得更有趣,你可以添加额外的列来显示文件的大小、日期等,你可以从
os.stat

获得这些信息。你能提供你的全部代码吗?我添加了全部代码。我只想做一个代码,点击按钮,将文件列表导入“listCtrlFile”