삭제를 사용하여 캔버스에서 개체를 제거하는 Tkinter

최대

캔버스에서 개체를 삭제하는 방법을 이해하는 데 어려움이 있습니다. 로켓 오브젝트는 Class Rocket단순한 타원 에서 생성되며 단순한 타원형입니다. 이벤트 후 캔버스에서이 개체를 제거하기 위해 canvas.delete()인수가 설정된 메서드 를 사용하려고 rocket하지만 작동하지 않는 것 같습니다.

내 목표는 목록에 여러 개의 로켓을 만들고 애니메이션 중에 일부를 삭제하는 것입니다.

main () 함수 만 포함했습니다. Class Rocket은 캔버스에 타원형을 만들고 잘 작동합니다.

파일 : constants.py

CANVAS_WIDTH = 600      # Width of drawing canvas in pixels
CANVAS_HEIGHT = 600     # Height of drawing canvas in pixels
ROCKET_SIZE = 30

파일 : test.py

import tkinter
import time
import random
from constants import *
from Rocket import Rocket

def main():
    canvas = make_canvas(CANVAS_WIDTH, CANVAS_HEIGHT, 'Fireworks')

    #put a rocket a bottom of canvas
    rocket = Rocket(canvas)
    canvas.update()
    time.sleep(50/50.)  #pause to see the rocket

    # some event occurs (not important for this example)

    canvas.delete(rocket)  #this doesn't make the rocket disappear!
    canvas.update()
    time.sleep(50/50.)

def make_canvas(width, height, title):

    top = tkinter.Tk()
    top.minsize(width=width, height=height)
    top.title(title)
    canvas = tkinter.Canvas(top, width=width + 1, height=height + 1)
    canvas.pack()
    return canvas

if __name__ == '__main__':
    main()

파일 : Rocket.py

import random
from constants import *

class Rocket:
    '''
    This is the blueprint for a new variable type called "Rocket"
    Every rocket has three things: an oval, a change_x and a change_y.
    Every rocket supports the "update" method which will move the rocket one step.
    '''
    def __init__(self, canvas):
        # Starting point - screen bottom with slight angle
        x_1 = random.randint(CANVAS_WIDTH/2 - 50, CANVAS_WIDTH/2 + 50)
        y_1 = CANVAS_HEIGHT - ROCKET_SIZE
        x_2 = x_1 + ROCKET_SIZE
        y_2 = CANVAS_HEIGHT
        self.fill = random.choice(['blue', 'green', 'orange', 'purple', 'red', 'lime'])
        self.oval = canvas.create_oval(x_1, y_1, x_2, y_2, fill=self.fill, outline=self.fill)
        self.change_x = random.randint(-3, 3)
        self.change_y = random.randint(-15, -5)

    # again, I pass in canvas.
    def update(self, canvas):
        # update a single rocket instance (the one given by self)
        canvas.move(self.oval, self.change_x, self.change_y)
최대

유용한 피드백과 더 많은 조사를 마친 후 첫 번째 해결책은 다음과 같습니다.

로켓 클래스에 다음을 추가하십시오-

    # method to get canvas object id (already assigned to self.oval in constructor)
    def get_id(self):
       return self.oval

다음 줄을 변경하십시오.

canvas.delete(rocket)

main ()에서 :

canvas.delete(rocket.get_id())

이것은 목록에 생성 된 여러 로켓에도 적용되었습니다.

나는 Class Rocket 내에서 로켓을 삭제하는 방법을 시도하지 않았지만 이것이 가장 우아한 해결책 인 것 같습니다. 어느 쪽이든 오브젝트 ID는 canvas.delete의 필수 인수입니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Toplevel () Tkinter에서 캔버스를 사용하여 버튼을 만드는 방법

분류에서Dev

캔버스에서 마지막으로 그린 개체를 삭제하는 JavaFX

분류에서Dev

Tkinter 캔버스에 그려진 개체를 동적으로 생성 / 삭제 하시겠습니까?

분류에서Dev

destroy ()를 사용하여 Tkinter의 그리드에서 Entrybox 삭제

분류에서Dev

Python 3.8을 사용하여 Tkinter에서 캔버스에 스크롤바를 만드는 방법

분류에서Dev

버튼을 사용하여 Fabric.js 캔버스에서 이미지를 제거하는 방법

분류에서Dev

Tkinter 캔버스 개체를 비활성화하는 방법

분류에서Dev

python tkinter에서 캔버스에 삭제 된 사진 복원

분류에서Dev

tkinter에서 캔버스와 create_image를 사용하여 이미지를 열 수 없습니다.

분류에서Dev

캔버스에서 개체를 무작위로 복제하는 방법

분류에서Dev

tkinter를 사용하여 캔버스에서 각 다각형의 각 지점을 추적

