2016-04-21 5 views
0

Я пытаюсь сделать кнопки в моей программе для выполнения действия, но я не на 100%, как это сделать. Я создал кнопки, надеюсь, их правильные, но просто нужно дать совет о том, как заставить их работать! поэтому, когда я нажимаю кнопку «добавить прямоугольник», он должен добавить случайный прямоугольник в случайном положении наоборот для удаления.Сделать кнопки работать на холсте (tkinter)

from tkinter import * 
import random 
root = Tk() 

class Recta: 

def __init__(self, height, width): 
    self.height=60 
    self.width=80 
def randomRects(self,canvas): 
    w = random.randrange(80) 
    h = random.randrange(60) 
    canvas.create_rectangle(0,0,h,w,fill='green') 

def create_buttons(self,canvas): 
    frame = Frame(root, bg='grey', width=400, height=40) 
    frame.pack(fill='x') 
    frame = Frame(root, bg='grey', width=400, height=40) 
    frame.pack(fill='x') 
    button1 = Button(frame, text='Add Rect') 
    button1.pack(side='left', padx=10) 
    button2 = Button(frame, text='Remove Rect') 
    button2.pack(side='left') 

def removeRects(self,canvas): 
    self.myRect = canvas.create_rectangle(0, 0, w, h, fill='green') 
    canvas.delete(self.myRect) 

c = Canvas(root) 
c.pack() 

tes = Recta(10,20) 
tes.randomRects(c) 
tes.create_buttons(1) 
root.mainloop() 
+0

Почему вы передаете 1 функции create_buttons? – Li357

+0

извините, что не должно было быть 1 – razorcode7

+0

. Каково использование параметра canvas? – Li357

ответ

1

Ваш код требует серьезной реорганизации.

Это то, что работает, чтобы добавить прямоугольники. вы не предоставили метод remove rectangle, поэтому я позволю вам написать его - в этот момент delete button звонит randomRect; вам, вероятно, потребуется отслеживать созданные вами прямоугольники в какой-то коллекции, чтобы их можно было удалить.

from tkinter import * 
import random 
root = Tk() 

class Recta: 

    def __init__(self, height=60, width=80): 
     self.height = height 
     self.width = width 
     self.create_buttons() 
     self.canvas = Canvas(root) 
     self.canvas.pack() 


    def create_buttons(self): 
     self.frame = Frame(root, bg='grey', width=400, height=40) 
     self.frame.pack(fill='x') 

     self.button1 = Button(self.frame, text='Add Rect', command=self.randomRects) 
     self.button1.pack(side='left', padx=10) 
     self.button2 = Button(self.frame, text='Remove Rect', command=self.randomRects) 
     self.button2.pack(side='left') 


    def randomRects(self): 
     w = random.randrange(300) 
     h = random.randrange(200) 
     self.canvas.create_rectangle(0, 0, w, h, fill='green') 


tes = Recta() 
root.mainloop() 
+0

На удалении вы можете сохранить прямоугольник в переменной, а затем вызвать canvas.delete (rectangle) – Li357

+0

okay sweet спасибо, что так много парней вернутся на Это ! – razorcode7

+0

эй, жаль, ребята, я просто сделал свою функцию удаления, и я, похоже, получаю ту же ошибку «canvas» >>> TypeError: removeRects() missing 1 обязательный позиционный аргумент: 'canvas' – razorcode7