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

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

from tkinter import Tk, Entry, Label, Button

import tkinter.messagebox

import turtle

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

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

from tkinter import *

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

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

首先构建我们的GUI。

tk = Tk() # 将tkinter库中的tk类实例化,创建一个窗口

tk.title("Draw a flower") # 设置窗口标题

E = Entry(tk)

E.grid(row=0, column=0)

L = Label(tk, text="Flower color")

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

E1 = Entry(tk)

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

L1 = Label(tk, text="Stem color")

L1.grid(row=1, column=1)

E2 = Entry(tk, text="Flower size")

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

L2 = Label(tk, text="Pen size")

L2.grid(row=2, column=1)

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

tk.mainloop()

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

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

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

def main_process():

t = turtle.Pen()

flower_color = E.get()

stem_color = E2.get()

try:

flower_size = int(E1.get())

pen_size = int(E3.get())

pen_speed = int(E4.get())

except ValueError:

tkinter.messagebox.showerror(message_box_title, "Error: Your Input Not A Number,\nPlease Re-Input!")

return

t.pensize(pen_size)

t.speed(pen_speed)

t.pencolor(stem_color)

t.right(90)

t.forward(300)

t.left(180)

t.forward(300)

t.pencolor(flower_color)

for x in range(flower_size):

t.left(90)

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关键字退出函数。之所以要退出函数,是因为后面我们在使用海龟画笔画图时,就会引发其他因为找不到变量的导致的错误。所以这时候直接退出函数是最稳妥的办法。

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

speed()——设置海龟画笔的绘制速度。最低为1,最高为10,超过10自动默认为10

pencolor()——设置海龟画笔的颜色,可以是诸如green,red等的颜色词,也可以是16进制,如#66ccff

right()——画笔向右转的度数

forward()——画笔前进的像素数

left()——画笔向左转的度数

circle()——画一个圆,括号里是圆的半径。

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

for x in range(flower_size):

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

x

in

range(flower_size)

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

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

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

B = Button(tk, text="Start", command=main_process)

B.grid(row=5, column=0)

tk.mainloop()

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

from tkinter import Tk, Entry, Button, Label

import tkinter.messagebox

# 也可以是 from tkinter import *

import turtle

message_box_title = "Flower Drawer"

tk = Tk()

tk.title("Flower Drawer")

E = Entry(tk)

E.grid(row=0, column=0)

L = Label(tk, text="Flower Color")

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

E1 = Entry(tk)

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

L1 = Label(tk, text="Flower Size")

L1.grid(row=1, column=1)

E2 = Entry(tk)

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

L2 = Label(tk, text="Stem Color")

L2.grid(row=2, column=1)

E3 = Entry(tk)

E3.grid(row=3, column=0)

L3 = Label(tk, text="Pen Size")

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

E4 = Entry(tk)

E4.grid(row=4, column=0)

L4 = Label(tk, text="Pen Speed")

L4.grid(row=4, column=1)

def main_process():

t = turtle.Pen()

flower_color = E.get()

stem_color = E2.get()

try:

flower_size = int(E1.get())

pen_size = int(E3.get())

pen_speed = int(E4.get())

except ValueError:

tkinter.messagebox.showerror(message_box_title, "Error: Your Input Not A Number,\nPlease Re-Input!")

return

t.pensize(pen_size)

t.speed(pen_speed)

t.pencolor(stem_color)

t.right(90)

t.forward(300)

t.left(180)

t.forward(300)

t.pencolor(flower_color)

for x in range(flower_size):

t.left(90)

t.circle(x)

B = Button(tk, text="Start", command=main_process)

B.grid(row=5, column=0)

tk.mainloop()

