Ich muss eine Aufgabe lösen und bin (meiner Meinung nach) schon sehr weit gekommen, aber ich komm bei ein paar Punkten nicht weiter...
Meine Aufgabe ist: Ein Tkinter Programm zum Zeichnen programmieren, es gibt 2 Buttons, von denen immer einer geklickt ist:
-"O" : Wenn dieser Button geklickt ist, werden bei Mausklick auf dem Zeichenfeld Kreise gezeichnet
-"|" : Wenn dieser Button geklickt ist, werden bei Mausklick Linien gezeichnet (Es sollen eigentlich Verbindungslinien zwischen den Kreisen sein, aber ich habe noch nicht raus gefunden wie das geht...)
Ich habe mein Fenster schon so designt wie es aussehen soll (Menü, Button, Größe, Farbwahl...), aber ich verstehe nicht wie ich das mit den Buttons und den commands mache, also dass ein Button geklickt ist, dann werden Kreise gezeichnet, und wenn man auf den anderen klickt werden nur noch Linien gezeichnet... Ich hatte einen sehr schlechten Tutor auf der Uni und es wurden uns keine hilfreichen Unterlagen zur Verfügung gestellt... ich bin schon sehr stolz dass ich es mit dem Programm überhaupt soweit geschafft habe (nach stundenlang im Internet nach vergleichbaren Funktionen zu suchen), vielleicht erkennt jemand von euch mein Problem....
Code: Alles auswählen
from tkinter import *
class Zeichenflaeche(Frame):
def __init__(self,parent):
Frame.__init__(self,parent)
self.parent = parent
self.color='blue'
# Canvas
self.canvas = Canvas(parent,width=800,height=600,bg='white')
#Funktionen anbinden um Kreise zu zeichnen
self.canvas.bind('<Button-1>', self.klicken)
self.canvas.bind('<ButtonRelease-1>', self.klicken)
self.canvas.bind('<Button-2>', self.linie)
self.canvas.bind('<ButtonRelease-2>', self.linie)
self.button1=ttk.Button(parent, text='O', command=self.button_clicked)
self.button1.bind('<1>')
self.button1.pack()
self.button2=ttk.Button(parent, text='|', command=self.button_clicked)
self.button2.bind('<2>')
self.button2.pack()
# Menu
menu = Menu(parent)
parent.config(menu=menu)
filemenu = Menu(menu,tearoff=0)
menu.add_cascade(label="Datei",menu=filemenu,underline=0)
filemenu.add_command(label="Neu", command=self.initCanvas,underline=0,accelerator='Strg+N')
filemenu.add_separator()
filemenu.add_command(label="Beenden", command=root.quit,underline=0,accelerator='Strg+Q')
viewmenu = Menu(menu,tearoff=0)
menu.add_cascade(label="Ansicht", menu=viewmenu,underline=0)
viewmenu.add_command(label="Farbe wählen...", command=self.chooseColor,underline=0,accelerator='Strg+F')
helpmenu = Menu(menu,tearoff=0)
menu.add_cascade(label="Hilfe", menu=helpmenu,underline=0)
helpmenu.add_command(label="Über...", command=self.aboutApp,underline=0)
# Accelerator-Bindungen
root.bind_all('<Control-n>',self.accNew)
root.bind_all('<Control-q>',self.accQuit)
root.bind_all('<Control-f>',self.accChooseColor)
self.canvas.pack()
def klicken(self, event):
self.canvas.create_oval(event.x, event.y, event.x+50, event.y+50, fill=self.color)
def linie(self, event):
if str(event.type)=='ButtonPress':
self.canvas.old_coords=event.x, event.y
elif str(event.type)=='ButtonRelease':
x, y= event.y, event.y
x1, y1= self.canvas.old_coords
self.canvas.create_line(x,y,x1,y1)
def button_clicked(self):
if str(self.button1['state']) == 'normal':
self.klicken()
elif str(self.button2['state']) == 'normal':
self.linie()
def loslassen(self, event):
self.geklickt=False
def initCanvas(self):
self.canvas.delete(ALL)
def chooseColor(self):
(triple,hexcode) = colorchooser.askcolor()
if hexcode:
self.color = hexcode
self.klicken()
def aboutApp(self):
messagebox.showinfo("Zeichenblatt","Das ist ein Zeichenblatt zum Zeichnen mit Kreisen und Linien")
def accNew(self,event):
self.initCanvas()
def accQuit(self,event):
root.quit()
def accChooseColor(self,event):
self.chooseColor()
root = Tk()
root.title("Zeichenblatt")
app = Zeichenflaeche(root)
root.mainloop()