用Python做2048游戏 网易云课堂配套实验课。通过GUI来体验编程的乐趣。
第1节 认识wxpython 第2节 画几个形状 第3节 再做个计算器 第4节 最后实现个2048游戏
实验1-认识wxpython
一、实验说明
1. 环境登录
无需密码自动登录,系统用户名shiyanlou
2. 环境介绍
本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序:
- LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令
- Firefox:浏览器
- sublime/GVim:好用的编辑器
- git,用于获得参考代码
3. 环境使用
使用GVim编辑器输入实验所需的代码及文件,使用LX终端(LXTerminal)运行所需命令进行操作。
二、课程介绍
课程目的:
熟悉实验环境
了解wxpython
能运行出一个窗口
理解ClientDC和PaintDC的区别
课程环境已装好wxpython,配套代码仓库
http://git.shiyanlou.com/heibanke/shiyanlou_cs427
获得参考代码敲命令 git clone 上面的代码仓库
1. wxpython
wxpython是基于Python的GUI库,优点如下:
- 跨平台,32-bit Microsoft Windows,大多数Unix/Linux,Mac
- 开源免费
- 简单易用
不错的英文教程适合系统的学习各种控件的使用。
<>还不错的中英文版书籍,网上很容易搜到电子版
2. 运行一个窗口
直接实例化
import wx
# 每个wxPython的程序必须有一个wx.App对象.
app = wx.App()
# 实例化一个frame
"""
None: 当前窗口的父窗口parent,如果当前窗口是最顶层的话,则parent=None,如果不是顶层窗口,则它的值为所属frame的名字
-1: id值, -1的话程序会自动产生一个id
pos: 位置
size: 宽,高大小
还有风格参数style,不填默认是这样几个的组合
wx.MAXIMIZE_BOX| wx.MINIMIZE_BOX| wx.RESIZE_BORDER|wx.SYSTEM_MENU| wx.CAPTION| wx.CLOSE_BOX
你可以去掉几个看看效果,比如
style = wx.SYSTEM_MENU| wx.CAPTION| wx.CLOSE_BOX
"""
frame = wx.Frame(None, -1, title='wx_00_base.py', pos=(300,400), size=(200,150))
# 居中处理
#frame.Centre()
# 显示frame
frame.Show()
# 进入循环,等待窗口响应
app.MainLoop()
3. 定义Frame子类的方式
#coding=utf-8
import wx
class Example(wx.Frame):
def __init__(self, title):
super(Example, self).__init__(None, title=title,
size=(600, 400))
self.Centre()
self.Show()
if __name__=="__main__":
app = wx.App()
Example('Shapes')
app.MainLoop()
上面两种方式是一致的。
4. 接下来画一条线
# -*- coding: utf-8 -*-
import wx
class Example(wx.Frame):
def __init__(self, title):
super(Example, self).__init__(None,title=title,
size=(250, 150))
self.Centre()
self.Show()
dc = wx.ClientDC(self)
# 画一条线,参数为起始点的x,y,终点的x,y
dc.DrawLine(50, 60, 190, 60)
if __name__ == '__main__':
app = wx.App()
Example('Line')
app.MainLoop()
试着把窗口resize到很小,然后再放大,你会发现什么。(没有绑定EVT_PAINT之前,线只绘制一次,如果Resize窗口小到不能显示完整的线,然后再把窗口回复原样,则不能显示的线无法恢复。)
5. 使用PaintDC
# -*- coding: utf-8 -*-
import wx
class Example(wx.Frame):
def __init__(self, title):
super(Example, self).__init__(None, title=title,
size=(250, 150))
# 绑定渲染窗口的动作到OnPaint
# 这样当resize窗口,会重新调用该函数
self.Bind(wx.EVT_PAINT, self.OnPaint)
self.Centre()
self.Show()
# 画一条线,参数为起始点的x,y,终点的x,y
def OnPaint(self, e):
dc = wx.PaintDC(self)
dc.DrawLine(50, 60, 190, 60)
if __name__ == '__main__':
app = wx.App()
Example('Line')
app.MainLoop()
运行后试着resize窗口,绑定事件后,由于Resize会调用该绑定函数,因此线就在那里,无论你怎么resize。
最后我们把画一根线替换成画多根线,就把DrawLine换成DrawLines,例如:
dc.DrawLines(((20, 60), (100, 60), (100, 10),(20, 10), (20,60)))
参数是一个一个点,注意这里参数格式是点x,y的元组列表。
6. 保存代码
如果不熟悉git可以baidu看看教程。
1. git clone 自己的仓库地址
2. 实验代码拷过去以后用
3. git add -A .
4. git commit -am "your comment"
5. git push origin master
以后再用就clone自己的代码仓库就ok
三. 总结
本节课我们掌握要点如下:
- 了解wxpython
- 熟悉环境特别是git
- 能运行出wxpython的窗口
- 了解ClientDC和PaintDC的差别
- 画线
如果通过具体的点来画多边形,很不方便,而且如果再来计算多边形的面积,比较各个多边形的大小等,那就更不好操作了。下一节我们通过自定义类来画各种形状,从而理解类的使用。
用Python做2048游戏 网易云课堂配套实验课。通过GUI来体验编程的乐趣。的更多相关文章
- 《从零玩转python+人工智能-3》网易云课堂王顺子
#1.145——152节课25章——面向对象三大特性小案例 class Animal: def __init__(self,name,age=1): self.name = name self.age ...
- 网易云课堂_C语言程序设计进阶_期末考试编程题部分
1 字符串循环右移(5分) 题目内容: 输入一个字符串和一个非负整数N,要求将字符串循环右移N次. 输入格式: 输入在第1行中给出一个字符串,以'#'表示结束,‘#’不是字符串的一部分,字符串的长度未 ...
- Python爬虫入门教程 21-100 网易云课堂课程数据抓取
写在前面 今天咱们抓取一下网易云课堂的课程数据,这个网站的数据量并不是很大,我们只需要使用requests就可以快速的抓取到这部分数据了. 你第一步要做的是打开全部课程的地址,找出爬虫规律, 地址如下 ...
- 《Python自动化测试修炼宝典》线上课程已经成功入驻网易云课堂......
<Python自动化测试修炼宝典>线上课程已经成功入驻网易云课堂...... IT测试老兵利用工作之余,亲自录制的<Python自动化测试修炼宝典>线上课程已经成功入驻网易云课 ...
- Python实例之抓取网易云课堂搜索数据(post方式json型数据)并保存到数据库
本实例实现了抓取网易云课堂中以‘java’为关键字的搜索结果,经详细查看请求的方式为post,请求的结果为JSON数据 具体实现代码如下: import requests import json im ...
- XMind与MindManager哪个好(网易云课堂老师:Array老师讲解稿)
XMind与MindManager哪个好 作者:网易云课堂老师:Array老师讲解稿 思维导图是一种将放射性思考具体化的方法,可以将人们的创造性思维及时捕捉并呈现,深受商业人士的喜爱.目前,XMind ...
- [干货教程]仿网易云课堂微信小程序开发实战经验
本篇文章想跟大家分享下:我们公司“湖北诚万兴科技”最近刚帮客户定制开发.目前已上线的“哎咆课堂”微信小程序的开发经验分享.首先大概介绍下这个小程序所涉及到的主要技术点:微信登录.微信支付.微信小程序F ...
- 教你爬取腾讯课堂、网易云课堂、mooc等所有课程信息
本文的所有代码都在GitHub上托管,想要代码的同学请点击这里
- 12岁的少年教你用Python做小游戏
首页 资讯 文章 频道 资源 小组 相亲 登录 注册 首页 最新文章 经典回顾 开发 设计 IT技术 职场 业界 极客 创业 访谈 在国外 - 导航条 - 首页 最新文章 经典回顾 开发 ...
随机推荐
- Cannot mix incompatible Qt library (version 0x40801) with this library (version 0x40804)
安装EMAN2(单颗粒重构的软件)之后,运行e2projectmanager.py来启动程序出现了这个错误. 去网上找了一下,发现一个靠谱的方案,这个问题出现是由于EMAN2这个程序自带了Qt的库,而 ...
- BZOJ 2882: 工艺( 后缀自动机 )
把串S复制成SS然后扔进后缀自动机里, 从根选最小的儿子走, 走N步就是答案了...一开始还想写个treap的...后来觉得太麻烦..就用map了... ----------------------- ...
- PHP自练项目中个人中心创建,修改,验证(服务器端和客户端验证)
当注册成功到登录后进入个人中心,查看和修改自己的资料 第一步:创建个人中心: <?php //定义个常量,用来授权调用includes里面的文件 define('IN_TG',true); // ...
- codeforces 620E. New Year Tree dfs序+线段树+bitset
题目链接 给一棵树, 每个节点有颜色, 两种操作, 一种是将一个节点的子树全都染色成c, 一种是查询一个节点的子树有多少个不同的颜色, c<=60. 每个节点一个bitset维护就可以. #in ...
- leetcode 211. Add and Search Word - Data structure design Trie树
题目链接 写一个数据结构, 支持两种操作. 加入一个字符串, 查找一个字符串是否存在.查找的时候, '.'可以代表任意一个字符. 显然是Trie树, 添加就是正常的添加, 查找的时候只要dfs查找就可 ...
- 谈谈我的iOS学习及分享
iOS可以说是最近几年比较热门和高速发展一个系统,因此iOS开发也变得火热.越来越多的程序员都转向了iOS开发,每个人的学习方法都不同,分享下我的学习经历和见解吧.我之前学习过C++和Qt,Java也 ...
- 设计模式总结1--observer pattern
<!-- 设计模式 --><!--是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性 --&g ...
- SQL Server SQL高级查询语句小结(转)
--select select * from student; --all 查询所有 select all sex from student; --distinct 过滤重复 select disti ...
- Android显示GIF动画完整示例(二)
MainActivity如下: package cc.testgif2; import android.os.Bundle; import android.app.Activity; /** * De ...
- Android自定义控件实战——水流波动效果的实现WaveView
转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/38556891 水流波动的波形都是三角波,曲线是正余弦曲线,但是Android ...