2017-12-26 3 views
0

저는 방금 파이썬 프로그래밍을 공부하기 시작한 11 학년 (5 학년 학생)입니다. 내가 거북이로 그려야 할 모양을 선택하고 모양을 그리는 데 필요한 값을 입력 할 수있는 GUI를 만들려고합니다. 나는 다음과 같은 코드를 그렇게 관리 (나는 이미 거북이 도형의 기능을 한 경우 해당 파일 가져 오기) :터틀 GUI 개선

from tkinter import * 

import turtlegraphics 

from turtle import * 

import math 


#set up the window 

root = Tk() 

root.title('Turtle shapes') 

root.geometry('300x200+100+100') 



#make the interface 

turtleLabel = Label(root, text = 'Turtle Fractals Generator') 

turtleLabel.grid(row = 0, column =1, columnspan =2) 



#order widgets 

orderLabel = Label(root, text ='Order') 

orderLabel.grid(row = 1, column =0) 



orderStr = StringVar() 

orderEntry = Entry(root, textvariable = orderStr) 

orderEntry.grid(row = 1, column = 1, columnspan = 2) 



#length widgets 

lengthLabel = Label(root, text ='Length') 

lengthLabel.grid(row = 2, column =0) 



lengthStr = StringVar() 

lengthEntry = Entry(root, textvariable = lengthStr) 

lengthEntry.grid(row = 2, column = 1, columnspan = 2) 



#button widgets 

def clearF(): 

    #Clear the entries 

    orderStr.set('') 

    lengthStr.set('') 







    return 

#end def 

clearButton = Button(root, text ='Clear', command = clearF) 

clearButton.grid(row = 3, column =1) 





def treeF(): 

    order = int(orderStr.get()) 

    length = float(lengthStr.get()) 





    turtlegraphics.tree(order,length, pen) 







    return 

#end def 

treeButton = Button(root, text ='Tree', command = treeF) 

treeButton.grid(row = 1, column =3) 


#make a gasket button 

def gasketF(): 

    order = int(orderStr.get()) 

    length = float(lengthStr.get()) 

    turtlegraphics.gasket(order,length,pen) 

    return 
#end def 

gasButton = Button(root, text ='Gasket', command = gasketF) 

gasButton.grid(row = 2, column =3) 


#make a dandelion button 
def dandelionF(): 

    order = int(orderStr.get()) 

    length = float(lengthStr.get()) 

    turtlegraphics.tree4(order,length,pen) 

    return 
#end def 

danButton = Button(root, text ='Dandelion', command = dandelionF) 

danButton.grid(row = 3, column =3) 


#make flalke button 
def kevinF(): 

    order = int(orderStr.get()) 

    length = float(lengthStr.get()) 

    turtlegraphics.k(order,length,pen) 



    return 
#end def 
def flakeF(): 
    order = int(orderStr.get()) 

    length = float(lengthStr.get()) 

    turtlegraphics.flake(order,length,pen) 

    return 
#end def 






flakeButton = Button(root, text ='Flake', command = flakeF) 

flakeButton.grid(row = 4, column =3) 




#make a screen and a pen 

pen = Pen() 

screen = Screen() 



pen.speed(0) 

pen.color('blue') 

pen.width(3) 



screen.bgcolor('white') 



root.mainloop() 

는 그러나, 나는 시도하고보다는 오히려에서 모양을 선택하는 목록을 데려 가고 싶다는를 여러 단추가 있습니다. '

''' 

program gui to draw turtle fractals 

''' 



from tkinter import * 

import turtlegraphics 

from turtle import * 

import math 


#make a screen and a pen 

pen = Pen() 


def treeF(): 

    order = int(orderStr.get()) 

    length = float(lengthStr.get()) 


    turtlegraphics.tree(order,length, pen) 


    return 

#end def 

#make a gasket button 

def gasketF(): 

    order = int(orderStr.get()) 

    length = float(lengthStr.get()) 

    turtlegraphics.gasket(order,length,pen) 

    return 
#end def 


