网络编程之socket学习笔记

English Version: https://today2tmr.com/en/2017/06/29/network-programming-socket-learning-note/

由于初学,目的导向为理解,笔记将偏向于浅显而缺乏深度。

基本概念

  • 我们通常用IP和端口号去定位一个网络服务。
  • socket就想是电话线的两头,一旦电话接通,通讯就开始了。
  • 有三种形式的sockets,我们讨论其中的两种:
    • 流式套接字 SOCK_STREAM(TCP)
    • 数据包套接字 SOCK_DGRAM (UDP)

TCP与UDP的对比

  • 流式套接字 SOCK_STREAM(TCP)
    • 面向连接,数据正确性高,效率较低。
    • 服务端与客户端建立一对一连接,每次信息传递均有正确性校验,保证数据准确到达目的地。
  • 数据包套接字 SOCK_DGRAM (UDP)
    • 无连接,数据可能丢失,高效率。
    • 服务端和客户端均只需1个套接字。就像快递站,填写邮寄信息即可向任一地点发货。
    • 如语音、视频通话同网络通讯通常采用UDP以获得高效传播速率,偶尔的数据丢失也不会造成大的影响。

Continue reading “网络编程之socket学习笔记”

python3.Tkinter学习之更多Widgets

译自www.tkdocs.com

这篇译文由于是急于学习顺便写的,将选举出几个可能在后面的项目中会用到的widgets,不全部涉及。

Listbox

Widget综述
一个listbox显示一个单行文本项目的列表,允许浏览和选择其中的单个或多个。
创建:
l = Listbox(parent,height=10)

管理listbox中的元素

每个listbox有一个listvariable的配置选项,允许关联一个含有列表的变量到listbox。列表中的每个元素是一个字符串,表示了listbox中的一项。所以对listbox中每一项的操作可以通过调整关联变量。简单来说,要找出listbox的第三行是什么,只用看listvariable的第三个元素。

选择项目

  • 单选和多选可以通过selectmode这一配置选项来设定。
  • 单选值为browse;多选值为extended
  • 要找出当前选定了哪些项,可以调用curselection方法。
  • 可绑定虚拟事件 <ListboxSelect>

Continue reading “python3.Tkinter学习之更多Widgets”

文本中特殊符号的处理

English Version: https://today2tmr.com/en/2017/06/28/text-edition-for-special-sign/

有时我们需要替换或着用以替换制表符,换行符等特殊字符,普通文本编辑器却做不到,下面是解决这个问题的几行代码。

保存下面代码为 replace.py,python3 replace.py 运行即可。

 

python3.Tkinter学习之网格图形管理器

译自Modern Tkinter for Busy Python Developers

本章主要是译者的归纳整理,并未全部按原文翻译。
一般地,我们通过使用grid方法来设置widget在容器中的布局。
例如: label.grid()

行和列 column and row

通过设置columnrow来定位widget。
label.grid(column=1,row=1)
默认情况下,column=0,row=0。

合并单元

通过设置columnspanrowspan可以合并多个单元。
label.grid(column=1,row=1,columnspan=2,rowspan=2)
默认情况下,columnspan=1,rowspan=1。

Continue reading “python3.Tkinter学习之网格图形管理器”

python3.Tkinter学习之基本Widgets

译自Modern Tkinter for Busy Python Developers

本章介绍一些几乎可以在任何用户接口中找到的Widgets:frames, labels, buttons, checkbuttons, radiobuttons, entries and comboboxes。

0X01 Frames

Widget综述

一个frame就是一个简单的长方形widget。Frames用来作为其它widgets的容器,这些widgets受控于图形管理器例如gird。

创建:frame = ttk.Frame(parent)

Frames有一些配置选项可以改变其显示方式:

  • 尺寸 ttk.Frame(parent,height=350,width=350)
    • 350 是 350 像素
    • 350c 是 350 厘米
    • 350i 是 350 英寸
    • 350p 是 350 printer’s points(1/72英寸)
  • Padding frame["padding"]=(5,10)
    • (a) 上下左右padding均为a
    • (a,b) 水平方向padding为a,垂直为b
    • (a,b,c,d) 左,上,右,下的padding分别为a,b,c,d
  • 边界 frame["borederwidth"]=2
    • 边界的显示方式配置选项为relief。有flat,raised,sunken,solid,ridge,groove几个可选值。

Continue reading “python3.Tkinter学习之基本Widgets”

python3.Tkinter学习之Tk概念

译自Modern Tkinter for Busy Python Developers

与pyQt,wxPython相比tkinter较为简单,我用来制作小型GUI程序,省去了很多较为深入的知识,只保留了常用部分。

Widgets

Widget 类

Widget是对象,表示Button, frame等类的实例。

窗口的分层结构

另一件需要知道的事是创造的widget实例的父级。Tk中,所有的widgets都是窗口分层结构中的一部分,单个root作为分层结构的顶部。这个结构可以有任意深度,你可以在一个root窗口中建一个frame,frame包含另一个frame,frame又包含一个button。甚至一个新的顶级窗口是同样结构中的一部分,它的内容组成整体窗口分层结构中的子树。

在常见例子中,我有单个frame作为root窗口的孩子,这个frame控制着其他所有孩子。root窗口是frame是容器,及父级。

Alt text

Continue reading “python3.Tkinter学习之Tk概念”