2w task 笔记

人说: 要/有/光,
于是/就/有了/光
....
这篇笔记废话多重复多, 扫扫黑体字就够

开始之前

  • 使用 Tk
    • Tk 是 GUI 工具包, 其生成的界面在各大系统都展现原生风格, 特别是 os x, 做出来不觉得丑 ; 不过 Tk 与 TCL(一种工具命令语言)密不可分
    • 好在 python 自带标准库 Tkinter
    • 检查是否无异常
>>> import Tkinter
>>> #: 可见一个标题为 tk 的小窗口
>>> Tkinter._test()
>>> #: 显示 Tcl/Tk 版本
>>> Tkinter.Tcl().eval('info patchlevel')
>>> '8.5.9'#文本框输入不了中文
>>> '8.5.18'#可以
  • Tcl/Tk 版本太低, 文本框输入不了中文? MAC 请去官网升级; 还是过不去, 曲线救国, pyenv 换个环境...这样就可以欢乐地编程了~
  • 其实下面内容可以无视了~废话太多, 不然看看粗体字就够~

首先, 掌握怎么生成个窗口

  • 先给头脑预演一个雏形, 在不知道怎样出现一个界面的时候就开始码代码可不明智, 就像听描述画来没见过的人的肖像(真的有), 总得先把脸型确定了; 试着运行官方文档的例子一下, 界面真凭空出现了(⊙o⊙)

试试删除那些看起来重复的代码, 保留那些字面很重要的代码, 看看发生了什么, 创生一个窗口的最小代码是?

from Tkinter import *
#: 创建了一个空窗口实例
变量名 = Tk()
#: 一旦执行就进入封闭循环, 其后的代码就不在射程了; 关闭窗口, CLI 退出循环; 
变量名.mainloop()

这样心里就有底的, 脸的轮廓出来了, 五官呢?

e = Entry(self, opts, ..)
#:使五官可见, 以及如何呈现(你看到美人, 还是毕加索的画活了), 没那么夸张, 默认 TOP("top"), 纵向排列
#:另有gird, place 
e.pack()

好了, 你知道怎么让五官呈现就够

  • 本着最小代价的思想预想下界面是什么样, 你需要多少...五官? 眼睛遍历目录 , 把们找出来

    • 一个文本区, 一个按钮命令清空文本区保存文本, 一个按钮命令读取显示文本, 命令只能一个, 所以得有 2 个按钮, 退出很简单不算>
    • 很好, 确实不多, 三个, 其中 2个是同样的, 只需要看 2个方法(函式)就可以
    • 如果你没有什么疑问了就可以放手去做了
    • 等等>
    • 什么? 你有什么要问的?
    • 不是 2, 能不能是 1 呢?>
    • 你为什么这么问?
    • 写完不能立即看到效果, 我还得划拉鼠标瞄准按钮 , 上次不是只用回车了吗, 虽然 CLI 和 GUI 不是一回事>
    • 为什么不是一回事?
    • 在 CLI 很自然地一行一行地回车结束一行, 不然怎么叫命令行么, 基本只要键盘输入就可以, 界面总要有点选的对象啊...为什么, 是呀, 我用的 macdown 就没有呢!..>
    • .....
    • 对话反了, 因为以上, 希望事前发生然而并没有 TAT
  • 只用一种方法能完成吗? 扎进这个方法

    • 绝对不可缺的是什么? 文本区>
    • 只用文本区
    • 可是一旦进入 mainloop 稳定状态, 组件自身就不会改变, Botton 的命令可以改变组件的内容, 不要按钮, 谁来触发文本区的变化呢?>
    • 搜索 'text' , 看到了事件! 和触发真是匹配惹
    • 把实例复制下来运行看看, 敲键盘Return, 终端打印了文本框里的字符串!
    • 把它迁移到文本上
    • ....
    • 实际是看了视频和卡片之后回想...
    • 另觉得现在的'友好'与以前比一定发生了变化, 现在是什么呢?
    • 甚至之前都没有意识到它会变化...

好了, 掌握怎么生成个界面就够, 现在, 用一用上一代code

  • 行动点已经有了: 事件, 查找触发条件怎么写, 和要的行动函数怎么绑定?
