用python创建桌面应用(一)
来源:互联网 发布:淘宝网商城清仓特价 编辑:程序博客网 时间:2024/06/01 08:45
最近在看一本叫《python项目开发实战的书》,里面有一个项目是创建桌面应用的,比较感兴趣,所以就写下来。当做是一个读书笔记吧。下面我所使用的代码是原书的代码,如果需要下载请在http://www.wrox.com/WileyCDA/WroxTitle/Python-Projects.productCd-111890866X,descCd-DOWNLOAD.html下载Chapter 4 Code。
1.组织应用程序
我们刚学编程语言的时候,写的代码都是在一个文件中完成的。如果我们在开发一个项目的时候,这个就显得逻辑不清楚,看着很烦,根本就不想看。我们构建一个高效的,可扩展应用的关键是应用分层架构,最常见的方法是把应用分为三层,用户界面层,核心逻辑层(业务逻辑层)和数据层。有的时候涉及到网络时,会有网络层。
用户界面应该为用户展示应用逻辑,但并不实现逻辑,这和我们学面向对象时的封装差不多。它的任务是尽可能简单的展示应用 的功能,并且尽可能清晰的展示结果和输出,和我们玩游戏一样,我只知道怎么玩,他是怎么做出来关我什么事。用户界面会控制在给定的时间点上哪些功能是可用的,比如说,我们在LOL的时候,不把buff打死,就不可能给你额外的加成一样。如果我们使用面向对象的程序,对象通常会表示类似菜单,按钮和窗口的东西。用户界面通过调用逻辑层提供的函数或方法访问核心逻辑层。
核心逻辑层包含所有数据的算法和状态管理。在该层,可以编写代码来改变数据值,创建新实体,打开或关闭文件等。说这么多这一层是干什么的呢?它的目的是提供一组用户界面可以访问的函数或服务。为了提高效率核心逻辑函数不应该打印结果,但是应该把它们作为值返回,就是说不要用print而是用return。用户界面可以在合适的地方将这些值,以适当的格式展现出来。核心逻辑层仅显示信息,它不关心信息的显示格式,就是这种把逻辑和显示分开,可以在相同核心逻辑层上创建不同的用户界面。核心逻辑层会操作数据层提供的数据。
数据层用于管理数据。他把数据存储在安全的地方并在需要时取回数据。它不应该包含复杂的算法或特定于应用的逻辑。它仅仅把原始数据传递到核心逻辑层来处理。数据层可能包含一些基本的数据完整性处理来确保数据的一致性。它可能也会集成一些安全功能,比如密码加密,权限控制等。它应该通过一组对象,函数或服务来显示数据。说了这么多,建议你使用数据库吧。
用户界面层,逻辑层和数据层之间的交互通常使用一个名为模型-视图-控制器(Model View Controller,MVC)的设计模式。大体上讲,模型代表核心逻辑层和数据层,而是视图代表用户界面的显示元素,控制器代表这些显示元素之间的交互和依赖。
这个项目是以一个游戏作为案列,叫tic-tac-toe。说白了就是我们中国人玩的井字棋。如果你要做游戏还是建议你使用python的pygame来做。
2.创建命令行界面
2.1创建数据层
创建游戏时,首先需要设计数据层。对于这个游戏需要一个简单的文本文件来保存游戏状态,这样就可以被保存和恢复使用。这个游戏里有9个正方形的面板,里面是空格或X,O字符。你高兴也可以换成其他的字符。我们可以用简单的字符串列表来表示这三个项。为了存储把列表转换为简单的字符串。
需要的另一个数据是下一步是哪个玩家,在人机游戏中,可以假设人永远是下一个玩家。所以我们的数据层接口中应提供两个方法:保存游戏(saveGame),恢复游戏(restoreGame)。
''' oxo_data is the data module for a tic-tac-toe (or OXO) game. It saves and restores a game board. The functions are: saveGame(game) -> None restoreGame() -> game Note that no limits are placed on the size of the data. The game implementation is responsible for validating all data in and out.'''import os.pathgame_file = "oxogame.dat"def _getPath(): #这是一个辅助函数 得到主目录,如果失败就使用当前目录 ''' getPath -> string Returns a valid path for data file. Tries to use the users home folder, defaults to cwd''' try: game_path = os.environ['HOMEPATH'] or os.environ['HOME'] if not os.path.exists(game_path): game_path = os.getcwd() except (KeyError, TypeError): game_path = os.getcwd() return game_pathdef saveGame(game): #创建一个包含表示游戏的字符串的新文件 ''' saveGame(game) -> None saves a game object in the data file in the users home folder. No checking is done on the input which is expected to be a list of characters''' path = os.path.join(_getPath(), game_file) try: with open(path, 'w') as gf: gamestr = ''.join(game) gf.write(gamestr) except FileNotFoundError: print("Failed to save file")def restoreGame(): #定位到被保存的文件并打开,读取保存的游戏数据 ''' restoreGame() -> game Restores a game from the data file. The game object is a list of characters''' path = os.path.join(_getPath(), game_file) with open(path) as gf: gamestr = gf.read() return list(gamestr)def test(): print("Path = ", _getPath()) saveGame(list("XO XO XO ")) print(restoreGame())if __name__ == "__main__": test()
上面的这个文件的文件名为oxo_data.py- 用python创建桌面应用(一)
- 用python创建桌面应用(二)
- 用python创建桌面应用(三)
- 用python创建桌面应用(四)
- python-创建桌面应用--了解
- Electron 创建桌面应用
- python 创建桌面快捷方式
- HTML+CSS+python+qtwebkit打造跨平台桌面应用(一)
- android 应用创建桌面快捷方式
- 创建自身应用桌面快捷方式
- 创建应用快捷方式到桌面
- Electron创建一个桌面应用
- 桌面中心(一)创建数据库
- 桌面中心(一) 创建数据库
- 阅读笔记一(Android系统创建桌面快捷方式ShortCut)
- 探讨Java之桌面应用的可行性(一)
- 使用WPF创建一个Digg桌面应用
- Android为应用在桌面创建快捷方式
- Python.备忘
- tingkman-tcpip协议分析和实现1网络报文帧进入tcpip协议栈初步处理流程
- 快捷键
- Linux加载库目录顺序
- 将十进制数转换为十六进制数
- 用python创建桌面应用(一)
- 小密圈产品事故@2017 No.2 --- 条件竞争提现
- 遍历List集合的三种方法
- Snowflake Snow Snowflakes
- 算法简介
- windows平台下删除注册表后应用程序无法使用的情况
- 欢迎使用CSDN-markdown编辑器
- R语言做文本挖掘 Part2分词处理
- 工具类-JSON串自动加前缀