파이썬 GUI에서 Entry 활용 질문합니다.

조회수 750회
from tkinter import*
from tkinter.colorchooser import*

def paint():
    color = askcolor()
    rec = Tk()
    r = Canvas(rec, width= 100, height = 100)
    r.pack()

    r.create_rectangle(10,10,90,90, fill = color[1])



def draw():
    drawing = Tk()
    c = Canvas(drawing, width = 500, height = 500, background="green")
    c.pack()

    c.create_polygon(e0,e1,e2,e3,e4,e5, fill="blue")    

def seconde():
    setting = Tk()

    Label(setting, text="x1").grid(row=0)
    Label(setting, text="y1").grid(row=1)
    Label(setting, text="x2").grid(row=2)
    Label(setting, text="y2").grid(row=3)
    Label(setting, text="x3").grid(row=4)
    Label(setting, text="y3").grid(row=5)

    e0 = Entry(setting).grid(row=0,column=1)
    e1 = Entry(setting).grid(row=1,column=1)
    e2 = Entry(setting).grid(row=2,column=1)
    e3 = Entry(setting).grid(row=3,column=1)
    e4 = Entry(setting).grid(row=4,column=1)
    e5 = Entry(setting).grid(row=5,column=1)


    set1 = Button(setting, text="설정(set)", command = draw).grid(row=6,column=1)


canvers = Tk()

start = Button(canvers, text = "다각형(POLYGON)", command = seconde)
start2 = Button(canvers, text = "사각형(RecT)", command = paint)

start.pack()
start2.pack() #첫번째

canvers.mainloop()

위의 코드에서 Entry가 사용된 e들을 이용해 좌표를 설정하여 다각형을 만들고 싶은데 생각처럼 되지 않습니다.

혹시나해서 전역변수로 설정도 해봤지만 오류가 나더라고요.

어떻게 해야할까요?

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 이렇게 하니까 되네요.

    
    
    def draw(entries):
    
        drawing = Tk()
        c = Canvas(drawing, width = 500, height = 500, background="white")
        c.pack()
    
        e = [ entries[i].get() for i in range(6) ]
        print(e)
        c.create_polygon(e[0],e[1],e[2],e[3],e[4],e[5], fill="blue")    
    
    def seconde():
    
        setting = Tk()
    
        Label(setting, text="x1").grid(row=0)
        Label(setting, text="y1").grid(row=1)
        Label(setting, text="x2").grid(row=2)
        Label(setting, text="y2").grid(row=3)
        Label(setting, text="x3").grid(row=4)
        Label(setting, text="y3").grid(row=5)
    
        entries = [ Entry(setting) for _ in range(6) ]
        [ e.grid(row=i, column=1) for e, i in zip(entries, range(6)) ]
        print(entries)
    
        Button(setting, text="설정(set)", command = lambda : draw(entries)).grid(row=6,column=1)
    
    

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)