Erstes GUI- ComboBox in Variable schreiben und Verbesserungsvorschläge

  • Hey zusammen,


    wie der ein oder andere vielleicht schon gesehen hat, habe ich mein erstes GUI geschrieben. Und da es noch Verbesserungspotential gibt, soll dies in diesem Thema behoben werden. Falls ihr Zeit und Lust habt :)

    Es handelt sich dabei um eine einfach Web-Radio-Anwendung. Mit einem Sender funktioniert das auch ganz gut. Jetzt habe ich eine "Combobox" eingebaut und wollte darin eine feste Senderauswahl hinterlegen.

    Mit einem Button bestätige ich die Auswahl und kann sie mir auch anzeigen lassen. Allerdings schaffe ich es nicht, den hinterlegten Link in die Variable "url" zu schreiben.

    Meine erste Frage wäre, wie dass denn geht?


    Habe den Code schon nach den Verbesserungsvorschlägen von Hofei etwas abgeändert. Du hast noch was von Camel-Case geschrieben. Laut Internet ist dass die Schreibweise in der ich zwei Wörter so "RadioBob" anstatt so "Radio_Bob" schreibe. Meintest du das?

    Als Editor habe ich mir jetzt PyCharm runtergeladen. Muss aber erst noch rausfinden wie das dort alles funktioniert. Hatte das bis jetzt in einer virtuellen Box und Raspbian geschrieben, da konnte ich es gleich testen. Muss später mal schauen ob ein Editor unter Raspbian auf IDE hat.


    hyle Du hattest was von Verbesserungen geschrieben, wenn du Zeit und Lust hast, ich bin gespannt :)


    Ich bedanke mich schonmal vorab, für eure immer wiederkehrenden Bemühungen mit mir :thumbup:

    Ihr und das Forum habt mir schon sehr weit geholfen :bravo2:


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

    Edited 2 times, last by Dennis89: Code auf den aktuellen Stand angepasst. Senderauswahl geht aber noch nicht. ().

    • Official Post

    Gemeint war das was Hofei schreib, ich hatte den Code nur überflogen. Den muss ich mir mal in Ruhe ansehen, aber heute nicht mehr.


    Btw. Damit ich nicht ganz ohne brauchbere Sachen poste... Deine Senderauswahl ist schon mal meine Senderauswahl. Einen guten hätte ich noch: http://streams.rsa-sachsen.de/rsa-rockzirkus/mp3-192 ;)

  • Hey,


    vielen Dank für die Antwort :)

    An welcher Stelle sollte denn die Auswahl erfolgen?

    Die Auswahl der Sender sollte als erstes erfolgen. Achso, dann sollte ich das natürlich auch in der Reihenfolge in meinen Code schreiben?

    So wie jetzt hier?:


    Edit: Sehe gerade der falsche Code wurde eingefügt. Sorry das war heute MIttag in der Mittagspause :blush:


    Verwende ein Dictionary, die Keys werden deine Buttons, die Values hinterlegst du die URL die bei der Auswahl dann ausgewählt und der Sender passend gesetzt wird

    Okay, werde mich im darüber informieren und mich einlesen und mich hier wieder melden.


    Grüße Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

    Edited once, last by Dennis89 ().

  • Guten Abend,


    versuche schon die ganze Zeit diesen Codeteil:

    Python
            url = ''
            instance = vlc.Instance('--input-repeat=-1', '--fullscreen')
            player=instance.media_player_new()
            media=instance.media_new(url)
            media.get_mrl()
            player.set_media(media)

    an verschiedenen Stellen einzufügen, aber ich bekomme immer eine Fehlermeldung, dass der Player nicht definiert ist. Kann mir bitte jemand weiterhelfen? Restlicher Code siehe Post vorher.


    Edit:

    Bezogen auf die Dictionary:


    Ich erstelle ein Dictionary (hier jetzt mal nur mit einem Eintrag):

    Python
    sender['RadioBob'] = 'https://...'

    So nun wähle ich in meiner Combobox RadioBob aus und bestätige dies mit einem Button. Und jetzt stehe ich wieder vor dem gleichen Problem, das ich nicht weis, wie ich die Auswahl der Combobox auslesen kann und in eine Variable schreiben kann. Sonst kann ich meinen gewünschten Eintrag gar nicht aus der Dictionary auslesen.


    Oder was verstehe ich hier nicht?



    Danke vorab und Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

    Edited once, last by Dennis89 ().

  • Ich habe das Gefühl, Du hast Du noch ein paar grundsätzliche Verständnisprobleme, was das Programmieren, im Speziellen mit Python, angeht. Bevor Du den – ansonsten sehr guten – Tip mit dem dictionary umsetzt, solltest Du m.E. die angehen.


    Hierzu ein paar Fragen zu Deinem Code, die vielleicht zum Nachdenken in die richtige Richtung anregen können:

    • In Zeile 7 und 8 definierst Du Konstanten, die die URLs der Radiosender enthalten. Wo im Code greifst Du auf diese Konstanten wieder zu?
    • Welchen Wert hat die Variable url nach Codezeile in #6?
    • Welchen Wert müsste sie in Zeile 4 im selben Codeschnipsel haben?
    • An manchen Stellen in Deinem Code steht self.<Variablenname>, an anderen nur <Variablenname>. Warum ist das so? Tip: Es hat etwas mit objektorientierter Programmierung und mit dem "scope" (nützliches Stichwort zum Suchen) von Variablen zu tun.
  • Guten Morgen,


    vielen Dank für deine Antwort :)

    Ich habe das Gefühl, Du hast Du noch ein paar grundsätzliche Verständnisprobleme

    Ja die habe ich, das stimmt. Wieso manche Sachen gemacht werden, wird in manchen Anleiungen nicht immer so rübergebracht, das es (für mich) ganz verständlich ist. Und gerade am Anfang finde ich es schwierig dann nach den Unklarheiten zu suchen, weil einfach Grundlagen fehlen.

    In Zeile 7 und 8 definierst Du Konstanten, die die URLs der Radiosender enthalten. Wo im Code greifst Du auf diese Konstanten wieder zu?

    In Zeile 39 mit

    Python
            url = self.myradio.get()


    Quote

    Welchen Wert hat die Variable url nach Codezeile in #6?

    Die Variable ist leer. Weil

    Code
    url = ''

    An der falschen Stelle steht, ich habe die url durch klicken auf meinen Button beschrieben und durch klicken auf Play lösche ich den Inhalt wieder.

    Welchen Wert müsste sie in Zeile 4 im selben Codeschnipsel haben?

    Den aus Zeile 39 :danke_ATDE:



    An manchen Stellen in Deinem Code steht self.<Variablenname>, an anderen nur <Variablenname>. Warum ist das so? Tip: Es hat etwas mit objektorientierter Programmierung und mit dem "scope" (nützliches Stichwort zum Suchen) von Variablen zu tun.

    Ich erstelle Methoden mit def xxx(self): das self darin muss als Refernez angegeben werden. Es können noch weitere Parameter folgen. Wenn ich nun in dieser Methode ein Objekt erstelle muss ich ein self. voransetzen, um anzugeben, dass das Objekt zu der erstellten Methode gehört?

    Wenn ich nur einen Variablenname schreibe, dann bezieht sich die Variable nicht auf eine Methode, sondern sie muss global, außerhalb einer Klasse beschrieben werden?

    Ich kann auch Variabeln innerhalb einer Klasse beschreiben, diese sind dann für alle Methoden vordefiniert und können mit Klassename.Variable aufgerufen werden? Versuch dazu im Code unten.


    Die Fragezeichen in meiner Antwort sollen andeuten, dass ich das so verstanden habe und gerne ene Bestätigung oder Korrektur dazu erhalten würde.

    Wenn das so richtig wäre, hätte ich meinen Code so ageändert, wie unten angehängt.

    Falls das dann passt, würde ich mich um die Dictionary kümmern.


    Waren gute Fragestellungen von dir, das hat mir geholfen nochmal in Ruhe über den Code nachzudenken :thumbup:



    Grüße Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • In Zeile 39 mit

    Python
            url = self.myradio.get()

    Wie kommst Du darauf? Ich sehe in dieser Zeile weder RADIOBOB noch ROCKANTENNE, also greifst Du auch nicht auf diese Konstanten zu. Wie übrigens auch sonst nirgends in Deinem Code.

    Die Variable ist leer.

    Richtig.

    Weil

    Code
    url = ''

    An der falschen Stelle steht, ich habe die url durch klicken auf meinen Button beschrieben und durch klicken auf Play lösche ich den Inhalt wieder.

    Nicht richtig. Noch mal der Hinweis: Beschäftige Dich mit dem "scope" von Variablen in Python.

    Den aus Zeile 39 :danke_ATDE:

    Nein. Tip: Gib nach Zeile 39 mal den Inhalt der Variablen aus (per print() z.B.).

    Ich erstelle Methoden mit def xxx(self): das self darin muss als Refernez angegeben werden. Hier richtig. Warum ist das so? Wofür steht das self?

    Wenn ich nur einen Variablenname schreibe, dann bezieht sich die Variable nicht auf eine Methode, sondern sie muss global, außerhalb einer Klasse beschrieben werden?

    Nein. Auch hier wiederhole ich den Hinweis: Beschäftige Dich mit objektorientierter Programmierung in Python. Ein paar Begriffe zum Suchen sind bspw. "Klasse", "Instanz", "Klassenvariable", "Instanzvariable". Und hatte ich schon "scope" erwähnt? ;)

    Ich kann auch Variabeln innerhalb einer Klasse beschreiben, diese sind dann für alle Methoden vordefiniert und können mit Klassename.Variable aufgerufen werden? Versuch dazu im Code unten.

    Das geht, ja. Das ist dann die genannte Klassenvariable. Du suchst eigentlich nach der ebenfalls bereits erwähnten Instanzvariable. Da Du in Deinem Code nur eine Instanz Deiner Klasse anlegst, funktioniert beides, sauber ist die Lösung aber nicht.

    Die Fragezeichen in meiner Antwort sollen andeuten, dass ich das so verstanden habe und gerne ene Bestätigung oder Korrektur dazu erhalten würde.

    Habe ich hiermit versucht. :)

    Wenn das so richtig wäre, hätte ich meinen Code so ageändert, wie unten angehängt.

    Falls das dann passt, würde ich mich um die Dictionary kümmern.

    Funktioniert's denn? Wenn nicht würde ich sagen, passt noch nicht... ;)

  • Hey und guten Abend,


    also ich muss sagen es freut mich richtig, wie mir hier geholfen wird. Erstmal vielen Dank für eure Zeit und Bemühungen! :)


    Habe gerade erst Feierabend, Code wurde getestet und da passt wohl was nicht :conf:


    Werde mich jetzt mit den Hinweisen und Fragen beschäftigen. Wenn ich meine das ich soweit bin, folgt eine detailierte Anwort.


    Falls ihr zufällig einen guten Büchertipp für mich habt (ich denke ein Bild von meinen Kenntnissen (darf man das schon so nennen?) habt ihr euch ja machen können), bin ich gerne bereit mir eins zuzulegen.


    Schönen Abend noch und Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Falls ihr zufällig einen guten Büchertipp für mich habt (ich denke ein Bild von meinen Kenntnissen (darf man das schon so nennen?) habt ihr euch ja machen können), bin ich gerne bereit mir eins zuzulegen.

    ich bin mal so frei und kopier meine Standardabsatz


    Für Python möcht ich dir von anfang an als Editor und Entwicklungstool PyCharm ans Herz legen.

    Theorie für Python: Python3 - Das umfassende Handbuch

    Theorie zum Pi: Raspberry Pi - Das umfassende Handbuch

    Ich empfiel es immer als eBook, da man hier einfach mit STRG + F nach Wörtern/Begriffen suchen kann, das geht in Papier nur bedingt ;)


    Wobei das für den Pi für dich nicht wichtig ist.


    und ansonsten zählt, bei unklarheiten einfach fragen!

  • Hallo,


    ich melde mich nach langer Zeit wieder zurück. Hatte leider viel um die Ohren und von daher nicht allzuviel Zeit mich mit Python zu beschäftigen.

    Ich versteh das mit Scope von Variabeln nicht wirklich. Unter Scope versteht man den Gültigkeitsbreich der Variabeln. Es gibt lokale und globale Variabeln. Allerdings verstehe ich die Anwendung nicht. Wo muss denn eine Variable stehen, damit jede Funktion einer Klasse darauf zugreifen kann?


    Die Auswahl mit dem Radiosender würde so funktionieren, allerdings nicht gerade schön (ok, da steht ja noch was mit Dictonaries aus)

    Der Player wird in meinem jetztigen Code definiert und in der URL steht der richtige Inhalt. Aber wie greift meine Funktion "play" nun auf den Player zu?

    mit def play(self, player): habe ich versucht den Player als weitere Refernz zu setzen, aber das geht genauso wenig, wie wenn ich die Funktion "Clickme" als Referenz setze.



    Was ich zu dem Thema zum lesen finde, ist für mich nicht verständlich geschrieben oder ich stehe total auf dem Schlauch.


    Würde mich über weitere Hilfe freuen :)

    Danke und Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Du hast einen Scope vergessen: die Instanz deiner Klasse. Und genau da gehoert die hin.