wxPython Problem

Diskutiere wxPython Problem im Ruby, php, Perl, Python ... Forum im Bereich Programmieren unter Linux/Unix; Hallo Habe hier folgendes kleines Programm bei elektor gefunden, habe sogar fast alles was da gemacht, und wie verstanden, außerdem...

  1. #1 schwedenmann, 27.07.2013
    schwedenmann

    schwedenmann Foren Gott

    Dabei seit:
    18.11.2003
    Beiträge:
    2.694
    Zustimmungen:
    5
    Ort:
    Wegberg
    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.

    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
     
  2. Anzeige

    Anzeige

    Wenn du mehr über Linux erfahren möchtest, dann solltest du dir mal folgende Shellkommandos anschauen.


    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Gast123, 29.07.2013
    Gast123

    Gast123 Guest

    Erm, ist es beabsichtigt, dass du mpg321 die geöffnete MP3 File als Parameter übergibst.
    Ich denke, dass es den Pfadnamen zur Datei erwartet, also den Inhalt von
    Code:
    filename
    .
    Wieso du die MP3 Datei öffnest ist mir auch nicht klar.
    Und
    Code:
    data
    ist (vermute ich) auch nicht mehr definiert, nachdem du
    Code:
    f.close()
    aufrufst.

    MfG

    Schard
     
  4. #3 schwedenmann, 29.07.2013
    schwedenmann

    schwedenmann Foren Gott

    Dabei seit:
    18.11.2003
    Beiträge:
    2.694
    Zustimmungen:
    5
    Ort:
    Wegberg
    Hallo

    Code:
    def OnOpen(event):
        # ask for filename
        dlg = wx.FileDialog(None,"Open data file", os.getcwd() ,"", "*.*", wx.OPEN)
        dlg.ShowModal()
        if dlg.ShowModal()==wx.ID_OK:
            self.filename=dlg.GetFilename()

    jetzt muß ich "nur" self.filename aus lesen, als Variable speichern und dann zur Kontrolle in ein TextCtrl namens textbox schreiben, dananch dann den songnamen per popen an mpg321 übergeben.
    ich versuche bespielschnipsel aus dem Netzt anzupassen, aber das ist Mist, klappt, niecht, außerdem versteh ich den Code nicht, da nicht komplett.

    Wie würde ich denn jetzt bei self.filename z.B. meinsong.mp3 , den ich ja im wxDialog ausgewählt habe, in eine Variable dauerhaft abspeichern und ein ein TextCtrl drcuken lassen?
    Wenn ich das hinbekomme, schaffe das mit popen auch noch.

    ich möchte mir nur einige GUI zusammenstellen, die mir
    a. das umwandeln von mkv nach mpeg erlechtern, mache das bisher immer in der shell, nur ich habe keine Lust mehr, immer 30-40 Zeichen einzutippen (trotz history), wenns auch mit 2 Klicks geht.
    b. später mal Bilderkonvertieren per PIL und glob.glob() mit einer GUI, auch aus Zeitersparnis

    Deshalb benötige ich ein funktionierenes Beispiel, wie den dateinamen aus wx.Dialog in eine Variable speichern um ihn dann popen damit zu füttern.

    mfg
    schwedenmann

    P.S.
    Ja, das mit dem Öffnen der datei, habe ich langsam kapiert, war um im Original, nicht die Datei, sondern den Inhalt (2 Spalten mit Datenzahlen) der Datei zu öffnen, ich benötige den Namen der Datei, incl. Pfad.
     
  5. #4 Gast123, 29.07.2013
    Gast123

    Gast123 Guest

    Warum? Mach es doch nicht so kompliziert und pack es mit
    Code:
    print
    auf die stdout.
    Der Dateiname steht doch in der Vaariable
    Code:
    self.filename
    .
     
  6. #5 schwedenmann, 29.07.2013
    schwedenmann

    schwedenmann Foren Gott

    Dabei seit:
    18.11.2003
    Beiträge:
    2.694
    Zustimmungen:
    5
    Ort:
    Wegberg
    Hallo

    ich habs jetzt erstmal so gelöst


    Code:
    def OnOpen(event):
        # ask for filename
        dlg = wx.FileDialog(None,"Open data file", os.getcwd() ,"", "*.*", wx.OPEN)
        dlg.ShowModal()
        data = 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!")
    Damit wird meinsong.mp3 jetzt in die TextCtrl geschrieben


    Jetzt werd ich wohl sowas wie
    text = textbox.GetValue()
    meinsongname=text.readlines()

    fürs auslesen und weiterverabeiten nutzen müssen.

    mfg
    schwedenmann

    P.S.
    Das Beispiel aus der Elektor dient mir nur als Grundgerüst, das werde ich dann später in Anwendungen mit sizern, childframes, Kontrollstrukturen etc. erweitern.
    Ich muß nur dueses einfache Grundgerüst zu 100% verstehen um es adaptieren zu können.
     
Thema:

wxPython Problem

Die Seite wird geladen...

wxPython Problem - Ähnliche Themen

  1. Mageia 7.1 patcht Boot-Problem bei AMD Ryzen 3000 CPUs

    Mageia 7.1 patcht Boot-Problem bei AMD Ryzen 3000 CPUs: Mageia hat kurzfristig mit Version 7.1 ein Point-Release veröffentlicht, um einen Boot-Fehler mit AMDs Ryzen 3000 CPUs zu beheben, der einige...
  2. ip6tables Problem

    ip6tables Problem: Hallo zusammen, ich hab ein Problem kann aber keinen Fehler finden, äußert sich wie folgt, ich habe endlich für ein System in Netz eine IPv6...
  3. VDSL 50 FRITZBOX 7490 PROBLEM?

    VDSL 50 FRITZBOX 7490 PROBLEM?: Hallo ,ich besitze seit letzter Woche VDSL 50 also eine 50000er Leitung. Im Router wird mir allerdings unter "DSL Informationen" 109,34 Mbit/s...
  4. Problem mit SATA

    Problem mit SATA: Hallo zusammen Wo liegt hier das Problem? - Controller defekt? (LSI SAS3041X-L) - Festplatten defekt (Western Digital Green 1.5 TB)...
  5. Probleme mit WinSCP und Rechten

    Probleme mit WinSCP und Rechten: Hallo. Ich habe vor ein paar Tgen meinen ersten Ubuntu 16.04 vServer bei 1&1 bestellt, gemäß dem sicheren Umgang damit, habe ich erstmal den SSH...
  1. Diese Seite verwendet Cookies um Inhalte zu personalisieren. Außerdem werden auch Cookies von Diensten Dritter gesetzt. Mit dem weiteren Aufenthalt akzeptierst du diesen Einsatz von Cookies.
    Information ausblenden