龟龟改进

2024-09-27 00:14:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个11年级的学生(5年级学生),刚刚开始学习Python编程。我试图做一个图形用户界面,在那里我可以选择我想用海龟画什么形状,并输入绘制形状所需的值。我用下面的代码成功地做到了这一点(我已经完成了turtle分形的功能并导入了该文件):

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()

不过,我想试着把一个列表从中选择形状,而不是有几个按钮。我不太了解列表,因为我还没有被教过,但经过研究,我得到了:

^{pr2}$

我知道我的代码有问题,但我不知道我做错了什么。当我运行我的代码时,我没有任何错误,但它不会绘制形状。此外,“清除”按钮在单击时不起作用。我怎么才能修好这个?在


Tags: textgetreturndefordercolumnrootlength
1条回答
网友
1楼 · 发布于 2024-09-27 00:14:32

您当前的问题是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()

关于代码的一般注释:

找到并遵循一个好的Python编码风格当你发明自己的编码“风格”时,理解你的代码会变得更加困难。在

这不是将turtle与tkinter集成的正确方法。当你在cd6}或者cd4}的文档中使用溢出的cd4{Tk},而不是使用cd4}。在

相关问题 更多 >

    热门问题