Seite 1 von 1

Dumme Frage zu Buttons

Verfasst: Mittwoch 17. Oktober 2007, 21:59
von Agroschim

Code: Alles auswählen

from pygame import mixer
from Tkinter import *

mixer.init()
mixer.music.load('vivre.mp3')

root = Tk()
spiel = Button(root, text = 'Spiel', command = mixer.music.play())
spiel.pack()
root.mainloop()
Kann mir jemand sagen, warum der mir das Liedchen schon spielt, bevor ich den Button drücke?

Verfasst: Mittwoch 17. Oktober 2007, 22:26
von kaytec
Hallo Agroschim !

Mache mal die Klammern hinter mixer.music.play weg.

gruß frank

Verfasst: Mittwoch 17. Oktober 2007, 22:27
von BlackJack
Weil Du ``mixer.music.play()`` *ausführst*!? Das Ergebnis von dem Aufruf wird dann als Kommando an den `Button` übergeben. Du solltest aber hier nicht die Methode aufrufen sondern übergeben. Also die Klammern weglassen.

Mit Button im Hauptfenster eine globale Funktion aufrufen

Verfasst: Dienstag 13. November 2007, 21:30
von booth
Hallo,

ich habe mein Programm angefangen als Klassen und Funktionen zu strukturieren. Folgendermassen (Problem kommt gleich):

Code: Alles auswählen

class mainWindowApp:

    def __init__( self, master ):

        frame = Frame( master )
        frame.pack()
--schnipp--

--schnapp--

        self.testButton = Button( frame, text="Test", command=getActiveElement( self.lbFirmen, self.lbFirmen.index( ACTIVE ) ) )
        self.testButton.pack()

def getActiveElement( listBox, index ):
    print index
    print listBox.get( index )

root = Tk()
root.title("Python-Bestellskript")

mainWindow = mainWindowApp( root )

root.mainloop()
Unwichtigen Kram hab' ich rausgelassen. Was ich machen moechte ist auf den Knopf "Test" zu druecken und mir dann den jeweiligen Index und Inhalt(Index) einer Listbox, die ebenfalls in mainWindowApp erstellt wird ausgeben.
Beim Starten des Programms wird die Funktion getActiveElement scheinbar einmal ausgefuehrt: Es wird eine 0 auf die Kommandozeile gedruckt, allerdings nicht ListBoxInhalt( 0 )...
Ich glaube ich mache irgendwas generell falsch, komme aber durch rumspielen irgendwie nicht weiter.

Vielen Dank fuer Vorschlaege.

Verfasst: Dienstag 13. November 2007, 21:52
von Redprince
Liest du auch, was man dir schreibt?
BlackJack hat geschrieben:Weil Du ``mixer.music.play()`` *ausführst*!? Das Ergebnis von dem Aufruf wird dann als Kommando an den `Button` übergeben. Du solltest aber hier nicht die Methode aufrufen sondern übergeben. Also die Klammern weglassen.

Verfasst: Mittwoch 14. November 2007, 11:06
von booth
Redprince: Liest Du auch an wen Du schreibst?

Oder war ich nicht gemeint?

Verfasst: Mittwoch 14. November 2007, 14:56
von booth
Aber danke trotzdem, sein Problem loest meines auch irgendwie.
Man muss es nur viel umstaendlicher machen, als man es erwarten wuerde: Ich uebergebe eine Funktion command=self.testFunc an den Button, dann

def testFunc( self )
eigentlicheFunktionMitParametern( self.Listbox, self.Listbox.index( ACTIVE ) )

Verfasst: Mittwoch 14. November 2007, 16:24
von Leonidas
Kannst an der Stelle sicherlich auch eine anonyme Funktion mit `lambda` machen.

Verfasst: Mittwoch 14. November 2007, 16:36
von BlackJack
Oder zumindest eine lokale Funktion statt einer öffentlichen Methode.