用python画满天星花朵_如何使用python做一个可以画一朵花的小程序?相关推荐

  1. 拼团小程序源码_纯小白如何做一个摄影电商拼团小程序?

    过去,摄影行业都是线下实体店为主,宣传手段单一.推广效率差,客户复购率更是不怎样.随着微信小程序的出现,各个摄影行业商家开始通过小程序来进行推广,连接线上线下场景,这样便能触达更多消费者. 小程序拥有 ...

  2. 用python画满天星花朵_用python画一朵玫瑰给你

    对了,想要完整源码的同学可以在公众号[谭某人]后台回复 玫瑰花 即可. turtle.speed(5) #画笔移动的速度 turtle.penup() #提起画笔,移动画笔但并不会绘制图形 turtl ...

  3. 小程序 webview 分享_新的一周,分享15个好玩的小程序

    文/阿C  一周进步签约作者 自小程序推出以来,由于其相对比APP而言,具有方便.轻巧.即用即走.不占内存的特性,受到广大追求效率(内存不足)星人的喜爱. 不过随着小程序的发展,市面上的小程序开始有些 ...

  4. FANUC机器人_通过ROBOGUIDE从零开始做一个离线仿真项目(1)

    FANUC机器人_通过ROBOGUIDE从零开始做一个离线仿真项目(1) 打开ROBOGUIDE软件,如下图所示,然后点击新建工作单元, 如下图所示,选择"HandlingPRO" ...

  5. 基于Python编写一个B站全自动抽奖的小程序

    本文将利用Python编写一个B站全自动抽奖的小程序,可以实时监控自己关注的UP主,如果关注的UP主中有人发布了抽奖的动态,就自动参与这个抽奖.这样就能不错过任何一个可以暴富的机会了.需要的可以参考一 ...

  6. python同心圆怎么运行_怎么用python画同心圆

    用turtle函数画空心圆 turtle.circle是从下方开始画圆的,所以要画同心圆的话,每一次都要将画笔移动到下一个圆的底部位置. 画笔的坐标默认在0,0,就以它为圆心. 因为turtle画圆的 ...

  7. python绘制彩色同心圆_如何用python画同心圆

    Python是一种计算机程序设计语言.是一种面向对象的动态类型语言,最初被设计用于编写自动化脚本,随着版本的不断更新和语言新功能的添加,越来越多被用于独立的.大型项目的开发.Python在设计上坚持了 ...

  8. python画动物代码_如何用python画简单的动物_后端开发

    python3.x完全兼容python2.x吗?_后端开发 可以说是完全不兼容.相对于Python的早期版本,Python3是一个较大的升级,为了不带入过多的累赘,Python 3.0在设计的时候没有 ...

  9. 如何用python画转盘_如何用ppt做一个抽奖转盘 看完你学会了么

    现在抽奖转盘是很常见的,有时候公司办活动也会有抽奖活动,如果让自己做一个抽奖转盘,应该怎么做? 操作方法 01 打开ppt,把幻灯片版式设置成空白的,然后点击插入,选择图表. 02 选择饼图,用第一种 ...

最新文章

  1. android 滑动顶部固定,android view滑动到顶部悬停
  2. 未识别的网络无法连接Internet解决方法
  3. Linux Bash 笔记
  4. 计算机网络word文档,计算机网络word.doc
  5. Windows进程与线程学习笔记(五)—— 模拟线程切换
  6. ORA-01940 无法删除当前已连接的用户之解决方案
  7. EasyMock学习笔记
  8. 在winform上内嵌入其它的程序
  9. 微信小程序装修解决方案ppt_装修公司微信小程序都有哪些功能?
  10. STC学习:霍尔开关器件
  11. 今天同学跟我说刚入门前端,想到我目前实习的公司涨涨经验
  12. Easyui按钮图标
  13. navicate:navicate.exe 无法找到入口
  14. 淘宝API-item_search - 按关键字搜索淘宝商品
  15. 【计算机系统】ICS大作业论文-程序人生-Hello’s P2P
  16. Cerebral Cortex:调节γ振荡可以促进大脑连接性而改善认知障碍
  17. 我们实际上是房地产开发商 和 我们政府的奴隶
  18. SQL查询无限层级结构的所有下级,所有上级(即所有的子孙曾孙等等)
  19. 新版chrome浏览器字体编码插件Charset v0.5.5
  20. MATLAB常用绘图命令

热门文章

  1. 阴阳屏再现,iPhone12屏幕出现问题,苹果似乎被LG坑了
  2. python修改csv文件中列的数据类型_pandas读取CSV文件时查看修改各列的数据类型格式...
  3. 美图秀秀滤镜之亮度调整
  4. 【uos专区】解决uos内置外置光驱无法播放的问题
  5. utf8 与 utf8mb4
  6. QT QLineEdit格式化输入子网掩码
  7. 如何挑选优质的游戏服务器
  8. Java_io体系之PipedInputStream、PipedOutputStream简介、走进源码及示例——06
  9. MySQL 数据库的启动与关闭与重启办法
  10. java stream中的reduce问题