Python开发转盘小游戏

Python 

一 原理分析

  1. Python开发一个图形界面
  2. 有12个选项和2个功能键
  3. 确定每个按钮的位置
    每个按钮的间隔相同
  4. 点击开始时转动,当前选项的背景颜色为红色,其他为白色

二 知识点与难点

2.1 使用的package

  1. tkinter
    Python内置,实现GUI的主要package
  2. threading
    实现多线程实现循环
  3. time
    用来延时

2.2 注意点

  1. 判断类型时使用isinstance函数,不要用type,因为type不区分子类
  2. 判断变量是否为TRUE,FALSE,None时要用is不要用==
  3. 循环时记得处理自增时超过下标时的归零
  4. tkinter下面的按钮属性可以通过键值赋值改变属性
  5. 全局变量

三 代码

  1. import tkinter 

  2. import threading 

  3. import time 


  4. root = tkinter.Tk() 


  5. # 设置窗口名字

  6. root.title('香港男神') 


  7. # 设置窗口大小

  8. root.minsize(300, 300) 


  9. # 按钮

  10. btn1 = tkinter.Button(root, text='成龙', bg='red') 

  11. btn1.place(x=20, y=20, width=50, height=50) 


  12. btn2 = tkinter.Button(root, text='张国荣', bg='white') 

  13. btn2.place(x=90, y=20, width=50, height=50) 


  14. btn3 = tkinter.Button(root, text='郭富城', bg='white') 

  15. btn3.place(x=160, y=20, width=50, height=50) 


  16. btn4 = tkinter.Button(root, text='黎明', bg='white') 

  17. btn4.place(x=230, y=20, width=50, height=50) 


  18. btn5 = tkinter.Button(root, text='刘德华', bg='white') 

  19. btn5.place(x=230, y=90, width=50, height=50) 


  20. btn6 = tkinter.Button(root, text='梁朝伟', bg='white') 

  21. btn6.place(x=230, y=160, width=50, height=50) 


  22. btn7 = tkinter.Button(root, text='张学友', bg='white') 

  23. btn7.place(x=230, y=230, width=50, height=50) 


  24. btn8 = tkinter.Button(root, text='周润发', bg='white') 

  25. btn8.place(x=160, y=230, width=50, height=50) 


  26. btn9 = tkinter.Button(root, text='周星驰', bg='white') 

  27. btn9.place(x=90, y=230, width=50, height=50) 


  28. btn10 = tkinter.Button(root, text='谢霆锋', bg='white') 

  29. btn10.place(x=20, y=230, width=50, height=50) 


  30. btn11 = tkinter.Button(root, text='张家辉', bg='white') 

  31. btn11.place(x=20, y=160, width=50, height=50) 


  32. btn12 = tkinter.Button(root, text='古天乐', bg='white') 

  33. btn12.place(x=20, y=90, width=50, height=50) 


  34. # 按钮列表

  35. herolist = [btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn10, btn11, btn12] 


  36. # 开启的标志

  37. isloop = False


  38. # 停止的标志

  39. isstop = False


  40. # 停止时的ID

  41. stopid = None


  42. # 定义一个函数,实现循环功能

  43. def round():


  44. # 设为全局变量,在此处做的改动可应用在其他函数中

  45. global isloop 

  46. global stopid 


  47. # 设置ID开始值

  48. i = 1


  49. # 已经在循环中

  50. if isloop is True: 

  51. return


  52. if isinstance(stopid, int): 

  53. i = stopid 


  54. # 开始循环

  55. while True: 


  56. # 睡眠

  57. time.sleep(0.03) 


  58. # 设置每个按钮的背景色

  59. # 可以通过键值得方式设置按钮属性

  60. for e_btn in herolist: 

  61. e_btn['bg'] = 'white'


  62. # 当前按钮背景色设置为红色

  63. herolist[i]['bg'] = 'red'


  64. i += 1

  65. print('当前i为', i) 


  66. # 当i的值大于选项个数时,归零

  67. if i >= 12: 

  68. i = 0


  69. # 当停止按钮被激活时,停止循环

  70. if isstop is True: 

  71. isloop = False

  72. stopid = i 

  73. break


  74. # 定义停止函数,只是将停止标志设置为True

  75. def my_stop():


  76. global isstop 


  77. # 已经是停止状态时,不变

  78. if isstop is True: 

  79. return


  80. isstop = True


  81. # 定义开始函数

  82. def newtask():


  83. global isloop 

  84. global isstop 


  85. isstop = False


  86. # 使用线程

  87. t = threading.Thread(target=round) 


  88. t.start() 


  89. # 开启循环标志

  90. isloop = True


  91. # 设置开始按钮

  92. btn_start = tkinter.Button(root, text='开始', command=newtask) 

  93. btn_start.place(x=90, y=125, width=50, height=50) 


  94. # 设置停止按钮

  95. btn_stop = tkinter.Button(root, text='停止', command=my_stop) 

  96. btn_stop.place(x=160, y=125, width=50, height=50) 


  97. root.mainloop()

