nach langer Delphi-Pause nun zurück zu Python.
Bei folgendem Programm habe ich ein wahrscheinlich tiefes Veständnisproblem:
Code: Alles auswählen
#-*- coding: cp1252 -*-
#Grundgerüst für allgemeingültige GUI
import Tkinter
import tkMessageBox
import math
import random
import thread
import time
#Konstanten definieren
Schleifenzahl=1000
xAnfang=20
yAnfang=200
Versatz=0.5
Amplitude=100
Groesse=50
Teiler=10.0
#allgemeine Funktionen
def Buttonlogik_Aus():
btnStart['state']="disabled"
btnEnde['state']="disabled"
print "disabled"
def Buttonlogik_An():
btnStart['state']="normal"
btnEnde['state']="normal"
print "normal"
def Zufallsfarbe(): #gibt 16-bit Zufallszahlenfarbe aus
Zufallsfarbe=""
for i in range(0,12):
Zufall=hex(int(random.random()*255)).lstrip("0x")
if len(Zufall)==0:
Zufall="00"+Zufall #falls nullziffrig wird verlängert
if len(Zufall)==1:
Zufall="0"+Zufall #falls einziffrig wird verlängert
Zufallsfarbe=Zufallsfarbe+Zufall
Zufallsfarbe="#"+Zufallsfarbe
return Zufallsfarbe
#Ende allgemeine Funktionen
#Hier die Testfunktion(en)!
def Zeichnen():
for i in range(Schleifenzahl):
x1=xAnfang+i*Versatz
x2=x1+Groesse
y1=yAnfang+math.sin(i/Teiler)*Amplitude
y2=y1+Groesse
Farbe=Zufallsfarbe()
cnvGrafik.create_oval(x1,y1,x2,y2, fill=Farbe, outline=Farbe)
#Funktionsdefinitionen für die Widget-Commands
def btnStart_Click(): #Das ist die zu testende Funktion nach Druck auf "Start"
Buttonlogik_Aus()
Zeichnen()
Buttonlogik_An()
# in einem Thread starten:
#thread.start_new_thread(Zeichnen,())
def btnEnde_Click():
Antwort=tkMessageBox.askokcancel("Programm beenden", "Sind Sie sicher?")
if Antwort==True:
Haupt.quit()
#GUI
#Hauptfenster installieren
Haupt=Tkinter.Tk()
Haupt.title("GUI für Tests 0.1")
Haupt.geometry("800x600")
#die Widgets erzeugen
#Zeichenfläche, eingebettet in einen Rahmen
fraRahmen=Tkinter.Frame(Haupt, relief="raised", borderwidth="1")
cnvGrafik=Tkinter.Canvas(fraRahmen, width="640", height="480", bg="white")
#leeres Label zum Positionieren (blinde Leerzeile)
lblBlind=Tkinter.Label(Haupt)
#zwei Schalter zum interagieren
btnStart=Tkinter.Button(Haupt, text="Start", command=btnStart_Click)
btnEnde=Tkinter.Button(Haupt, text="Ende", command=btnEnde_Click)
#Widgets anzeigen
fraRahmen.grid(column="1", row="0", columnspan="5", sticky="ew")
cnvGrafik.grid()
lblBlind.grid(column="0", row="1", columnspan="7")
btnStart.grid(column="2", row="2", sticky="ew")
btnEnde.grid(column="4", row="2", sticky="ew")
#Ende GUI
#Start Hauptschleife Tk-Fenster
Haupt.mainloop()
Wo ist mein Fehler?
Muss ich der GUI "Prozessorzeit" geben, so wie bei Delphi mit
Code: Alles auswählen
Application.ProcessMessages;
Viele Grüße & Danke im Voraus,
Tom