|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Jan 2004
Città: Cremona
Messaggi: 3664
|
[Python] ottenere path dopo wx.FileDialog
sto preparando una gui per il metodo di minimizzazione evolutivo dove avevo già chiesto lumi in questa discussione
sto cercando di utilizzare wxPython, poichè mi sembra più bello di TKinter e ma comunque più semplice di PyQT o di GTK sto preparando una finestra con vari tab, il primo tab è dedicato all'input dei file necessari per la simulazione sono riuscito a gestire l'evento di pressione del pulsante "sfoglia" per scegliere il file ed a scrivere in un wx.TextCtrl il path del file se cerco però di "esportare" il path nella classe di livello superiore (quella che gestisce tutti i tab, non quella che gestisce solo il primo tab) me lo esporta prima che la variabile sia riempita il file dopo devo caricarlo e controllarlo se è strutturato nel modo giusto dovrei per cui fare vedere quella variabile (il print è solo per mostrare un uso della variabile che non faccia crashare il codice) dopo che sia stato scelto il file Codice:
import wx
import os, sys
class principale(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: principale.__init__
kwds["style"] = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
notebook_1 = wx.Notebook(self, -1, style=0)
notebook_1_pane_2 = wx.Panel(notebook_1, -1)
notebook_1_pane_1 = wx.Panel(notebook_1, -1)
notebook_1_pane_3 = wx.Panel(notebook_1, -1)
notebook_1.AddPage(scelta_file(notebook_1), "Primo")
notebook_1.AddPage(notebook_1_pane_2, "Secondo")
notebook_1.AddPage(notebook_1_pane_3, "Terzo")
self.SetSize((500, 500))
self.Layout()
print scelta_file.PathFile
class scelta_file(wx.NotebookPage):
def __init__(self, parent):
wx.NotebookPage.__init__(self, parent, -1)
self.panel = wx.Panel(self, -1)
vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add((-1, 5))
st1 = wx.StaticText(self.panel, -1, 'File elementi')
vbox.Add(st1, 0, wx.RIGHT, 8)
vbox.Add((-1, 5))
hbox1=wx.BoxSizer(wx.HORIZONTAL)
self.tc = wx.TextCtrl(self.panel, -1)
hbox1.Add(self.tc, 1, wx.EXPAND)
sfoglia1=wx.Button(self.panel, 1, 'Sfoglia')
hbox1.Add(sfoglia1,0)
vbox.Add(hbox1,0, wx.EXPAND)
self.Bind(wx.EVT_BUTTON, self.openfile, id=1)
vbox.Add((-1, 10))
self.panel.SetSizer(vbox)
self.panel.Fit()
def openfile(self, event):
dlg = wx.FileDialog(self, "Choose a file", os.getcwd(), "", "*.*", wx.OPEN)
if dlg.ShowModal() == wx.ID_OK:
path = dlg.GetPath()
mypath = os.path.basename(path)
self.PathFile="%s" % path
self.tc.AppendText("%s" % path)
dlg.Destroy()
def fineopenfile(self,event):
print "ci provo"
pathfile=self.tc.GetValue()
for line in file(pathfile):
mat[ii,:]=map(float, line.split())
ii=ii+1
print mat
print 'chiuso'
def PathFile(self):
pass
# end of class principale
if __name__ == '__main__':
app = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
principale = principale(None, -1, "Finestra principale")
app.SetTopWindow(principale)
principale.Show()
app.MainLoop()
Ultima modifica di red.hell : 07-04-2009 alle 16:27. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jan 2004
Città: Cremona
Messaggi: 3664
|
in un modo, abbastanza osceno, ho risolto, sono andato a sfruttare un oggetto creato e inizializzato nel main dove dopo andavo a sostituire i valori
ora però ho un'altro problema, una volta presi i file (o meglio, un file, solo il primo) non riesco a mostrarne il contenuto nel secondo tab in modo efficente per mostrarlo ho dovuto preparare un pulsante che lo mostri, altrimenti in automatico non mostrava nulla solo che l'evento di questo pulsante devo metterlo in una funzione, e usando la funzione il .Add ad un BoxSizer non capisce cosa c'è prima e va a sovrascrivere tutto di seguito il codice, in allegato il .txt da caricare (deve avere n righe e 11 colonne) Codice:
import wx
import os, sys
import numpy as np
class variabili():
pass
class principale(wx.Frame):
def __init__(self, *args, **kwds):
# begin wxGlade: principale.__init__
kwds["style"] = wx.DEFAULT_FRAME_STYLE
wx.Frame.__init__(self, *args, **kwds)
notebook_1 = wx.Notebook(self, -1, style=0)
notebook_1_pane_2 = wx.Panel(notebook_1, -1)
notebook_1_pane_1 = wx.Panel(notebook_1, -1)
notebook_1_pane_3 = wx.Panel(notebook_1, -1)
var=variabili()
var.elementi=[]
var.cuscinetti=[]
var.fondazioni=[]
notebook_1.AddPage(scelta_file(notebook_1), "Primo")
notebook_1.AddPage(scelta_parametri(notebook_1), "Secondo")
notebook_1.AddPage(notebook_1_pane_3, "Terzo")
self.SetSize((500, 500))
self.Layout()
class scelta_file(wx.NotebookPage):
def __init__(self, parent):
wx.NotebookPage.__init__(self, parent, -1)
self.panel = wx.Panel(self, -1)
vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add((-1, 5))
st1 = wx.StaticText(self.panel, -1, 'File elementi')
vbox.Add(st1, 0, wx.RIGHT, 8)
vbox.Add((-1, 5))
self.hbox1=wx.BoxSizer(wx.HORIZONTAL)
self.tc_el = wx.TextCtrl(self.panel, -1)
self.hbox1.Add(self.tc_el, 1, wx.EXPAND)
sfoglia1=wx.Button(self.panel, 1, 'Sfoglia')
self.hbox1.Add(sfoglia1,0)
vbox.Add(self.hbox1,0, wx.EXPAND)
self.Bind(wx.EVT_BUTTON, self.openfile_elementi, id=1)
vbox.Add((-1, 10))
st1 = wx.StaticText(self.panel, -1, 'File fondazioni')
vbox.Add(st1, 0, wx.RIGHT, 8)
hbox1=wx.BoxSizer(wx.HORIZONTAL)
self.tc_fond = wx.TextCtrl(self.panel, -1)
hbox1.Add(self.tc_fond, 1, wx.EXPAND)
sfoglia1=wx.Button(self.panel, 2, 'Sfoglia')
hbox1.Add(sfoglia1,0)
vbox.Add(hbox1,0, wx.EXPAND)
self.Bind(wx.EVT_BUTTON, self.openfile_fondazioni, id=2)
vbox.Add((-1, 10))
st1 = wx.StaticText(self.panel, -1, 'File cuscinetti')
vbox.Add(st1, 0, wx.RIGHT, 8)
hbox1=wx.BoxSizer(wx.HORIZONTAL)
self.tc_cusc = wx.TextCtrl(self.panel, -1)
hbox1.Add(self.tc_cusc, 1, wx.EXPAND)
sfoglia1=wx.Button(self.panel, 3, 'Sfoglia')
hbox1.Add(sfoglia1,0)
vbox.Add(hbox1,0, wx.EXPAND)
self.Bind(wx.EVT_BUTTON, self.openfile_cuscinetti, id=3)
carica=wx.Button(self.panel,4,'Carica e testa i file')
vbox.Add((-1,50))
vbox.Add(carica,0, wx.CENTER)
self.Bind(wx.EVT_BUTTON, self.carica_file, id=4)
self.panel.SetSizer(vbox)
self.panel.Fit()
def openfile_elementi(self, event):
dlg = wx.FileDialog(self, "Choose a file", os.getcwd(), "", "*.*", wx.OPEN)
if dlg.ShowModal() == wx.ID_OK:
path = dlg.GetPath()
mypath = os.path.basename(path)
self.tc_el.AppendText("%s" % path)
# self.hbox1.Add(wx.StaticText(self.panel, -1, 'File elementi'),0)
dlg.Destroy()
def openfile_fondazioni(self, event):
dlg = wx.FileDialog(self, "Choose a file", os.getcwd(), "", "*.*", wx.OPEN)
if dlg.ShowModal() == wx.ID_OK:
path = dlg.GetPath()
mypath = os.path.basename(path)
self.tc_fond.AppendText("%s" % path)
dlg.Destroy()
def openfile_cuscinetti(self, event):
dlg = wx.FileDialog(self, "Choose a file", os.getcwd(), "", "*.*", wx.OPEN)
if dlg.ShowModal() == wx.ID_OK:
path = dlg.GetPath()
mypath = os.path.basename(path)
self.tc_cusc.AppendText("%s" % path)
dlg.Destroy()
def carica_file(self, event):
path_elem=self.tc_el.GetValue()
path_cusc=self.tc_cusc.GetValue()
path_fond=self.tc_fond.GetValue()
file_elem=open(path_elem)
n_linee=sum([1 for line in file_elem])
mat=np.zeros([n_linee,11])
print mat.shape
ii=0
for line in file(path_elem):
mat[ii,:]=map(float, line.split())
ii=ii+1
var.elementi= mat
class scelta_parametri(wx.NotebookPage):
def __init__(self, parent):
wx.NotebookPage.__init__(self, parent, -1)
self.panel2 = wx.Panel(self, -1)
self.vbox = wx.BoxSizer(wx.VERTICAL)
carica=wx.Button(self.panel2,4,'Carica e testa i file')
self.vbox.Add(carica,0, wx.CENTER)
self.vbox.Add((-1,10))
self.vbox2=wx.BoxSizer(wx.VERTICAL)
self.Bind(wx.EVT_BUTTON, self.plot_valori, id=4)
self.panel2.SetSizer(self.vbox)
self.panel2.Fit()
def plot_valori(self,event):
self.vbox2.Destroy()
self.Layout()
hbox=wx.BoxSizer(wx.HORIZONTAL)
hbox.Add(wx.StaticText(self.panel2, -1, str(var.elementi)) ,1)
self.vbox2=wx.BoxSizer(wx.VERTICAL)
self.vbox2.Add(hbox, 0)
self.vbox2.Add((-1, 5))
if __name__ == '__main__':
var=variabili()
var.elementi=[]
var.cuscinetti=[]
var.fondazioni=[]
app = wx.PySimpleApp(0)
wx.InitAllImageHandlers()
principale = principale(None, -1, "Finestra principale")
app.SetTopWindow(principale)
principale.Show()
app.MainLoop()
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 02:36.



















