schwedenmann
Foren Gott
Hallo
Habe hier folgendes kleines Programm bei elektor gefunden, habe sogar fast alles was da gemacht, und wie verstanden, außerdem funktioniert es auch noch.
Wo ich jetzt ums verrecken nicht weiterkomme, ich möchte anstatt Daten einer Textdatei in eine textbox schreiben,auslesen und plotten, eine mp3-Datei auswählen und mit dem externen Linux Programm mpg321 abspielen.
Hier mein kläglicher Versuch
Fehlermeldung data not defined und die Befehlsfolge mpg321 meinsong.mp3 wird auch nicht ausgegeben.
Was macht mit mit einer ausgewählten Datei, wenn man sie an ein externes Programm übergeben will und wie ruft man subprocess.Popen am einfachsten unter wx auf, wie definiert man das am Eiunfachsten. ?
Einige hints wären sehr hilfreich für einen Python-Noob.
mfg
schwedenmann
Habe hier folgendes kleines Programm bei elektor gefunden, habe sogar fast alles was da gemacht, und wie verstanden, außerdem funktioniert es auch noch.
Code:
#!/usr/bin/env python
import wx
import os.path
#import mathplotlib.pyplot as plt
import pylab as plt
def create_menu(frame):
# create menu
menubar = wx.MenuBar()
#main menus
mnuFile = wx.Menu()
mnuData = wx.Menu()
menubar.Append(mnuFile,"&File")
menubar.Append(mnuData,"&Data")
#submenus
m_Open = mnuFile.Append(-1,"&Open")
mnuFile.AppendSeparator()
m_Exit = mnuFile.Append(-1,"&Exit")
m_Plot = mnuData.Append(-1,"&Plot")
# attach menu to frame
frame.SetMenuBar(menubar)
#bind menu events to procedures
frame.Bind(wx.EVT_MENU, OnExit, m_Exit)
frame.Bind(wx.EVT_MENU, OnOpen, m_Open)
frame.Bind(wx.EVT_MENU, OnPlot, m_Plot)
#---------------------------------------------------------------------
# Event handlers
def OnExit(event):
frame.Close()
def OnOpen(event):
# ask for filename
dlg = wx.FileDialog(None,"Open data file", os.getcwd() ,"", "*.*", wx.OPEN)
dlg.ShowModal()
filename = dlg.GetPath()
#open file, get data and put it into textbox
try:
f = open(filename, "r")
data = f.read()
f.close()
textbox.SetValue(data)
except:
wx.MessageBox("Could not open file!")
def OnPlot(event):
# plot data
x,y = fill_xy_with_values(textbox)
plot_xy(x, y)
#---------------------------------------------------------------------
def fill_xy_with_values(textbox):
# """ get values from textbox
# returns array x, y and nummer of data points"""
text=textbox.GetValue()
lines=text.splitlines()
x=[]
y=[]
for line in lines:
columns = line.split() # seperator can be on or more " " or "\t"
x.append (float(columns[0]))
y.append (float(columns[1]))
return x,y
#-----------------------------------------------------------------
def plot_xy( x, y):
""" Plot arrays x, y with matplotlib"""
plt.figure(1)
plt.subplot(111) # 1 row, 1 col, plot nb. 1
plt.grid(True)
plt.plot(x, y)
plt.xlabel("x")
plt.ylabel("y")
plt.show()
#-----------------------------------------------------------------
# Main
#-----------------------------------------------------------------
app = wx.App()
# create frame
frame = wx.Frame(None, title="PLOTTER", pos=(350,300))
create_menu(frame)
# editor textbox for date
textbox=wx.TextCtrl(frame, style = wx.TE_MULTILINE)
# show frame and run event loop
frame.Show()
app.MainLoop()
Wo ich jetzt ums verrecken nicht weiterkomme, ich möchte anstatt Daten einer Textdatei in eine textbox schreiben,auslesen und plotten, eine mp3-Datei auswählen und mit dem externen Linux Programm mpg321 abspielen.
Hier mein kläglicher Versuch
Code:
def OnOpen(event):
# ask for filename
dlg = wx.FileDialog(None,"Open data file", os.getcwd() ,"", "*.*", wx.OPEN)
dlg.ShowModal()
filename = dlg.GetPath()
#open file, get data and put it into textbox
f = open(filename, "r")
data = f.read()
f.close()
#textbox.SetValue(data)
#except:
# wx.MessageBox("Could not open file!")
def OnPlay(event):
# play mp3
#x,y = fill_xy_with_values(textbox)
#plot_xy(x, y)
befehl = "mpg321 %s" %(data,)
#print befehl
process = subprocess.Popen(befehl , shell=True, stdout=subprocess.PIPE)
Fehlermeldung data not defined und die Befehlsfolge mpg321 meinsong.mp3 wird auch nicht ausgegeben.
Was macht mit mit einer ausgewählten Datei, wenn man sie an ein externes Programm übergeben will und wie ruft man subprocess.Popen am einfachsten unter wx auf, wie definiert man das am Eiunfachsten. ?
Einige hints wären sehr hilfreich für einen Python-Noob.
mfg
schwedenmann