Programm soll auf den Button-klick warten!

Fragen zu Tkinter.
Benutzeravatar
Mr_Snede
User
Beiträge: 387
Registriert: Sonntag 8. Februar 2004, 16:02
Wohnort: D-Dorf, Bo

Ein bischen verwirrend der Thread bis jetzt.

@oscar15
Lass uns vielleicht nochmal neu starten, ich befürchte nämlich, dass wir alle hier aneinander vorbeidenken.
Magst du dafür beschreiben, wie dein Programm benutzt werden soll?
Ganz ohne Programmierhintergrund, nur das was der Anwender mit dem Programm tut und wie das dann reagiert.

zB:
Benutzer klickt auf den Knopf "Datei öffnen"
Benutzer sucht eine Datei aus
Programm zeigt Text im Anzeigebereich an
Benutzer markiert Text mit der Maus
Benutzer klickt auf den Knopf "fette Schrift"
Programm zeigt die markierte Stelle im Text in fetter Schrift an
...


cu Sebastian
oscar15
User
Beiträge: 67
Registriert: Freitag 3. März 2006, 15:43
Wohnort: Kölle

die schleife muss solange laufen, bis etwas erfüllt wurde! damit das aber erfüllt werden kann müssen die buttons, als input, gedrückt werden!
Bei JEDEM durchlauf soll das gemacht werden, also er soll warten bis der input da ist!!!
silentbreaker
User
Beiträge: 7
Registriert: Montag 3. April 2006, 17:58

also ungefähr so was hier?

Code: Alles auswählen

import Tkinter as tk
 
erfuellt = False
 
def func():
    #hier rein was erfuellt werden soll
    global erfuellt
    erfuellt = True

def schleife():
    while not erfuellt:
        print 'bla'

root = tk.Tk()
butt = tk.Button(root, text="Button", command=func)
butt.pack()

schleife()

root.mainloop()
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Dein Script funktioniert so nicht Silentbreaker, weil root.mainloop() erst nach der schleife gestartet wird, die ja aber solange läuft bis sie beendet wird... das geht ja nur wenn root.mainloop() läuft...

Wie wäre es hiermit?
Hier drückst du solange die Buttons bis ein bestimmtes Ereignis eintritt....
allerdings mal wieder ohne while-schleife (du hast ja auch noch nicht gesagt wofür du die brauchst ;) )

Code: Alles auswählen

#!/usr/bin/python

import Tkinter as tk

root = tk.Tk()
liste = []

def func(input):
    global liste
    liste.append(input)
    if len(liste)>3:
        print "Du hast folgende Tasten gedrueckt: ", liste
        liste = []

butt1 = tk.Button(root,text="Button 1",command=lambda: func(1)).pack()
butt2 = tk.Button(root,text="Button 2",command=lambda: func(2)).pack()
butt3 = tk.Button(root,text="Button 3",command=lambda: func(3)).pack()
butt4 = tk.Button(root,text="Button 4",command=lambda: func(4)).pack()

root.mainloop()
silentbreaker
User
Beiträge: 7
Registriert: Montag 3. April 2006, 17:58

knekke hat geschrieben:Dein Script funktioniert so nicht Silentbreaker, weil root.mainloop() erst nach der schleife gestartet wird, die ja aber solange läuft bis sie beendet wird... das geht ja nur wenn root.mainloop() läuft...
stimmt, hab es auf die schnelle in der IDLE getestet. Und da läuft es ja auch so. Nebenbei aber auch noch vergessen, dass man ja kein mainloop() in der IDLE benutzen soll... :roll: Na ja, so ist das wenn man es eilig hat.
oscar15
User
Beiträge: 67
Registriert: Freitag 3. März 2006, 15:43
Wohnort: Kölle

ich glaub wir reden immer noch vorbei, ich probiers noch einmal und wenn es dann nicht klappt bin ich ein hoffnungsloser fall!!

naja mein einziges Problem ist nicht die ausgabe, sondern, dass die buttons in einer Schleife stehen und als input dienen sollen.

Das Problem ist nur, dass die Schleife mir nicht die zeit lässt zu warten sondern einfach durchrauscht, ohne mich auch nur den button geklickt zu haben!
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

Achtung, extrem schlampiger code:

Code: Alles auswählen

#!/usr/bin/python
 
import Tkinter as tk
a=5
root = tk.Tk()
warteAufMich = tk.IntVar()
warteAufMich.set(1)

def yo():
    global warteAufMich, a
    warteAufMich.set(1)
    a -= 1
 
def main():
    global a, root, warteAufMich
    while a>0:
        print a
        root.waitvar(warteAufMich) 
    print "Ziel erreicht!"
    a = 5
    
butt = tk.Button(root, text="start", command=lambda: main()).pack()
butt1 = tk.Button(root, text="Input", command=lambda: yo()).pack()

root.mainloop()
'waitvar()' ist das was du suchst ....aber ich kann dir dazu nix erklären, da ich das selber gerade kennengelernt habe. Hab' auch keine Ahnung ob es hier richtig verwendet wurde, aber es funktioniert erstmal. Bitte um Berichterstattung, wenn du weisst wie man das richtig benutzt...
oscar15
User
Beiträge: 67
Registriert: Freitag 3. März 2006, 15:43
Wohnort: Kölle

lol, ich würde ja gern sagen, dass es klappt und sicher klappt, es auch...naja...aber ich bekomme, die buttons jetzt nicht ausgegeben!!^^
Benutzeravatar
knekke
User
Beiträge: 100
Registriert: Freitag 29. Oktober 2004, 17:23
Wohnort: Schweden

und ich wuerde dir ja auch gerne sagen, dass ich dir an dieser Stelle helfen kann ohne deine Code zu sehen..... aber naja, das klappt leider nicht :wink:
oscar15
User
Beiträge: 67
Registriert: Freitag 3. März 2006, 15:43
Wohnort: Kölle

oki, jetzt ist es spät, schicke ihn morgen!! ;)
Bernhard
User
Beiträge: 136
Registriert: Sonntag 15. Januar 2006, 20:31
Wohnort: Greifswald
Kontaktdaten:

Das scheint ein wirklich, wirklich geheimes Projekt zu sein, an dem Du da arbeitest.
oscar15
User
Beiträge: 67
Registriert: Freitag 3. März 2006, 15:43
Wohnort: Kölle

sry ich schaff es leider nicht mehr vor dem urlaub reinzustellen!

Und geheim soll es nicht unbedingt sein, wir haben nur ein wenig (*gg*) an einanderer vorbei geredet!!

sonnige Grüße
Antworten