当前位置:   article > 正文

用python画一朵花图片_如何使用python做一个可以画一朵花的小程序?

python画一朵花不重叠

a97787442ce02a6445cc341794624938.png

这篇文章可以交给你怎么在windows或macOS与python3环境下做出一个可以根据你的自定义设置画出一朵花的程序。

在开始写正式的逻辑代码之前,我们要先导入一些库:

  1. from tkinter import Tk, Entry, Label, Button
  2. import tkinter.messagebox
  3. import turtle

这些是我们在开发中会用到的库。tkinter库是python自带的GUI图形库。虽说可能没那么完美,但是日常做一些软件自己用还是没有问题的。

实际上导入tkinter图形库还有另外一种写法:

from tkinter import *

这种方法相对来说更简单些,但是import后面的*代表的是tkinter库中的所有模块,所以会有些许的性能下降,但是并不明显。

现在,我们就要开始写逻辑代码了。

首先构建我们的GUI。

  1. tk = Tk() # 将tkinter库中的tk类实例化,创建一个窗口
  2. tk.title("Draw a flower") # 设置窗口标题
  3. E = Entry(tk)
  4. E.grid(row=0, column=0)
  5. L = Label(tk, text="Flower color")
  6. L.grid(row=0, column=1)
  7. E1 = Entry(tk)
  8. E1.grid(row=1, column=0)
  9. L1 = Label(tk, text="Stem color")
  10. L1.grid(row=1, column=1)
  11. E2 = Entry(tk, text="Flower size")
  12. E2.grid(row=2, column=0)
  13. L2 = Label(tk, text="Pen size")
  14. L2.grid(row=2, column=1)

恭喜你!到现在,你已经成功构建了这个程序的GUI图形界面的大部分!但是一些用pycharm的朋友可能会发现到现在为止界面仍然没有显示出来,这是因为在程序结尾没有添加:

tk.mainloop()

添加了这行语句之后,程序就会进入GUI窗口主循环,进而也就可以显示窗口了。但是现在还不到显示窗口的时候,因为我们还没有添加按钮以及按钮所调用的函数。

在这里,我们还要顺便介绍一下Entry和Label控件。Entry控件就是文本输入框控件,可以输入单行文本。而Label控件则可以在程序窗口上显示一些文本。

随后,我们就该开始写逻辑处理代码了。

  1. def main_process():
  2. t = turtle.Pen()
  3. flower_color = E.get()
  4. stem_color = E2.get()
  5. try:
  6. flower_size = int(E1.get())
  7. pen_size = int(E3.get())
  8. pen_speed = int(E4.get())
  9. except ValueError:
  10. tkinter.messagebox.showerror(message_box_title, "Error: Your Input Not A Number,nPlease Re-Input!")
  11. return
  12. t.pensize(pen_size)
  13. t.speed(pen_speed)
  14. t.pencolor(stem_color)
  15. t.right(90)
  16. t.forward(300)
  17. t.left(180)
  18. t.forward(300)
  19. t.pencolor(flower_color)
  20. for x in range(flower_size):
  21. t.left(90)
  22. t.circle(x)

在这写代码中,我们首先使用t = turtle.Pen()实例化了turtle库中的Pen对象,创建了一个画布并且在上面画了一个海龟画笔。

下面,我们开始声明一些变量。

首先,我们声明了flower_color和stem_color两个变量。它们是字符串变量,通过声明它们,我们可以把用户输入在输入框里的值传递给海龟画笔。在这里,我们使用了get方法。get方法是Entry,也就是文本输入框自己带有的方法。通过调用这个方法,我们可以取得文本输入框中的值。

下面声明的一些变量写在了try-except语句里。这是为什么呢?我们在输入框中进行输入的时候,难免会有输错的时候,比如想输入10,但有可能不小心碰到旁边的一个键变成10p。我们在这里使用的int函数只能把纯数字字符串传唤为数字形式,而如果字符串中包含字母,或者整个字符串全都是字母,就会引发一个ValueError错误。因此,我们使用try-except语句来对错误进行处理。except语句后面是错误类型,而冒号后面的代码块则是出现问题后执行的操作。我们在这里如果出现了ValueError错误,就会弹出一个提示框提示输入的文本有误,并且通过return关键字退出函数。之所以要退出函数,是因为后面我们在使用海龟画笔画图时,就会引发其他因为找不到变量的导致的错误。所以这时候直接退出函数是最稳妥的办法。

