=====Python 3 und tk - Benutzer Interface erstellen===== Ein erstes Beispielprogramm mit Event Handling Maus und Tastatur: """ Demo Programm um die verschiedenen Möglichkeiten einer GUI in Python 3 mit tk zu ermitteln """ import tkinter,tkinter.ttk # Methoden um die verschiedenen Events zu händeln def local_exit(): mainWindow.destroy() def local_changeColor(): pass def local_changeProperty(): label1checkBox1["text"]=str(property1.get()) def local_convertText(): pass def local_readFile(): filename = tkinter.filedialog.askopenfilename(parent=mainWindow,title='Wähle eine Datei aus') inputTextFeldMulti.insert("end",filename) def local_pressKey(e): label2TField["text"] = "Zeichen: " + e.char def local_showListbox(): label1listBox1["text"]=listBox1.get("active") def local_getRBValue(): label1radioButton3["text"]=color.get() def local_showScale(self): label1scale1["text"]=scaleValue.get() def local_readComboBox(self): label1combobox1["text"]=boxValue.get() #Mouse handling def local_mMove(e): labelImage2["text"]= "x::"+str(e.x)+" y::"+str(e.y) def local_mLinks(e): labelImage2["text"]= "Mouse Right on x::"+str(e.x)+" y::"+str(e.y) def local_mRechts(e): labelImage2["text"]= "Mouse Left on xx::"+str(e.x)+" y::"+str(e.y) # zeige auf dem Bild ein Context Menü an gm = mainWindow.geometry() #Position im Context des Hauptfensters - nicht ideal.... #Fix it positionen = gm.split("+") contextMenuFarbe.tk_popup(int(positionen[1]) + 60 + e.x + 8, int(positionen[2]) + 30 + e.y + 30) # Messages Boxen anzeigen def local_MessageInfo(): tkinter.messagebox.showinfo("Info", "Eine Information") def local_MessageWarning(): tkinter.messagebox.showwarning("Warnung", "Eine Warnung") def local_MessageError(): tkinter.messagebox.showerror("Fehler", "Ein Fehler") def local_MessageYesNo(): antwort = tkinter.messagebox.askyesno("Ja/Nein", "Ja oder Nein") if antwort == 1: tkinter.messagebox.showinfo("Ja", "Positiv") else: tkinter.messagebox.showinfo("Nein", "Negativ") def local_MessageQuestion(): antwort = tkinter.messagebox.Message(mainWindow ,type=tkinter.messagebox.ABORTRETRYIGNORE ,icon=tkinter.messagebox.QUESTION ,title="Abbrechen + Wiederholen + Ignorieren" ,message="Suchen Sie sich etwas aus").show() if antwort == "abort": tkinter.messagebox.showinfo("Antwort", "Abbrechen") elif antwort == "retry": tkinter.messagebox.showinfo("Antwort", "Wiederholen") else: tkinter.messagebox.showinfo("Antwort", "Ignorieren") #Hauptfenster erzeugen mainWindow=tkinter.Tk() mainWindow.title("Demo Programm TK Python") #-------------------------------------- #Statusbar einfügen #Für eine Statusbar muss ein eigenes Fenster eingeführt werden #in das Fenster wird dann später das das Grid Layout eingefügt #pack und grid layout können nicht gemischt werden! # winMain =tkinter.Frame(mainWindow) winMain.pack() winMain.grid_columnconfigure(0, weight=1) winMain.grid_rowconfigure(1, weight=1) #Satus Bar anlegen statusBar = tkinter.Label(mainWindow, text="", bd=1, relief=tkinter.SUNKEN, anchor=tkinter.W) # so nur wenn kein Grid Layout statusBar.pack(side=tkinter.BOTTOM, fill=tkinter.X) #statusBar.grid(row=0,column=0,sticky="we") #-------------------------------------- #Menüleiste zum Hauptfenster hinzufügen #Menü erzeugen mBar=tkinter.Menu(mainWindow) #Eine Menü Liste mit normalen Einträgen erstellen mFile=tkinter.Menu(mBar) #Menü Elemente einfügen mFile.add_command(label="Neu" , underline=0) mFile.add_command(label="Speichern" , underline=0) mFile.add_separator() mFile.add_command(label="Beenden" ,command=local_exit ,underline=0) # Dem Hauptmenü diese Liste hinzufügen mBar.add_cascade(label="Datei",menu=mFile, underline=0) #Eine Menü Liste mit Checkbox/Radio Button Verhalten erstellen #widget Variablem zum Speichern der Auswahlwerte color= tkinter.StringVar() color.set("#FF0000") property1 = tkinter.IntVar() property1.set(0) #Neues Menüliste mView=tkinter.Menu(mBar) mView.add_radiobutton(label="Rot" ,variable=color ,value="#FF0000" ,underline=0 ,command=local_changeColor) mView.add_radiobutton(label="Gelb" ,variable=color ,value="#00FF00" ,underline=0 ,command=local_changeColor) mView.add_radiobutton(label="Blau" ,variable=color ,value="#0000FF" ,underline=0 ,command=local_changeColor) mView.add_separator() mView.add_checkbutton(label="Eigenschaft A setzen", variable=property1, onvalue=1, offvalue=0, underline=5,command=local_changeProperty) # Dem Hauptmenü diese Liste hinzufügen mBar.add_cascade(label="Ansicht",menu=mView, underline=0) #Dem Hauptfenster das gesamte Menü zuordnen mainWindow["menu"]= mBar # #-------------------------------------- #-------------------------------------- # # 6 Frames für die Aufnahme der möglichen Elemente erzeugen # Diese Frames mit einem Grid Layout so anordnen # |1|2|3 # |4|5|6 # |7|8|9 frame1=tkinter.Frame(winMain,width=200,height=100,relief="ridge",bd=1) frame1.grid(row=0,column=0) frame2=tkinter.Frame(winMain,width=200,height=100,relief="ridge",bd=1) frame2.grid(row=0,column=1) frame3=tkinter.Frame(winMain,width=200,height=100,relief="ridge",bd=1) frame3.grid(row=0,column=2) frame4=tkinter.Frame(winMain,width=200,height=100,relief="ridge",bd=1) frame4.grid(row=1,column=0) frame5=tkinter.Frame(winMain,width=200,height=100,relief="ridge",bd=1) frame5.grid(row=1,column=1) frame6=tkinter.Frame(winMain,width=200,height=100,relief="ridge",bd=1) frame6.grid(row=1,column=2) frame7=tkinter.Frame(winMain,width=200,height=100,relief="ridge",bd=1) frame7.grid(row=2,column=0) frame8=tkinter.Frame(winMain,width=200,height=100,relief="ridge",bd=1) frame8.grid(row=2,column=1) frame9=tkinter.Frame(winMain,width=200,height=100,relief="ridge",bd=1) frame9.grid(row=2,column=2) #-------------------------------------- # # Text Eingabe Feld in Frame 1 mit Button # #Label neben dem Textfeld erzeugen labelTField=tkinter.Label(frame1,text="Text:1") labelTField.grid(row=0,column=0) inputTField=tkinter.Entry(frame1) # Gesamten Platz in der zweiten Spalte ausfüllen inputTField.grid(row=0,column=1,sticky="we") #Button unter dem Text Feld but1TField=tkinter.Button(frame1,text="Convert Text",command=local_convertText) #Mittig unter den beiden Elementen but1TField.grid(row=1,column=0,columnspan=2) #Tastatur auf das Textfild binden inputTField.bind("", local_pressKey) inputTField.bind("", local_pressKey) inputTField.bind("", local_pressKey) inputTField.bind("", local_pressKey) #Label unter dem Textfeld erzeugen label2TField=tkinter.Label(frame1,text="-------") label2TField.grid(row=3,column=0,columnspan=2,sticky="we") # #-------------------------------------- # Bild in Frame 2 anzeigen # Maus Position über dem Bild anzeigen # Einfach in den Frame mit pack hinzufügen #Image einbinden labelImage1=tkinter.Label(frame2) #Referenz auf eine Bilddatei image1=tkinter.PhotoImage(file="d:\wiki\mandelbrot_01.png") #dabei etwas skalieren image2=image1.subsample(5, 5) #Bild einfügen und labelImage1["image"]=image2 labelImage1.pack() #Unter dem Bild ein Label einfügen labelImage2=tkinter.Label(frame2,text="maus über den Bild bewegen") labelImage2.pack() #Bewegung der Maus einbinden labelImage1.bind("" ,local_mMove) labelImage1.bind("