Python에서 캔버스에서 항목을 이동하기 위해 버튼을 어떻게 사용합니까?

R. 웨인

여기에 게시 된 예제 스크립트를 수정하려고합니다.

타원을 이동하는 보드 드로잉 코드

원래 스크립트를 사용하면 캔버스 주위에서 개체를 클릭하고 끌 수 있습니다. 버튼이 첫 번째 객체를 이동하도록 변경했지만 버튼 오류가 발생합니다. TypeError : button_move ()는 정확히 2 개의 인수를 취합니다 (1이 주어짐). 두 번째 인수가 무엇인지 이해할 수 없습니다.

수정 된 스크립트는 다음과 같습니다.

import Tkinter as tk

class Example(tk.Frame):
    '''Illustrate how to drag items on a Tkinter canvas'''

    def __init__(self, parent):
        tk.Frame.__init__(self, parent)

        # create a canvas
        self.canvas = tk.Canvas(width=400, height=400)
        self.canvas.pack(fill="both", expand=True)

        # this data is used to keep track of an 
        # item being dragged
        self._drag_data = {"x": 0, "y": 0, "item": None}

        # create a couple of movable objects
        self._create_token((100, 100), "white")
        self._create_token((200, 100), "black")

        # add bindings for clicking, dragging and releasing over
        # any object with the "token" tag
        self.canvas.tag_bind("token", "<ButtonPress-1>", self.on_token_press)
        self.canvas.tag_bind("token", "<ButtonRelease-1>", self.on_token_release)
        self.canvas.tag_bind("token", "<B1-Motion>", self.on_token_motion)
#-----------------------------------------------------------------------------
        self.canvas.button2 = tk.Button(self.canvas, text="Button Test",
                                 command=self.button_move)
        self.canvas.button2.config(bg="cyan",fg="black")
        self.canvas.button2.pack(side='top')

        self.canvas.tag_bind("button2", "<ButtonPress-1>", self.button_move)
#-----------------------------------------------------------------------------
    def _create_token(self, coord, color):
        '''Create a token at the given coordinate in the given color'''
        (x,y) = coord
        self.canvas.create_oval(x-25, y-25, x+25, y+25, 
                                outline=color, fill=color, tags="token")

    def on_token_press(self, event):
        '''Begining drag of an object'''
        # record the item and its location
        self._drag_data["item"] = self.canvas.find_closest(event.x, event.y)[0]
        self._drag_data["x"] = event.x
        self._drag_data["y"] = event.y

    def on_token_release(self, event):
        '''End drag of an object'''
        # reset the drag information
        self._drag_data["item"] = None
        self._drag_data["x"] = 0
        self._drag_data["y"] = 0

    def on_token_motion(self, event):
        '''Handle dragging of an object'''
        # compute how much the mouse has moved
        delta_x = event.x - self._drag_data["x"]
        delta_y = event.y - self._drag_data["y"]
        # move the object the appropriate amount
        self.canvas.move(self._drag_data["item"], delta_x, delta_y)
        # record the new position
        self._drag_data["x"] = event.x
        self._drag_data["y"] = event.y
#-----------------------------------------------------------------------------
    def button_move(self, event):
        '''Handle dragging of an object'''
        # set movement amount
        delta_x = 15
        delta_y = 15
        # move the object the appropriate amount
        #self.canvas.move(self._drag_data["item"], delta_x, delta_y)
        self.canvas.move(self._drag_data[1], delta_x, delta_y)
        # record the new position
        self._drag_data["x"] = event.x
        self._drag_data["y"] = event.y
#-----------------------------------------------------------------------------
if __name__ == "__main__":
    root = tk.Tk()
    Example(root).pack(fill="both", expand=True)
    root.mainloop()
쉬운

command=이 실행없이 작동 event하지만 할당 기능을하는 예상하는 event- command=self.button_move->def button_move(self, event)

