python (6) - 图形化界面TKinter、TCP/IP
python 基础知识学习
中间可能断了一篇;
参考:
图形化界面
python 自带的图形界面库TKinter
# GUI TKinter
from tkinter import *
# 消息盒子 弹窗信息
import tkinter.messagebox as messagebox
class Application(Frame):
def __init__(self,master=None):
Frame.__init__(self,master)
self.pack()
self.createWidgets()
def createWidgets(self):
# label 标签信息
self.helloLabel = Label(self,text="hello world")
self.helloLabel.pack()
# input 信息输入
self.getNameInput = Entry(self)
self.getNameInput.pack()
self.sureButton = Button(self,text="ok",command=self.welCome)
self.sureButton.pack()
self.quitButton = Button(self,text="Exit",command=self.quit)
self.quitButton.pack()
def welCome(self):
name = self.getNameInput.get() or "world"
messagebox.showinfo("Message","你好,%s" % name)
# 创建程序
app = Application()
# 程序标题title
app.master.title("hello world")
# print(app.master.size)
app.master.minsize(300,300)
app.mainloop()
说明:
- 继承自
Frame;初始化时需调用Frame.__init__(); master程序窗口控制,如标题、大小、位置等;- 类似
Label/Button/Entry都是界面的组件; pack()方法将定义的组件放到主程序上;command属性可绑定事件到按钮组件;app.master.title()定义程序窗口的标题;- 消息盒子
messagebox;
结果示例:

自定义图形绘制
在打开的界面中,处理常规的界面组件,也可自定义绘制图像;内置turtle库
'''
绘制图形、turtle库
'''
import turtle
# 中心点(0.00,0.00)为原点开始,指定点的位置
turtle.setpos(100,100)
turtle.goto(40,100)
# 回到原点
turtle.home()
turtle.color("red","green")
# 绘制一个正方形,不调用填充
num = 0
while True:
turtle.forward(75)
turtle.right(90)
num+=1
if num>3:
break
# 绘制一个圆,调用填充、fill
turtle.begin_fill()
turtle.setpos(-150,0)
turtle.circle(90)
turtle.end_fill()
# 隐藏绘制图形中移动的光标
turtle.hideturtle()
# 绘制一个文本
turtle.color("#2312fa")
turtle.setpos(-100,200)
turtle.write("hello world!",False,align="left",font=("heiti",16,"bold"))
# turtle.write((0,0),True)
turtle.done()
说明:
- 官网地址,API
- 最后的语句需要
turtle.done()不然页面绘制完图形会直接关闭
结果示例:

TCP/IP
Tcp/Ip协议互联网终端之间的桥梁;信息传输、共享;TCP是可靠连接;
使用socket创建一个服务server.py;
'''
创建一个server,启动监听 8080 端口,
处理客户端过来的数据请求
'''
import socket
# 线程控制接口
import threading
# 时间
import time
# AF_INET 指定IPV4 ,SOCK_STREAM 指向面向流的TCP协议
server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 指定绑定的IP地址、端口号
server.bind(('127.0.0.1',8080))
# 启动监听 ; 可指定监听连接的最大连接数
server.listen(2)
# 定义处理连接的方法
def handleInfo(sock,addr):
print("from:%s:%s" % addr)
sock.send(b"hello!")
# 等待接收客户端数据
while True:
data = sock.recv(500)
time.sleep(3)
if not data or data.decode("utf-8")=="exit":
break
print("client: %s " % data.decode("utf-8"))
sock.send(("I get you ! %s" % data.decode("utf-8")).encode("utf-8"))
sock.close()
print("the addr %s:%s closed" % addr)
# 处理客户端的连接
while True:
sock,addr = server.accept()
# 没过来一个新的连接,创建一个线程来处理
child = threading.Thread(target=handleInfo,args=(sock,addr))
child.start()
创建客户端client.py
'''
创建一个客户端程序,连接服务程序
'''
import socket
# 创建
client = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 进行连接
client.connect(("127.0.0.1",8080))
# 接收服务端的数据
data = client.recv(500)
print("get info: %s" % data.decode("utf-8"))
# 发送一个数据 、 提交一个名称
client.send(b"admin")
print("server: %s" % client.recv(500).decode("utf-8"))
# 连接关闭 、发送关闭表示 exit
client.send(b'exit')
# client.close()
说明:
socket.connect()/socket.bind()方法只有一个参数,传入参数要使用元组传递IP、端口号- 数据传输只能以字节传输
b'admin' socket.AF_INET指定的协议是IPV4 ;socket.SOCK_STREAM是基于流的TCP信息传输;- threading 官网链接 处理线程相关
- time 官网链接 处理时间相关、功能接口;
- 服务端、客户端之间通信:服务端发送->客户端接收、客户端发送->服务端接受;
UDP是一种不可靠传输协议;不保证完全接受,是用于信息广播;
# server
'''
UDP 不可靠传输;广播协议
'''
import socket
# 选择 SOCK_DGRAM UDP类型
us = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
us.bind(("127.0.0.1",8089))
while True:
data,addr = us.recvfrom(500)
print("from: %s:%s get info:" % addr ,data.decode("utf-8") )
us.sendto(b"I'm coming...",addr)
# client
'''
创建一个客户端程序
'''
import socket
# 创建
client = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
# 发送一个数据 、 提交一个名称
client.sendto(b"admin",("127.0.0.1",8089))
print("server: %s" % client.recv(500).decode("utf-8"))
执行效果预览:
