2016-08-01 11 views
0

Ich möchte den Wert einer Skala erhalten und Rechtecke so viele wie der Wert ist erstellen. Wenn ich beispielsweise die Skalierung auf die Zahl 7 einstelle, werden 7 Rechtecke nebeneinander erstellt, und wenn ich dann den Skalierungswert auf 3 anpasse, werden die in der Zeichenfläche angezeigten Rechtecke in diesem Moment auf drei reduziert.Wie erstellt man Rechtecke, indem man die Skalenwerte zu der Zeit in tkinter bekommt?

from tkinter import * 
from tkinter import ttk 

class rect: 
    def __init__(self, root): 
     self.root = root 
     self.size = IntVar() 
     self.canvas = Canvas(self.root, width=800, height=300) 
     self.scale = Scale(self.root, orient=HORIZONTAL, from_=3, to=20, tickinterval=1, variable=self.size) 
     self.show() 

    def show(self): 
     x = 50 
     y = 50 
     for i in range(self.scale.get()): 
      self.canvas.create_rectangle(x, y, x + 50, y + 50, fill='red') 
      x += 50 
     self.canvas.pack() 
     self.scale.pack() 


root = Tk() 
a = rect(root) 
root.mainloop() 

Ich glaube, ich habe verwenden trace Methode, aber ich weiß nicht, wie man: Ich hatte den Code verwendet. Kann jemand den Code reparieren, den ich in der Weise benutzte, die ich erklärte. Danke.

+0

Sie tun Soll der Bildschirm beim Ziehen der Skala aktualisiert werden? Nachdem es aufhört zu ziehen? Nachdem die Maustaste losgelassen wurde? Wie sollte das Programm wissen, wann der Bildschirm neu gezeichnet werden muss? –

+0

Ja. Das brauche ich. Ich möchte, dass sie aktualisiert werden, nachdem die Skala gezogen und die Maustaste losgelassen wurde. –

Antwort

0

Eine Lösung ist, an <ButtonRelease> zu binden, und rufen Sie Ihre show Methode dort auf. Da Ereignisbindungen ein Objekt übergeben, das das Ereignis darstellt, müssen Sie dieses optionale Argument angeben, wenn Sie auch show ohne Argumente aufrufen möchten.

Zum Beispiel:

class rect: 
    def __init__(self, root): 
     ... 
     self.scale = Scale(...) 
     self.scale.bind("<ButtonRelease>", self.show) 

Ich vermute, Sie werden alle zuvor gezogenen Rechtecke entfernen möchten, so dass Sie delete zu nennen brauchen, bevor Sie die Rechtecke zu schaffen:

def show(...): 
    self.canvas.delete("all") 
    ... 
+0

Vielen Dank für die klare Erklärung. du bist der beste! –

Verwandte Themen