그러나 bind에서 동일한 기능을 실행 event하므로 event.

솔루션 : 이벤트에 기본값을 사용하십시오 .None

def button_move(self, event=None):

하지만 당신은 사용할 수 없습니다 event.x, event.y당신이 무엇을 실행하는 경우이 기능에command=

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

jquery를 사용하여 캔버스에서 항목을 지우려면 어떻게해야합니까?

분류에서Dev

SwiftUI에서 버튼을 사용하여 배열에서 항목을 삭제하려면 어떻게해야합니까?

분류에서Dev

목록 위에 버튼을 추가하려면 어떻게해야합니까?

분류에서Dev

스위치에서 선택 항목을 선택하면 두 개의 파일 업로드 버튼을 표시하려면 어떻게해야합니까?

분류에서Dev

애니메이션을 사용하여 캔버스에서 요소를 어떻게 이동합니까?

분류에서Dev

버튼이있는 목록에 항목을 추가하는 경우 업데이트 된 목록을 다른 버튼에서 어떻게 사용합니까?

분류에서Dev

WPF에서 캔버스의 단추로 만든 모양을 이동하려면 어떻게해야합니까?

분류에서Dev

파이썬에서 캔버스에서 공을 무작위로 이동하려면 어떻게해야합니까?

분류에서Dev

Jade 루프의 각 목록 항목 뒤에 버튼을 추가하려면 어떻게해야합니까?

분류에서Dev

Jade 루프의 각 목록 항목 뒤에 버튼을 추가하려면 어떻게해야합니까?

분류에서Dev

2D 캔버스에서 확대 / 축소 기능을 구현하려면 어떻게해야합니까?

분류에서Dev

CSS에서 목록 항목을 조금 위로 이동하려면 어떻게해야합니까?

분류에서Dev

$ _SESSION을 사용하여 배열에 항목을 저장하고 버튼 교체를 트리거하려면 어떻게해야합니까?

분류에서Dev

이미 해당 버튼에 매개 변수를 사용하면서 함수에서 클릭 한 버튼을 어떻게 구성합니까?

분류에서Dev

Tkinter-캔버스에 라벨을 붙여서 숨기려면 어떻게해야합니까?

분류에서Dev

메뉴 상단에 제목 및 닫기 버튼을 추가하려면 어떻게해야합니까 (머티리얼 UI에서 클릭 할 때 버튼 메뉴의 첫 번째 항목 위에 있습니까?)

분류에서Dev

HDMI HDTV에서 오버 스캔을 수정하려면 어떻게합니까?

분류에서Dev

Flutter에서 캔버스에 위젯을 어떻게 칠할 수 있습니까?

분류에서Dev

버튼을 사용하여 축소 된 요소를 웹 사이트에서 이동하려면 어떻게해야합니까?

분류에서Dev

버튼을 사용하여 HTML5에서 웹 사이트로 이동하려면 어떻게해야합니까?

분류에서Dev

REST API를 사용하여 SharePoint에서 목록 항목을 가져 오려면 어떻게해야합니까?

분류에서Dev

matplotlib 툴바의 사용자 정의 버튼에 기능을 추가하려면 어떻게해야합니까?

분류에서Dev

DataTables-내보내기에 내 버튼을 사용하려면 어떻게해야합니까?

분류에서Dev

버튼을 사용하여 이미지를 키비 창에로드하려면 어떻게해야합니까?

분류에서Dev

리본 xml을 사용하여 버튼에 이미지를 추가하려면 어떻게해야합니까?

분류에서Dev

VR 비디오 위에 "재생 버튼"을 오버레이하려면 어떻게해야합니까?

분류에서Dev

LinkedHashSet을 사용하여 ArrayList <Object>에서 중복 항목을 삭제하려면 어떻게해야합니까?

분류에서Dev

URL 만 사용하여 웹 페이지에서 버튼을 자동 클릭하려면 어떻게합니까?

