Events 如何在wxpython中实现这个过程?

Events 如何在wxpython中实现这个过程?,events,wxpython,Events,Wxpython,在wxpython中,调用面板或框架的某个函数时是否会发生事件?谢谢例如,self.Bind(wx.EVT\u Onfunctioncalled,self.OnDoSomething) 那么我要把这个问题换成一个更具体的问题,就是: 我的意思是,好的,下面的过程:我点击主窗口上的菜单“文件”(就像大多数GUI应用程序看起来的那样),然后“打开”,然后弹出一个文件目录对话框,然后我选择一个文件,然后我点击对话框上的“确定”,然后,我希望这个文件的名称会出现在这个主窗口的listctrl上,显示我选

在wxpython中,调用面板或框架的某个函数时是否会发生事件?谢谢例如,
self.Bind(wx.EVT\u Onfunctioncalled,self.OnDoSomething)

那么我要把这个问题换成一个更具体的问题,就是:


我的意思是,好的,下面的过程:我点击主窗口上的菜单“文件”(就像大多数GUI应用程序看起来的那样),然后“打开”,然后弹出一个文件目录对话框,然后我选择一个文件,然后我点击对话框上的“确定”,然后,我希望这个文件的名称会出现在这个主窗口的listctrl上,显示我选择的文件这里有一个可运行的示例,可以满足您的需要

import wx

class ListTest(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, -1, title, size=(380, 230))          
        panel = wx.Panel(self, -1)

        #Create a list                
        self.list = wx.ListCtrl(panel, -1, style=wx.LC_REPORT) 
        self.list.InsertColumn(0, 'File-path', width=140)

        #Do the layout
        hbox = wx.BoxSizer(wx.HORIZONTAL)
        hbox.Add(self.list, 1, wx.EXPAND)
        panel.SetSizer(hbox)
        self.Centre()
        self.Show(True)

        #Create Menu
        menubar = wx.MenuBar()
        file = wx.Menu()
        self.loadFile = wx.MenuItem(file, -1, '&Open\tCtrl+L', 'Open a file')
        file.AppendItem(self.loadFile)
        menubar.Append(file, '&File')
        self.SetMenuBar(menubar)

        self.Bind(wx.EVT_MENU, self.on_openFile)


    def on_openFile(self, evt):
        loadFileDlg = wx.FileDialog(
            self, message="Open File",
            defaultDir="",
            defaultFile="",
            style=wx.OPEN | wx.CHANGE_DIR
            )
        #If the user clicked the open file button
        if loadFileDlg.ShowModal() == wx.ID_OK:          
            #Get the file path
            path = loadFileDlg.GetPath()
        loadFileDlg.Destroy()

        #Call your file analysis method or whatever here

        #Create a message dialog 
        fileAnalysedDlg = wx.MessageDialog(self, "File Has Been Analysed", "File Has Been Analysed", wx.OK)   
        fileAnalysedDlg.ShowModal()
        fileAnalysedDlg.Destroy()

        #Add filepath to list
        self.list.InsertStringItem(0, path)


app = wx.App()
ListTest(None, 'list test')
app.MainLoop()

不,你想达到什么目的?也许还有别的办法…@沃尔廷:谢谢!我试过你的代码,它成功了!我已经发现了我的错误。主要区别在于listctrl是一个实例,它有一个self.Bind(wx.EVT_CHAR_HOOK,…),因此当按下该键时,它将响应并进行一些更改。我试图做的是在listctrl中显示文件名,当我点击弹出对话框上的“确定”按钮时,我实例化了一个框架,它与原始框架不同,即:第一个是,第二个是,这就是为什么listctrl不能change@volting当前位置是否有方法实施我的工作?i、 e.在用户选择该文件进行后续分析后,或在整个分析过程后,将该文件的名称显示在主窗口的listctrl中。谢谢您将这些项目添加到另一个列表中?(我不确定我是否理解)。无论如何,如果我已经回答了这个问题,那么你应该把它标记为接受(并投票给我),你甚至可以得到一些分数:D–@volting:谢谢,可以这样使用这个代码吗:打开文件进行分析,当分析完成时,会弹出一个对话框,然后我在该对话框上单击OK,然后,文件名显示在此列表中Ctrl???@Serina:确定为什么不?当然,您只需要添加消息对话框的代码和分析文件的代码。你不知道怎么做?@volting:好的,我不知道当我点击对话框上的OK按钮时,如何将事件连接到listctrl中的文件名显示,因为它们似乎是不同的东西,比如按键、进入窗口等,可以直接绑定到listctrl面板或框架,当我在消息对话框中单击OK时,我怎么能期望listctrl响应此消息?请特别感谢,当这两个部分在不同的类中时,我的意思是,listctrl在一个类中,而anaylsis过程在另一个类中完成,告诉我过程结束的消息对话框也是如此。然后我点击对话框,文件名显示在listctrl上,它不属于这个类,我很困惑。。。