분류에서Dev

파일 브라우저에서 얻은 경로를 사용하여 tkinter의 캔버스 객체에 이미지를 표시하는 방법

분류에서Dev

Tkinter에서 캔버스 내에서 텍스트를 이동하는 방법

분류에서Dev

React Hooks를 사용하여 ReasonML에서 HTML 캔버스 사용

분류에서Dev

Lodash를 사용하여 중첩 배열에서 개체 제거

분류에서Dev

Math.min.apply를 사용하여 개체에서 0 제거

분류에서Dev

ListViewItem의 버튼을 사용하여 ListView에서 개체를 삭제하는 방법은 무엇입니까?

분류에서Dev

운동 js를 사용하는 캔버스의 여러 개체

분류에서Dev

LocalStorage는 JavaScript를 사용하여 개체에서 항목을 제거합니다.

분류에서Dev

세 개의 js를 사용하여 캔버스에서 개체의 위치 변경

분류에서Dev

NGXS를 사용하여 Angular에서 중첩 된 데이터의 개체 삭제

분류에서Dev

캔버스를 사용하여 PlotGrid에서 Delphi 그리기 선

분류에서Dev

여기서 "삭제"를 사용하면 실제로 개체가 삭제됩니까?

분류에서Dev

Java mongo 드라이버를 사용하여 컬렉션에서 개체 제거

분류에서Dev

C ++에서 개체를 삭제하면 삭제 된 개체 내의 개체가 삭제됩니까?

분류에서Dev

배열에서 삭제하고 개체를 삭제하는 방법

분류에서Dev

클래스를 사용하여 tkinter 캔버스에 다각형을 그리는 방법은 무엇입니까?

분류에서Dev

체크 박스를 사용하여 여러 행 삭제

분류에서Dev

데이터를 사용하기 전에 개체 삭제

Related 관련 기사

  1. 1

    Toplevel () Tkinter에서 캔버스를 사용하여 버튼을 만드는 방법

  2. 2

    캔버스에서 마지막으로 그린 개체를 삭제하는 JavaFX

  3. 3

    Tkinter 캔버스에 그려진 개체를 동적으로 생성 / 삭제 하시겠습니까?

  4. 4

    destroy ()를 사용하여 Tkinter의 그리드에서 Entrybox 삭제

  5. 5

    Python 3.8을 사용하여 Tkinter에서 캔버스에 스크롤바를 만드는 방법

  6. 6

    버튼을 사용하여 Fabric.js 캔버스에서 이미지를 제거하는 방법

  7. 7

    Tkinter 캔버스 개체를 비활성화하는 방법

  8. 8

    python tkinter에서 캔버스에 삭제 된 사진 복원

  9. 9

    tkinter에서 캔버스와 create_image를 사용하여 이미지를 열 수 없습니다.

  10. 10

    캔버스에서 개체를 무작위로 복제하는 방법

  11. 11

    tkinter를 사용하여 캔버스에서 각 다각형의 각 지점을 추적

  12. 12

    파일 브라우저에서 얻은 경로를 사용하여 tkinter의 캔버스 객체에 이미지를 표시하는 방법

  13. 13

    Tkinter에서 캔버스 내에서 텍스트를 이동하는 방법

  14. 14

    React Hooks를 사용하여 ReasonML에서 HTML 캔버스 사용

  15. 15

    Lodash를 사용하여 중첩 배열에서 개체 제거

  16. 16

    Math.min.apply를 사용하여 개체에서 0 제거

  17. 17

    ListViewItem의 버튼을 사용하여 ListView에서 개체를 삭제하는 방법은 무엇입니까?

  18. 18

    운동 js를 사용하는 캔버스의 여러 개체

  19. 19

    LocalStorage는 JavaScript를 사용하여 개체에서 항목을 제거합니다.

  20. 20

    세 개의 js를 사용하여 캔버스에서 개체의 위치 변경

  21. 21

    NGXS를 사용하여 Angular에서 중첩 된 데이터의 개체 삭제

  22. 22

    캔버스를 사용하여 PlotGrid에서 Delphi 그리기 선

  23. 23

    여기서 "삭제"를 사용하면 실제로 개체가 삭제됩니까?

  24. 24

    Java mongo 드라이버를 사용하여 컬렉션에서 개체 제거

  25. 25

    C ++에서 개체를 삭제하면 삭제 된 개체 내의 개체가 삭제됩니까?

  26. 26

    배열에서 삭제하고 개체를 삭제하는 방법

  27. 27

    클래스를 사용하여 tkinter 캔버스에 다각형을 그리는 방법은 무엇입니까?

  28. 28

    체크 박스를 사용하여 여러 행 삭제

  29. 29

    데이터를 사용하기 전에 개체 삭제

뜨겁다태그

보관