분류에서Dev

CSS를 사용하여 플렉스 레이아웃에서 사각형 버튼을 얻으려면 어떻게해야합니까?

Related 관련 기사

  1. 1

    jquery를 사용하여 캔버스에서 항목을 지우려면 어떻게해야합니까?

  2. 2

    SwiftUI에서 버튼을 사용하여 배열에서 항목을 삭제하려면 어떻게해야합니까?

  3. 3

    목록 위에 버튼을 추가하려면 어떻게해야합니까?

  4. 4

    스위치에서 선택 항목을 선택하면 두 개의 파일 업로드 버튼을 표시하려면 어떻게해야합니까?

  5. 5

    애니메이션을 사용하여 캔버스에서 요소를 어떻게 이동합니까?

  6. 6

    버튼이있는 목록에 항목을 추가하는 경우 업데이트 된 목록을 다른 버튼에서 어떻게 사용합니까?

  7. 7

    WPF에서 캔버스의 단추로 만든 모양을 이동하려면 어떻게해야합니까?

  8. 8

    파이썬에서 캔버스에서 공을 무작위로 이동하려면 어떻게해야합니까?

  9. 9

    Jade 루프의 각 목록 항목 뒤에 버튼을 추가하려면 어떻게해야합니까?

  10. 10

    Jade 루프의 각 목록 항목 뒤에 버튼을 추가하려면 어떻게해야합니까?

  11. 11

    2D 캔버스에서 확대 / 축소 기능을 구현하려면 어떻게해야합니까?

  12. 12

    CSS에서 목록 항목을 조금 위로 이동하려면 어떻게해야합니까?

  13. 13

    $ _SESSION을 사용하여 배열에 항목을 저장하고 버튼 교체를 트리거하려면 어떻게해야합니까?

  14. 14

    이미 해당 버튼에 매개 변수를 사용하면서 함수에서 클릭 한 버튼을 어떻게 구성합니까?

  15. 15

    Tkinter-캔버스에 라벨을 붙여서 숨기려면 어떻게해야합니까?

  16. 16

    메뉴 상단에 제목 및 닫기 버튼을 추가하려면 어떻게해야합니까 (머티리얼 UI에서 클릭 할 때 버튼 메뉴의 첫 번째 항목 위에 있습니까?)

  17. 17

    HDMI HDTV에서 오버 스캔을 수정하려면 어떻게합니까?

  18. 18

    Flutter에서 캔버스에 위젯을 어떻게 칠할 수 있습니까?

  19. 19

    버튼을 사용하여 축소 된 요소를 웹 사이트에서 이동하려면 어떻게해야합니까?

  20. 20

    버튼을 사용하여 HTML5에서 웹 사이트로 이동하려면 어떻게해야합니까?

  21. 21

    REST API를 사용하여 SharePoint에서 목록 항목을 가져 오려면 어떻게해야합니까?

  22. 22

    matplotlib 툴바의 사용자 정의 버튼에 기능을 추가하려면 어떻게해야합니까?

  23. 23

    DataTables-내보내기에 내 버튼을 사용하려면 어떻게해야합니까?

  24. 24

    버튼을 사용하여 이미지를 키비 창에로드하려면 어떻게해야합니까?

  25. 25

    리본 xml을 사용하여 버튼에 이미지를 추가하려면 어떻게해야합니까?

  26. 26

    VR 비디오 위에 "재생 버튼"을 오버레이하려면 어떻게해야합니까?

  27. 27

    LinkedHashSet을 사용하여 ArrayList <Object>에서 중복 항목을 삭제하려면 어떻게해야합니까?

  28. 28

    URL 만 사용하여 웹 페이지에서 버튼을 자동 클릭하려면 어떻게합니까?

  29. 29

    CSS를 사용하여 플렉스 레이아웃에서 사각형 버튼을 얻으려면 어떻게해야합니까?

뜨겁다태그

보관