#make a dandelion button 
def dandelionF(): 

    order = int(orderStr.get()) 

    length = float(lengthStr.get()) 

    turtlegraphics.tree4(order,length,pen) 

    return 
#end def 


#make flalke button 
def kevinF(): 

    order = int(orderStr.get()) 

    length = float(lengthStr.get()) 

    turtlegraphics.k(order,length,pen) 



    return 
#end def 
def flakeF(): 
    order = int(orderStr.get()) 

    length = float(lengthStr.get()) 

    turtlegraphics.flake(order,length,pen) 

    return 
#end def 
screen = Screen() 


pen.speed(0) 

pen.color('blue') 

pen.width(3) 



screen.bgcolor('white') 

#set up the window 

root = Tk() 

root.title('turtle shapes') 

root.geometry('600x300+100+100') 


#make the interface 

turtleLabel = Label(root, text = 'Turtle Fractals Generator') 

turtleLabel.grid(row = 0, column =1, columnspan =2) 



#order widgets 

orderLabel = Label(root, text ='Order') 

orderLabel.grid(row = 1, column =0) 



orderStr = StringVar() 

orderEntry = Entry(root, textvariable = orderStr) 

orderEntry.grid(row = 1, column = 1, columnspan = 2) 



#length widgets 

lengthLabel = Label(root, text ='Length') 

lengthLabel.grid(row = 2, column =0) 



lengthStr = StringVar() 

lengthEntry = Entry(root, textvariable = lengthStr) 

lengthEntry.grid(row = 2, column = 1, columnspan = 2) 



#button widgets 

def clearF(): 

    #Clear the entries 

    orderStr.set('') 

    lengthStr.set('') 

    return 

#end def 

clearButton = Button(root, text ='Clear', command = clearF) 

clearButton.grid(row = 3, column =1) 

#list 

def selection(): 
    obj = nameList.curselection()[0] 
    if obj == 'tree': 
      command = treeF 
      return 
    if obj == 'dandelion': 
      command = dandelionF 
      return 
    if obj == 'flake': 
      command = flakeF 
      return 
    if obj == 'gasketF': 
      command = gasketF 
      return 


    #end if 


    #end def 

#create list 
listbox = Listbox(root,selectmode = SINGLE) #select mode is type of 
selection 
listButton= Button(root, text = 'chose fractal') 

labelVar = StringVar() 
nameLabel = Label(root, textvariable = labelVar) 
nameLabel.grid(row = 2 , column = 7, columnspan = 2) 
labelVar.set('choose a fractal') 


names = ['tree','dandelion','flake','gasket'] 
nameList = Listbox(root) 
for i in names: 
    nameList.insert(END, i) 
nameList.grid(row = 4, column =7, columnspan = 2) 

selectionButton = Button(root, text = 'draw', command = selection) 
selectionButton.grid(row = 5, column = 7, columnspan = 2) 



root.mainloop() 

내가 알고있는 내 코드에 문제가 있습니다,하지만 난 할 수 있습니다 나는 때문에 나는 아직 그것을 가르쳐 아니었지만 연구를 수행 한 후이 내가 무엇을 가지고 있다는 사실에 목록에 대한 많은 이해가 안 돼요 내가 뭘 잘못했는지 말해. 코드를 실행할 때 오류가 전혀 발생하지 않지만 모양을 그리지는 않습니다. 또한 클리어 버튼은 클릭 할 때 기능을 수행하지 않습니다. 이 문제를 어떻게 해결할 수 있습니까?

+0