下面,我们就开始操纵海龟画笔了。我来给大家列一个列表,告诉大家我们使用的函数都有哪些,有什么作用。

  1. pensize()——设置笔的粗细
  2. speed()——设置海龟画笔的绘制速度。最低为1,最高为10,超过10自动默认为10
  3. pencolor()——设置海龟画笔的颜色,可以是诸如green,red等的颜色词,也可以是16进制,如#66ccff
  4. right()——画笔向右转的度数
  5. forward()——画笔前进的像素数
  6. left()——画笔向左转的度数
  7. circle()——画一个圆,括号里是圆的半径。

最后,我们使用了一个for循环来绘制花。那么,这是怎么实现的呢?

for x in range(flower_size):

我们仔细观察这个语句,可以发现它由以下几个部分构成:

  • for
  • x
  • in
  • range(flower_size)

首先是for关键字,它表示这是一个for循环。

后面是x,这意味着它会把从range函数中取得的值不断赋值给x,也可以说x的值将从0开始,一次+1的递增,直到循环结束。我们每次转90度,而且画的圆圈一次比一次大,这样就可以做出来一种想在画一朵花一样的效果。

这个函数结束之后,我们还可以看到有一些代码:

  1. B = Button(tk, text="Start", command=main_process)
  2. B.grid(row=5, column=0)
  3. tk.mainloop()

这一段代码的作用就是向界面上添加一个按钮,并且开始程序主循环。下面,就来看一下完整的程序代码吧:

  1. from tkinter import Tk, Entry, Button, Label
  2. import tkinter.messagebox
  3. # 也可以是 from tkinter import *
  4. import turtle
  5. message_box_title = "Flower Drawer"
  6. tk = Tk()
  7. tk.title("Flower Drawer")
  8. E = Entry(tk)
  9. E.grid(row=0, column=0)
  10. L = Label(tk, text="Flower Color")
  11. L.grid(row=0, column=1)
  12. E1 = Entry(tk)
  13. E1.grid(row=1, column=0)
  14. L1 = Label(tk, text="Flower Size")
  15. L1.grid(row=1, column=1)
  16. E2 = Entry(tk)
  17. E2.grid(row=2, column=0)
  18. L2 = Label(tk, text="Stem Color")
  19. L2.grid(row=2, column=1)
  20. E3 = Entry(tk)
  21. E3.grid(row=3, column=0)
  22. L3 = Label(tk, text="Pen Size")
  23. L3.grid(row=3, column=1)
  24. E4 = Entry(tk)
  25. E4.grid(row=4, column=0)
  26. L4 = Label(tk, text="Pen Speed")
  27. L4.grid(row=4, column=1)
  28. def main_process():
  29. t = turtle.Pen()
  30. flower_color = E.get()
  31. stem_color = E2.get()
  32. try:
  33. flower_size = int(E1.get())
  34. pen_size = int(E3.get())
  35. pen_speed = int(E4.get())
  36. except ValueError:
  37. tkinter.messagebox.showerror(message_box_title, "Error: Your Input Not A Number,nPlease Re-Input!")
  38. return
  39. t.pensize(pen_size)
  40. t.speed(pen_speed)
  41. t.pencolor(stem_color)
  42. t.right(90)
  43. t.forward(300)
  44. t.left(180)
  45. t.forward(300)
  46. t.pencolor(flower_color)
  47. for x in range(flower_size):
  48. t.left(90)
  49. t.circle(x)
  50. B = Button(tk, text="Start", command=main_process)
  51. B.grid(row=5, column=0)
  52. tk.mainloop()
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/70931
推荐阅读
相关标签
  

闽ICP备14008679号