Python开发转盘小游戏的更多相关文章

  1. 教你用Python自制拼图小游戏,一起来制作吧

    摘要: 本文主要为大家详细介绍了python实现拼图小游戏,文中还有示例代码介绍,感兴趣的小伙伴们可以参考一下. 开发工具 Python版本:3.6.4 相关模块: pygame模块: 以及一些Pyt ...

  2. 【转】利用 three.js 开发微信小游戏的尝试

    前言 这是一次利用 three.js 开发微信小游戏的尝试,并不能算作是教程,只能算是一篇笔记吧. 微信 WeChat 6.6.1 开始引入了微信小游戏,初期上线了一批质量相当不错的小游戏.我在查阅各 ...

  3. 使用Laya引擎开发微信小游戏(上)

    本文由云+社区发表 使用一个简单的游戏开发示例,由浅入深,介绍了如何用Laya引擎开发微信小游戏. 作者:马晓东,腾讯前端高级工程师. 微信小游戏的推出也快一年时间了,在IEG的游戏运营活动中,也出现 ...

  4. 使用Laya引擎开发微信小游戏

    在支持微信小游戏的游戏引擎中,Cocos,Egret,Laya都对小游戏的开发提供了很多强大的支持.前段时间正好抽空研究了一下这块的内容,现做一个总结,针对如何使用Laya引擎开发微信小游戏给大家做一 ...

  5. 用Python实现童年小游戏贪吃蛇

    贪吃蛇作为一款经典小游戏,早在 1976 年就面世了,我最早接触它还是在家长的诺基亚手机中.

  6. python 小鸡飞行小游戏

    python 小鸡飞行小游戏 用空格键控制小鸡飞行 代码 import pygame.freetype import sys import random pygame.init() screen = ...

  7. HTML5游戏开发,剪刀石头布小游戏案例

    剪刀石头布,非常可爱的小游戏,相信大家都非常的怀念这款小游戏,小时候也玩过很多次,陪伴着我的童年的成长,现在是不是还会玩一下,剪刀石头布游戏的规则我们都知道是:剪刀剪布,石头砸剪刀,布包石头.跟朋友. ...

  8. 【h5-egret】如何快速开发一个小游戏

    1.环境搭建 安装教程传送门:http://edn.egret.com/cn/index.php?g=&m=article&a=index&id=207&terms1_ ...

  9. 开发H5小游戏

    Egret白鹭H5小游戏开发入门(一)   前言: 好久没更新博客了,以前很多都不会,所以常常写博客总结,倒是现在有点点经验了就懒了.在过去的几个月里,在canvas游戏框架方面,撸过了CreateJ ...

随机推荐

  1. appium_server_v1.4.16版本不适配android7.0系统,运行报错“Attempt to re-install io.appium.settings without first uninstalling”

    要解决的问题:appium在androidV7.0系统上运行时报错 Failure [INSTALL_FAILED_ALREADY_EXISTS: Attempt to re-install io.a ...

  2. DEPENDS工具和DUMPBIN工具使用

    在系统部署运行时我们经常发现某个程序在开发机器中可以运行,但是部署在某台PC上缺不能运行,也存在在某些机器上可运行换一台机器却不能运行.主要表现出两种现象:        (1).运行.调试时出现程序 ...

  3. Oracle——序列、索引、同义词

    一.常见的数据库对象 二.序列 序列: 可供多个用户用来产生唯一数值的数据库对象 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效率 ①.创建序列 CREATE SEQ ...

  4. (转载)get和 post方法的不同

    HTTP的Get/Post请求区别归纳 1. get是从服务器上获取数据,post是向服务器传送数据.g et 和 post只是一种传递数据的方式,get也可以把数据传到服务器,他们的本质都是发送请求 ...

  5. STL 中的map 与 hash_map的理解

    可以参考侯捷编著的<STL源码剖析> STL 中的map 与 hash_map的理解 1.STL的map底层是用红黑树存储的,查找时间复杂度是log(n)级别: 2.STL的hash_ma ...

  6. kafka的api操作(官网http://kafka.apache.org/documentation/#producerapi)

    Kafka API 简单用法 本篇会用到以下依赖:(本人包和这个不同,去maven里查找) <dependency><groupId>org.apache.kafka</ ...

  7. laravel中使用mgirations创建和迁移数据库

    使用php artisan make:migration create_links_table命令 编辑2016_04_11_095342_create_links_table public func ...

  8. MVC4 路由解析 同名Controller的解决方案

    通常我们在MVC中通过Area建立子站的时候会有 controller名称重复的情况,这是后如何区分路由优先级, 我们知道 在Route对象中存在RouteValueDictionary 类型的Dat ...

  9. 微软编程一小时 题目2: Longest Repeated Sequence

    题目2 : Longest Repeated Sequence 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 You are given a sequence of i ...

  10. uwsgi启动提示:probably another instance of uWSGI is running on the same address (:8002). bind(): Address already in use [core/socket.c line 769]

    提示8002端口被占用,可以这样终止掉后再启动 sudo fuser -k 8002/tcp