1. 1
  2. 认识wxpython
  3. 2
  4. 画几个形状
  5. 3
  6. 再做个计算器
  7. 4
  8. 最后实现个2048游戏

实验1-认识wxpython

一、实验说明

1. 环境登录

无需密码自动登录,系统用户名shiyanlou

2. 环境介绍

本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序:

  1. LX终端(LXTerminal): Linux命令行终端,打开后会进入Bash环境,可以使用Linux命令
  2. Firefox:浏览器
  3. sublime/GVim:好用的编辑器
  4. git,用于获得参考代码

3. 环境使用

使用GVim编辑器输入实验所需的代码及文件,使用LX终端(LXTerminal)运行所需命令进行操作。

二、课程介绍

课程目的:

  1. 熟悉实验环境
  2. 了解wxpython
  3. 能运行出一个窗口
  4. 理解ClientDCPaintDC的区别

课程环境已装好wxpython,配套代码仓库

  1. http://git.shiyanlou.com/heibanke/shiyanlou_cs427

获得参考代码敲命令 git clone 上面的代码仓库

1. wxpython

wxpython是基于Python的GUI库,优点如下:

  1. 跨平台,32-bit Microsoft Windows,大多数Unix/Linux,Mac
  2. 开源免费
  3. 简单易用

官方文档链接

不错的英文教程适合系统的学习各种控件的使用。

<>还不错的中英文版书籍,网上很容易搜到电子版

2. 运行一个窗口

直接实例化

  1. import wx
  2. # 每个wxPython的程序必须有一个wx.App对象.
  3. app = wx.App()
  4. # 实例化一个frame
  5. """
  6. None: 当前窗口的父窗口parent,如果当前窗口是最顶层的话,则parent=None,如果不是顶层窗口,则它的值为所属frame的名字
  7. -1: id值, -1的话程序会自动产生一个id
  8. pos: 位置
  9. size: 宽,高大小
  10. 还有风格参数style,不填默认是这样几个的组合
  11. wx.MAXIMIZE_BOX| wx.MINIMIZE_BOX| wx.RESIZE_BORDER|wx.SYSTEM_MENU| wx.CAPTION| wx.CLOSE_BOX
  12. 你可以去掉几个看看效果,比如
  13. style = wx.SYSTEM_MENU| wx.CAPTION| wx.CLOSE_BOX
  14. """
  15. frame = wx.Frame(None, -1, title='wx_00_base.py', pos=(300,400), size=(200,150))
  16. # 居中处理
  17. #frame.Centre()
  18. # 显示frame
  19. frame.Show()
  20. # 进入循环,等待窗口响应
  21. app.MainLoop()

3. 定义Frame子类的方式

  1. #coding=utf-8
  2. import wx
  3. class Example(wx.Frame):
  4. def __init__(self, title):
  5. super(Example, self).__init__(None, title=title,
  6. size=(600, 400))
  7. self.Centre()
  8. self.Show()
  9. if __name__=="__main__":
  10. app = wx.App()
  11. Example('Shapes')
  12. app.MainLoop()

上面两种方式是一致的。

4. 接下来画一条线

  1. # -*- coding: utf-8 -*-
  2. import wx
  3. class Example(wx.Frame):
  4. def __init__(self, title):
  5. super(Example, self).__init__(None,title=title,
  6. size=(250, 150))
  7. self.Centre()
  8. self.Show()
  9. dc = wx.ClientDC(self)
  10. # 画一条线,参数为起始点的x,y,终点的x,y
  11. dc.DrawLine(50, 60, 190, 60)
  12. if __name__ == '__main__':
  13. app = wx.App()
  14. Example('Line')
  15. app.MainLoop()

试着把窗口resize到很小,然后再放大,你会发现什么。(没有绑定EVT_PAINT之前,线只绘制一次,如果Resize窗口小到不能显示完整的线,然后再把窗口回复原样,则不能显示的线无法恢复。)

5. 使用PaintDC

  1. # -*- coding: utf-8 -*-
  2. import wx
  3. class Example(wx.Frame):
  4. def __init__(self, title):
  5. super(Example, self).__init__(None, title=title,
  6. size=(250, 150))
  7. # 绑定渲染窗口的动作到OnPaint
  8. # 这样当resize窗口,会重新调用该函数
  9. self.Bind(wx.EVT_PAINT, self.OnPaint)
  10. self.Centre()
  11. self.Show()
  12. # 画一条线,参数为起始点的x,y,终点的x,y
  13. def OnPaint(self, e):
  14. dc = wx.PaintDC(self)
  15. dc.DrawLine(50, 60, 190, 60)
  16. if __name__ == '__main__':
  17. app = wx.App()
  18. Example('Line')
  19. app.MainLoop()

运行后试着resize窗口,绑定事件后,由于Resize会调用该绑定函数,因此线就在那里,无论你怎么resize。

最后我们把画一根线替换成画多根线,就把DrawLine换成DrawLines,例如:

  1. dc.DrawLines(((20, 60), (100, 60), (100, 10),(20, 10), (20,60)))

参数是一个一个点,注意这里参数格式是点x,y的元组列表。

6. 保存代码

  1. 如果不熟悉git可以baidu看看教程。
  2. 1. git clone 自己的仓库地址
  3. 2. 实验代码拷过去以后用
  4. 3. git add -A .
  5. 4. git commit -am "your comment"
  6. 5. git push origin master
  7. 以后再用就clone自己的代码仓库就ok

三. 总结