e.bind('<event 格式>', self.example)
# 组件们在一起, 方法们在一起, 挺好
def example(self, event)
  • 之前的 code 可以复用过来了, 怎么复用? from package import modules(pyc)
  • 数据怎么获得? 在哪里产生? 怎么获得? e.get()
  • 怎么传递? self全局
  • 怎么显示?t.insert(位置, 内容对象)
  • 其间error:
f.write('\n' + text) 
UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-5: ordinal not in range(128)

解决: text.encode(utf-8)
不过 idle 和终端中 sys.stdin/stdout/stderr.encoding 都是 UTF-8, 什么时候, 谁把它变成 ascii 的? log 文件召唤了控制台, 换成 txt 文件也是同错, 控制台扮演什么角色,,,

  • 把特殊的赋值放到总调下if __name__ == '__main__':, 尽量让代码可复用
  • 至于 class , why class? 看见界面亲切多了, 或许借这东风(所见即所得的幻觉+代码可复用+官方文档有例子)试一试,,,= =
    • 说类是模板, 或者披萨, 或者神笔马良的画, 再或者忍者的召唤卷轴, 似乎都觉得可以理解
    • 但实际写代码, 打比方和生动都救不了运行结果, 踏踏实实多练习
    • 可等练的如火纯情了时间也过了?
    • 对于眼前的 objective, 万一你还是不会在当前情境下用呢?
    • 战术上先以官方例子作起始

最后, 没有最后, 几段自述与小结

都不敢说反思,, 每次觉得反省到位, '恩我懂了', 下次还是慌张, 还是打脸

  • 我不知道我不知道:

    • 预设界面必须有按钮, 增加了起始难度(并行问题数量(假设问题很多很不一样))
    • ..结果例子不懂就上手代码, 把 self 漏了导致变量传递不出去(现在知道的)
    • 预设官方文档的 e 文很难
  • 同时处理' tk 版本太低, 下载升级, 文本框还是不能输入中文'也是一样, 被一个选项迷住了, 就是要找到'python 怎么import module , 路径? 哪个文件?'

    • '怎么跨路径倒库, 或者文件改路径?那些....'
    • 暗自想着这不解决, 还学不学得成编程思维, 找不找得到问题本源
    • ....
    • 想得有理有据, 事实上动机是怎样, 你很高兴堵这里了吧? 逃离了另一个问题,
    • 假装这个问题更有价值, 试图玩'扮演极客家家酒'游戏吗?
    • 你这么脆弱吗, 需要争取这一时来自我认同? 还是说你想证明极客不过就是倒腾这样的问题就满足的人?
    • are you joking? 你不尊重自己也不尊重别人吗?
    • 还是说你这么理解合意困难的 : 这困难来的得好, 我正好避避眼下的危机
    • 好笑吧....
    • ...眼熟吗, 这是 Ambiguity effect, 你上个月还看了吧?
    • 然后, 一路走来, 你耳熟能详的'知识的诅咒'天天在踩吧?
    • 然后呢???
    • ....
  • 回来, 中文输入文本框解决同时看了课程视频放弃 Botton 后, 又回到官方文档

    • 面对全英文官方文档, 真不能想象自己要把它读完再写
    • 这还只是 python 的一个库啊(冷汗), 扛不住就是地老天荒, 海枯石烂, 文档还是文档, 你还是你
    • 笨方法就是在练习例子中让你用会的, 不能换个马甲就不认识
    • 不然, '我学的是学习的学习方法', 说出来自己都哭笑不得, 你是装假啊还是假装还是装啊?
    • 看完目录, 运行一个例子, 熟悉例子再按例子改, 找切入熟悉代码的行动点
    • 确定一个对象(或者说一个关键词), 去找你要的
    • 别练快速眼动, 挣扎一下, 赶紧自言自语镇定一下
    • 这样的问题类似'怎么明智适应大换风格的老朋友?'?

错误反反复复, 换一个情景就不能生活自理了? 好好思考你的来路, 笨方法

3+1
todo: 透彻把玩(像小孩子玩玩具一样)每个文档的介绍例子, 一个或两个, 会用就够
todo: 知道官方文档布局, 你要的答案可以在哪里, 至少知道可以搜什么
todo: 问你需要多少? 再少, 更少, 还少?....就这么少
toask: 自己的岩钉到底怎么才能/才算打得牢?


keep clam 散个步
and 回来
review 思考
...