2010-08-26 5 views
0

Dans wxpython, existe-t-il un événement qui peut se produire lorsque l'une des fonctions du panneau ou du cadre est appelée? Merci; par exemple, self.Bind(wx.EVT_Onfunctioncalled, self.OnDoSomething)comment implémenter ce processus dans wxpython?

Eh bien, je dois changer cette question à un autre plus spécifique comme suit:

Je veux dire, eh bien, le processus suivant: je clique sur le menu « Fichier » dans la fenêtre principale (comme la plupart des applications GUI semble), puis "ouvrir", puis une boîte de dialogue de répertoire apparaît, puis je sélectionne un fichier, puis je clique sur "OK" dans ce dialogue, puis je veux que le nom de ce fichier apparaisse sur le listctrl cette fenêtre principale, affichant le fichier que j'avais sélectionné

+0

AFAIK no. Qu'essayez-vous d'accomplir? peut-être il y a une autre façon ... – volting

+0

@volting: merci! J'ai essayé votre code et ça a marché! et j'ai compris mes erreurs. La principale différence est que listctrl est une instance et qu'elle a un self.Bind (wx.EVT_CHAR_HOOK, ...), donc quand la touche est enfoncée, elle répond et fait quelques changements. ce que j'ai essayé de faire est d'afficher les noms des fichiers dans le listctrl quand je clique sur le bouton "ok" dans la boîte de dialogue pop-up – serina

+0

pour cela, j'ai instancié un cadre, eh bien, c'est une instance différente de l'original un, ie: le premier est >, et le second est >, c'est pourquoi le listctrl ne change pas – serina

Répondre

2

Voici un exemple exécutable qui fait ce que vous voulez.

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

@volting: merci, est-il possible d'utiliser ce code comme ceci: ouvrir le fichier pour une analyse, quand l'analyse est faite, une boîte de dialogue apparaît, puis je clique sur OK dans ce dialogue, puis, le nom de fichier est affiché dans ce listctrl ?? – serina

+0

@Serina: Bien sûr pourquoi pas? Vous avez juste besoin d'ajouter du code pour une boîte de dialogue et votre code pour analyser le fichier bien sûr. Que ne savez-vous pas faire? – volting

+0

@volting: Ok, je ne suis pas sûr de savoir comment connecter l'événement lorsque je clique sur OK dans la boîte de dialogue pour afficher les noms de fichiers dans le listctrl, parce que ceux-ci semblent être des choses différentes – serina

Questions connexes