코드가있는 모든 줄 뒤에 빈 줄을 넣지 마십시오. 코드를 읽으려면 너무 길어집니다. [PEP 8 - 스타일 가이드, 파이썬 코드] (https://www.python.org/dev/peps/pep-0008/) – furas

+0

은 항상 전체 오류 메시지 (Traceback)를 질문에 표시합니다 (스크린 샷이 아닌 텍스트). 다른 유용한 정보가 있습니다. – furas

+0

'거북이 그래픽 '이란 무엇입니까? 'Turtlegraphics'가 없으면 실행할 수 없습니다 – furas

답변

0

즉각적인 문제는 selection()의 작동 방식입니다. 숫자를 문자열과 비교하고 서브 프로그램을 실행하는 데 필요한 코드가 있어야합니다. 나는 당신이 원하는 행동을 얻기 위해 아래에 그것을 다시 만들었습니다. 당신이 당신의 자신의 코딩을 발명 할 때 더 어려워 코드를 이해하게 -

찾기 좋은 파이썬 코딩 스타일을 따르 코드에 대한

from tkinter import * 

from turtle import Pen, Screen 

import turtlegraphics 

def treeF(): 

    order = int(orderEntry.get()) 
    length = float(lengthEntry.get()) 

    turtlegraphics.tree(order, length, pen) 

def dandelionF(): 

    order = int(orderEntry.get()) 
    length = float(lengthEntry.get()) 

    turtlegraphics.tree4(order, length, pen) 

def flakeF(): 

    order = int(orderEntry.get()) 
    length = float(lengthEntry.get()) 

    turtlegraphics.flake(order, length, pen) 

def gasketF(): 

    order = int(orderEntry.get()) 
    length = float(lengthEntry.get()) 

    turtlegraphics.gasket(order, length, pen) 

def kevinF(): 

    order = int(orderEntry.get()) 
    length = float(lengthEntry.get()) 

    turtlegraphics.k(order, length, pen) 

fractals = [('tree', treeF), ('dandelion', dandelionF), ('flake', flakeF), ('gasket', gasketF), ('kevin', kevinF)] 

# make a screen and a pen 

screen = Screen() 
screen.bgcolor('white') 

pen = Pen() 
pen.speed('fastest') 
pen.color('blue') 
pen.width(3) 

# set up the window 

root = Tk() 
root.title('turtle shapes') 
root.geometry('600x400+100+100') 

# make the interface 

turtleLabel = Label(root, text='Turtle Fractals Generator') 
turtleLabel.grid(row=0, column=1, columnspan=2) 

# order widgets 

orderLabel = Label(root, text='Order') 
orderLabel.grid(row=1, column=0) 

orderEntry = Entry(root) 
orderEntry.grid(row=1, column=1, columnspan=2) 

# length widgets 

lengthLabel = Label(root, text='Length') 
lengthLabel.grid(row=2, column=0) 

lengthEntry = Entry(root) 
lengthEntry.grid(row=2, column=1, columnspan=2) 

# button widgets 

def clearF(): 

    # Clear the entries 
    orderEntry.delete(0, 'end') 
    lengthEntry.delete(0, 'end') 

clearButton = Button(root, text='Clear', command=clearF) 
clearButton.grid(row=3, column=1) 

# list 

def selection(): 
    selections = nameList.curselection() 

    if selections: 
     selection = selections[0] 

     if selection < len(fractals): 
      name, definition = fractals[selection] 
      definition() 

# create list 
listbox = Listbox(root, selectmode=SINGLE) # select mode is type of selection 
listButton = Button(root, text='chose fractal') 

labelVar = StringVar() 
nameLabel = Label(root, textvariable=labelVar) 
nameLabel.grid(row=2, column=7, columnspan=2) 
labelVar.set('choose a fractal') 

nameList = Listbox(root) 

for name, definition in fractals: 
    nameList.insert(END, name) 

nameList.grid(row=4, column=7, columnspan=2) 

selectionButton = Button(root, text='Draw', command=selection) 
selectionButton.grid(row=5, column=7, columnspan=2) 

root.mainloop() 

일반 주석 : 나는 또한 다른 변화와 단순화를했습니다 "스타일".

이것은 거북이와 tkinter를 통합하는 올바른 방법이 아닙니다. RawTurtleTurtleScreen에 대한 StackOverflow 또는 거북이 문서 검색, 기존 Tk 창 구조에 포함 할 때 Turtle (별칭 Pen) 및 Screen 대신 사용하는 클래스를 검색하십시오.

+0

코드가 작동했지만 터틀 그래픽 파일을 가져 오는 중 오류가 발생하여 몇 가지 사항을 변경해야했습니다. 또한 조언 주셔서 감사합니다. 나는 그것을 염두에 두겠다. –