2012-03-29 21 views
4

최근 WxPython을 사용하여 Cisco 패킷 추적 프로그램과 같은 GUI 네트워크 시뮬레이터를 만들었지 만 솔직히 Iv가 필요한 등의 예제를 찾기 란 매우 어렵습니다. 다시 옛 충실한 Tk.Tkinter를 이용한 GUI 응용 프로그램 - 드래그 앤 드롭

내 프로그램에는 파일> 종료로 구성된 메뉴 막대가 있습니다. 또한 응용 프로그램의 하단 오른쪽에 Exit 버튼이 있습니다. 이것뿐만 아니라 캔버스에 설정된 크기의 캔버스와 다양한 버튼을 클릭하면 캔버스에 하드웨어의 작은 이미지가 생성됩니다. 이 작업은 PIL을 사용하여 수행되었습니다.

다음에 필요한 것은 캔버스 주위로 이미지를 드래그 할 수 있으며 약간 어렵다는 것입니다. 나는 그것이 어떻게 분해되었고 다음과 같은 클릭 정의, 모션 (a에서 b로 이동)과 릴리즈 정의가 필요한지 이해하지만, 어떻게 코드에 적용 할 것인가에 대한 다음 예제를 살펴 보았습니다. 난 이미 가지고 있는데? 마지막으로 여기에 http://www.python-forum.org/pythonforum/viewtopic.php?f=4&p=75789

내가 이미 가지고있는 코드입니다 : 여기

내가 위에서 언급 한 것과 링크입니다. 프로그래밍에 익숙하지 않아서 코드/레이아웃/구조가 훌륭하지는 않으나 모든 지침/예제/시각적 표현은 놀라 울 것입니다.

from Tkinter import* 
from PIL import Image, ImageTk 
class AllTkinterWidgets: 
    def __init__(self, master): 
     frame= Frame(master, width=900, height=600) 
     frame.pack() 

     iframe5 = Frame (frame, bd=2, relief=RAISED) 
     iframe5.pack(expand=1, fill=X, pady=10, padx=5) 

     c = Canvas(iframe5, bg='white', width=600, height=500) 
     c.pack() 

    # definitions to print hardware images to the canvas 
    # ----------------------------------------------------------------------- 
     def show_imageRouter(): 
      c.create_image(30,30, image=image1) 

     def show_imageSwitch(): 
      c.create_image(30,60, image=image2) 

     def show_imageServer(): 
      c.create_image(30,100, image=image3) 

     def show_imageIpPhone(): 
      c.create_image(30,140, image=image4) 

     def show_imageWirelessRouter(): 
      c.create_image(30,180, image=image5) 

     def show_imageHost(): 
      c.create_image(30, 220, image=image6) 

    # Network hardware buttons created 
    # ---------------------------------------------------- 
     self.button = Button(frame, text = "Router", height= 1, width= 8, padx=2, pady=2,command=show_imageRouter) 
     self.button.pack(side = LEFT) 

     self.button = Button(frame, text = "Switch",height= 1, width= 8, padx=2, pady=2, command=show_imageSwitch) 
     self.button.pack(side = LEFT) 

     self.button = Button(frame, text = "Server",height= 1, width= 8, padx=2, pady=2, command=show_imageServer) 
     self.button.pack(side = LEFT) 

     self.button = Button(frame, text = "IP Phone",height= 1, width= 8, padx=2, pady=2, command=show_imageIpPhone) 
     self.button.pack(side = LEFT) 

     self.button = Button(frame, text = "Wireless Router",height= 1, width= 12, padx=2, pady=2, command=show_imageWirelessRouter) 
     self.button.pack(side = LEFT) 

     self.button = Button(frame, text = "Host",height= 1, width= 8, padx=2, pady=2, command=show_imageHost) 
     self.button.pack(side = LEFT) 

     self.button = Button(frame, text = "Cabling",height= 1, width= 8, padx=2, pady=2) 
     self.button.pack(side = LEFT) 

     self.button = Button(frame, text = "Square",height= 1, width= 8, padx=2, pady=2) 
     self.button.pack(side = LEFT) 

    # Create the image objects for the hardware Images 
    # ---------------------------------------------------------------------- 
     imageFile = "router.png" 
     image1 = ImageTk.PhotoImage(Image.open(imageFile)) 

     imageFile = "switch.png" 
     image2 = ImageTk.PhotoImage(Image.open(imageFile)) 

     imageFile = "Server.png" 
     image3 = ImageTk.PhotoImage(Image.open(imageFile)) 

     imageFile = "ipPhone.png" 
     image4 = ImageTk.PhotoImage(Image.open(imageFile)) 

     imageFile = "WirelessRouter.png" 
     image5 = ImageTk.PhotoImage(Image.open(imageFile)) 

     imageFile = "Host.png" 
     image6 = ImageTk.PhotoImage(Image.open(imageFile)) 

root = Tk() 
all = AllTkinterWidgets(root) 

def Exit(): 
    print "Exit" 

# Create an Exit Button 
toolbar = Frame(root) 
b = Button(toolbar, text="Exit", width=6, height=3, command=Exit) 
b.pack(side=RIGHT, padx=2, pady=2) 
toolbar.pack(side=BOTTOM, fill=X) 

# Press Esc to quit 
root.bind("<Escape>", exit) 

# Creation of a menu File > Exit 
menu = Menu(root) 
root.config(menu=menu) 

filemenu = Menu(menu) 
menu.add_cascade(label="File", menu=filemenu) 
filemenu.add_command(label="Exit", command=Exit) 

root.mainloop() 

들여 쓰기가 약간 이상하다면 죄송합니다. 나는 그것을 여기 함께 막기 위해 그것을 조정했다.

답변

3

This answer "타원을 움직이는 보드 그리기 코드"는 캔버스에 개체를 끌는 방법을 보여줍니다.