本节课我们掌握要点如下:

  1. 了解wxpython
  2. 熟悉环境特别是git
  3. 能运行出wxpython的窗口
  4. 了解ClientDC和PaintDC的差别
  5. 画线

如果通过具体的点来画多边形,很不方便,而且如果再来计算多边形的面积,比较各个多边形的大小等,那就更不好操作了。下一节我们通过自定义类来画各种形状,从而理解类的使用。

用Python做2048游戏 网易云课堂配套实验课。通过GUI来体验编程的乐趣。的更多相关文章

  1. 《从零玩转python+人工智能-3》网易云课堂王顺子

    #1.145——152节课25章——面向对象三大特性小案例 class Animal: def __init__(self,name,age=1): self.name = name self.age ...

  2. 网易云课堂_C语言程序设计进阶_期末考试编程题部分

    1 字符串循环右移(5分) 题目内容: 输入一个字符串和一个非负整数N,要求将字符串循环右移N次. 输入格式: 输入在第1行中给出一个字符串,以'#'表示结束,‘#’不是字符串的一部分,字符串的长度未 ...

  3. Python爬虫入门教程 21-100 网易云课堂课程数据抓取

    写在前面 今天咱们抓取一下网易云课堂的课程数据,这个网站的数据量并不是很大,我们只需要使用requests就可以快速的抓取到这部分数据了. 你第一步要做的是打开全部课程的地址,找出爬虫规律, 地址如下 ...

  4. 《Python自动化测试修炼宝典》线上课程已经成功入驻网易云课堂......

    <Python自动化测试修炼宝典>线上课程已经成功入驻网易云课堂...... IT测试老兵利用工作之余,亲自录制的<Python自动化测试修炼宝典>线上课程已经成功入驻网易云课 ...

  5. Python实例之抓取网易云课堂搜索数据(post方式json型数据)并保存到数据库

    本实例实现了抓取网易云课堂中以‘java’为关键字的搜索结果,经详细查看请求的方式为post,请求的结果为JSON数据 具体实现代码如下: import requests import json im ...

  6. XMind与MindManager哪个好(网易云课堂老师:Array老师讲解稿)

    XMind与MindManager哪个好 作者:网易云课堂老师:Array老师讲解稿 思维导图是一种将放射性思考具体化的方法,可以将人们的创造性思维及时捕捉并呈现,深受商业人士的喜爱.目前,XMind ...

  7. [干货教程]仿网易云课堂微信小程序开发实战经验

    本篇文章想跟大家分享下:我们公司“湖北诚万兴科技”最近刚帮客户定制开发.目前已上线的“哎咆课堂”微信小程序的开发经验分享.首先大概介绍下这个小程序所涉及到的主要技术点:微信登录.微信支付.微信小程序F ...

  8. 教你爬取腾讯课堂、网易云课堂、mooc等所有课程信息

    本文的所有代码都在GitHub上托管,想要代码的同学请点击这里

  9. 12岁的少年教你用Python做小游戏

    首页 资讯 文章 频道 资源 小组 相亲 登录 注册       首页 最新文章 经典回顾 开发 设计 IT技术 职场 业界 极客 创业 访谈 在国外 - 导航条 - 首页 最新文章 经典回顾 开发 ...

随机推荐

  1. 「C」 数组、字符串、指针

    一.数组 (一)数组 概念:用来存储一组数据的构造数据类型 特点:只能存放一种类型的数据,如全部是int型或者全部是char型,数组里的数据成为元素. (二)数组的定义 格式: 类型 数组名[元素个数 ...

  2. CSS3 总结-1

    新的边框属性 属性 描述 CSS border-image 设置所有 border-image-* 属性的简写属性. 3 border-radius 设置所有四个 border-*-radius 属性 ...

  3. 使用PHP搭建自己的MVC框架

    一.什么是MVC MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,把软件系统分为三个基本部分:模型(Model).视图(View)和控制器(Controller ...

  4. linux shell awk 流程控制语句(if,for,while,do)详细介绍

    在linux awk的 while.do-while和for语句中允许使用break,continue语句来控制流程走向,也允许使用exit这样的语句来退出.break中断当前正在执行的循环并跳到循环 ...

  5. Sticks(poj 1011)

    题目描述: Description George took sticks of the same length and cut them randomly until all parts became ...

  6. The reference to entity "characterEncoding" must end with the ';' delimiter

    数据源配置时加上编码转换格式后出问题了: The reference to entity "characterEncoding" must end with the ';' del ...

  7. struts.xml的配置

    <?xml version="1.0" encoding="UTF-8"?> <!--第一行必须这样写,这句话必须放在第一行--> &l ...

  8. VC++非MFC项目中如何使用TRACE宏

    记得原来尝试学MFC的时候觉得有一个TRACE可以在Debug时向VS的调试输出窗口输出字串符,用来调试时跟踪变量很方便. 然则如果不是MFC项目或者ATL的项目的话是不能使用这个宏的.这时有一个没有 ...

  9. poj 2245 Lotto(dfs)

    题目链接:http://poj.org/problem?id=2245 思路分析:无重复元素组合组合问题,使用暴力枚举法,注意剪枝条件. 代码如下: #include <iostream> ...

  10. 一、cocos2dx之如何优化内存使用(高级篇)

    本文由qinning199原创,转载请注明:http://www.cocos2dx.net/?p=93 一.内存优化原则 为了优化应用内存,你应该知道是什么消耗了你应用的大部分内存,答案就是Textu ...