【问题标题】:how to implement this process in wxpython?如何在 wxpython 中实现这个过程?
【发布时间】:2010-08-26 22:33:25
【问题描述】:

在 wxpython 中,当面板或框架的功能之一被调用时,是否会发生事件?谢谢;例如self.Bind(wx.EVT_Onfunctioncalled, self.OnDoSomething)

好吧,我得把这个问题改成更具体的问题如下:

我的意思是,嗯,以下过程:我单击主窗口上的菜单“文件”(大多数 GUI 应用程序看起来),然后“打开”,然后弹出一个文件目录对话框,然后我选择一个文件,然后我在该对话框上单击“确定”,然后,我希望此文件的名称将出现在此主窗口的 listctrl 上,显示我选择了哪个文件

【问题讨论】:

  • AFAIK 没有。你想达到什么目的?也许还有另一种方式...
  • @volting:谢谢!我试过你的代码,它有效!我已经弄清楚了我的错误。主要区别在于 listctrl 是一个实例,它有一个 self.Bind(wx.EVT_CHAR_HOOK, ...),所以当按键被按下时,它会响应并做一些改变。当我单击弹出对话框上的“确定”按钮时,我试图做的是在 listctrl 中显示文件的名称
  • 为此,我实例化了一个框架,好吧,它与原始的实例不同,即:第一个是 > 的代理,第二个是 > 的代理,这就是 listctrl 不改变的原因
  • @volting:有没有办法实现我的工作?即在用户选择文件进行后续分析或整个分析过程之后,将文件名显示到主窗口的 listctrl 中。谢谢
  • 所以您将这些项目添加到另一个列表中?(我不确定我是否理解)。无论如何,如果我已经回答了这个问题,那么您应该将其标记为已接受(并投票给我),您甚至可以为此获得一些分数:D –

标签: events wxpython


【解决方案1】:

这是一个可运行的示例,可以满足您的要求。

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()

【讨论】:

  • @volting:谢谢,是否可以这样使用这段代码:打开文件进行分析,分析完成后,弹出一个对话框,然后我在该对话框上单击确定,然后,文件名显示在这个 listctrl??
  • @Serina:当然为什么不呢?你只需要添加一个消息对话框的代码和你的代码来分析文件。你不知道怎么办?
  • @volting:好的,当我单击对话框上的确定时,我不确定如何将事件连接到 listctrl 中的文件名显示,因为这些似乎是不同的东西
  • 不像按键、进入窗口等可以直接绑定到 listctrl 面板或框架的东西,当我在消息对话框上单击确定时,我怎么能期望 listctrl回应这个?请,谢谢
  • 特别是,当这两个部分在不同的类中时,我的意思是,listctrl 在一个类中,而分析过程在另一个类中完成,因此告诉我该过程的消息对话框结束。然后我点击对话框,listctrl上显示的文件名不是这个类的,好吧,我很困惑......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-26
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2018-11-05
相关资源
最近更新 更多