so ich habe mal wieder ein frage! mal? naja....
ich hab das Problem, dass ich eine graphische ausgábe mache und ich meine inputs durch buttons bekomme, doch mein Programm macht einfach weiter ohne auch nur auf einen Input zu warten!
gib es nicht einen Befehl, dass das Programm sollange warten soll, bis ein ein button geklickt wurde, weil ich kann auch während es in der Schleife festhängt nicht den Button betätigen!
danke schon mal
Programm soll auf den Button-klick warten!
Ich kann mich dunkel erinnern, dass ich so ein Problem auch mal mit TkInter hatte (wenn du das überhaupt benutzt). Ich habe dann lambda in dem Button-command benutzt. In etwa so:
Ob das elegant ist oder überhaupt Not tut?? Keine Ahnung, aber es hat funktioniert....
Code: Alles auswählen
butt = Button(rot,text="text",width=5,command=lambda: machWas()).grid(row=0,column=0)
1. bei mir muss ich cv statt rot eingeben
2. was soll ich für machWas einsetztem?
normal hab ich es so:
2.
Code: Alles auswählen
command=lambda: machWas()
normal hab ich es so:
Code: Alles auswählen
def text():
blabla
bbutt = Button(cv, text="text", command=text)
wbutt = Window(cv, 900, 50, anchor="nw", window=bbutt)
Keine Ahnung, ob es dafür einen Befehl gibt. Aber als notlösung könntest du eine Variable 'isClicked' erzeugen, die am anfang der Schleife immer auf FALSE gesetzt wird. Und in die Funktion die der Button aufruft schreibst du 'isClicked = TRUE'.
das problem ist ja, dass ich die schleife immer weiter un weiter geht und ich den buton nicht betätigen kann!
Sie wiederholt sich immer und immer wieder und ich bekomme net die chance den button zu betätigen!!^^
ich bin maa wech
n8
Flo
Sie wiederholt sich immer und immer wieder und ich bekomme net die chance den button zu betätigen!!^^
ich bin maa wech
n8
Flo
klingt nach nem schwer vermurksten aufbau wenn der button nicht klickbar ist.
Trenne den GUI idle loop von der ausführung, ansonsten wirst du immer probleme mit nicht reagierenden widgets haben.
Ohne das du hier jetzt echten code postest wird dir auch niemand helfen können - im besonderen das "while button" konstrukt
Trenne den GUI idle loop von der ausführung, ansonsten wirst du immer probleme mit nicht reagierenden widgets haben.
Ohne das du hier jetzt echten code postest wird dir auch niemand helfen können - im besonderen das "while button" konstrukt
Ich benutze die Buttons als input! Alles in einer while schleife:
Code: Alles auswählen
def textd():
global a
a = 4
hf = Tk()
cv = Canvas(hf, width=4000, height=2200)
cv.pack()
while Prüf1 > 0 or PrüfII > 0:
bbutt = Button(cv, text="text", command=textd)
wbutt = Window(cv, 900, 50, anchor="nw", window=bbutt)
-
- User
- Beiträge: 136
- Registriert: Sonntag 15. Januar 2006, 20:31
- Wohnort: Greifswald
- Kontaktdaten:
Sorry, bin nicht der Profi, aber Dein Code erscheint mir sehr komisch: Da wird in jedem Schleifendurchlauf ein Button und ein Window konstruiert aber nicht ge-pack()-t. Würde der Button ge-pack()-t, dann würde eine Variable a auf 4 gesetzt aber an den Prüfvariablen der Schleife wird nichts verändert.
Kann es sein, dass Du einfach nur nach
app.mainloop() suchst?
Gruß,
Bernhard
Kann es sein, dass Du einfach nur nach
app.mainloop() suchst?
Gruß,
Bernhard
Mir erschliesst sich leider auch nicht so ganz was du eigentlich vohast und wofuer du die while-schleife brauchst. Evtl. kannst du hiermit was anfangen:
Keine while-schleife drin, und das global ist auch etwas ungluecklich, aber vielleicht hilft's ja....
Code: Alles auswählen
#!/usr/bin/python
import Tkinter as tk
root = tk.Tk()
a = 1
def func():
global a
a += 1
print a
if a > 10:
print "stop"
butt = tk.Button(root, text="Button", command=lambda: func()).pack()
root.mainloop()
jetzt weiss ich genau was du machen willst.....es ist ein Schleife die solange durchläuft, bis sie erfüllt wurde! logisch oder?
In ihr findet das Programm statt, von anfang bis ende!
warum pruefst du nicht bei jedem button-druck, ob das ereignis eingetreten ist? dann sparst du dir die while-schleife
also ich habe jetzt deine sache, di du angesprochen hast mal ausprobiert, also es klappt schon besser als meine oder auch nicht, naja:
1. Die Buttons werden bei jeder wdh zu den alten hinzugefügt
2. Wenn ich einen Button klicke bekomme ich folgende aussage:
1. Die Buttons werden bei jeder wdh zu den alten hinzugefügt
2. Wenn ich einen Button klicke bekomme ich folgende aussage:
- Exception in Tkinter callback
Traceback (most recent call last):
File "C:\....\lib-tk\Tkinter.py", line 1345, in __call__
return self.func(*args)
File "C:\....\Programm.py", line 351, in <lambda>
Butt = tk.Button(root, text="Button", command=lambda: text()).pack()
TypeError: 'int' object is not callable
?? Du meinst bei jedem Knopfdruck wird a um 1 erhoeht?? Ist das gut oder schlecht?1. Die Buttons werden bei jeder wdh zu den alten hinzugefügt
werde ich nicht wirklich schlau draus. koennte es sein, das du Tkinter nicht als tk importiert hast??File "C:\....\Programm.py", line 351, in <lambda>
Butt = tk.Button(root, text="Button", command=lambda: text()).pack()
TypeError: 'int' object is not callable[/list]
wieso, weshalb, warum....3. das Programm muss mehrmals ausgeführt werden!!!
Das ist wie in einem quiz hier... ich habe immernoch keine ahnung was du willst.....
Es sit so, dass ich zwar die Buttons sehe, aber bei jeder ausführung der Schleife kommen unten drunter nochmal die buttons, also bei ersten mal hab ich sagen wir mal 5 Buttons danach 10, dann 15.......
Auch hab ich das selbe Prob wie am anfang! Mein Programm wartet einfach nicht, bis ein button geklickt wurde, da ändert leider deine Schreibweise auch nicht dran! Es rennt einfach durch....
Auch hab ich das selbe Prob wie am anfang! Mein Programm wartet einfach nicht, bis ein button geklickt wurde, da ändert leider deine Schreibweise auch nicht dran! Es rennt einfach durch....
Ich will dir ja gerne helfen, aber so spaerlich wie du deine informationen raushaust ist das echt nicht leicht. Soweit ich dich verstanden habe will deine schleife so lange input bis ein bestimmtes Ereignis eintritt!? Input erfolgt ueber einen Button? Willst du zaehlen wie oft der Button gedrueckt wurde, oder was soll das fuer input sein? Hat das Ereignis etwas mit dem input zu tun, oder kommt das woanders her (z.B. eine bestimmte Zeit ist abgelaufen).
Bislang wuerde ich es so machen, dass ich bei jedem Buttondruck eine funktion aufrufe, in der dann auch geprueft wird, ob dieses ominoese Ereignis bereits eingetreten ist... also ohne while schleife ... da ich aber keinen blassen schimmer habe was du vorhast weiss ich nicht ob dir das weiterhilft. Passiert denn in der schleife noch etwas anderes ausser den input abzufangen?? Auch bin ich bei weitem kein Python-experte, und es kann gut sein, dass es fuers warten auf einen Buttondruck eine einfache methode gibt, aber googlen oder die boardsuche muesstest du dann schon selber bemuehen....
Bislang wuerde ich es so machen, dass ich bei jedem Buttondruck eine funktion aufrufe, in der dann auch geprueft wird, ob dieses ominoese Ereignis bereits eingetreten ist... also ohne while schleife ... da ich aber keinen blassen schimmer habe was du vorhast weiss ich nicht ob dir das weiterhilft. Passiert denn in der schleife noch etwas anderes ausser den input abzufangen?? Auch bin ich bei weitem kein Python-experte, und es kann gut sein, dass es fuers warten auf einen Buttondruck eine einfache methode gibt, aber googlen oder die boardsuche muesstest du dann schon selber bemuehen....