Nun zu meinem Problem. Ich habe Anfangs aufgrund eines Buches ein wenig mit Pygame gebastelt. Allerdings bin ich dann schnell rüber zu Tkinter um erstmal die Basics zu beherrschon und Spiele waren eh nicht mein Ziel. Und hier tue ich mir gerade noch ein wenig schwer wenn man von Tkinter eine Objekt Klasse erzeugen möchte und wie man das richtig richtig anstellt damit das sauber ist.
Bisher hatte ich das meist nur prozedural?! gestrickt und das lief soweit auch ganz gut. Aber wenn ich das richtig verstehe und der Code sauber sein soll, dann sollte ich das mit OOP angehen und alle programme die ich schreibe imprinzip über if __main__ == '__name__': laufen lassen damit man klassen z.b. später auch importieren kann und der code obendrein sauber zu lesen ist, wenn ich das richtig verstehe. Allerdings bin ich mir noch nicht ganz sicher wie ich dann die Klassen untereinander anspreche, wo die Tkinter Elemente hingehören und wo nicht.
Ich habe jetzt mal den Thread Tkinter Zeichenfeld als Anlass genommen und versucht eine rudimentäre Lösung zu stricken, nur bin mir z.B unsicher ob Bind z.B in der richtigen Funktion liegt. Irgendwie habe ich dir befürchtung das ich da noch etwas ziemlich falsch angehe, kann aber nicht sagen was. Wäre klasse wenn dort mal jemand drüberschauen könnte und mir das auseinandernimmt.
Und über einen Link zu einem überschaubarem Beispiel Programm mit Tkinter und was vorbildlich aufzeigt wie das auszusehen hat würde ich mich ebenfalls freuen.
Code: Alles auswählen
import Tkinter as tk
class MainWindow():
def __init__(self, master):
self.master = master
self.frame = tk.Frame(self.master)
self.frame.pack()
self.master.title("GUI")
self.master.geometry("600x600")
self.canvas = tk.Canvas(self.frame, width=600, height=600, bg="white")
self.canvas.pack(side="top",expand=True, fill="both")
def draw(self,event):
x1, y1 = (event.x - 1),(event.y - 1 )
x2, y2 = (event.x + 1),(event.y + 1)
self.canvas.create_oval(x1,y1,x2,y2, fill="black")
def main():
root = tk.Tk()
app = MainWindow(root)
app.canvas.bind("<B1-Motion>", app.draw)
root.mainloop()
if __name__ == '__main__':
main()