当前位置: 首页 > news >正文

【零基础入门学习Python笔记017】GUI的最终选择:Tkinter

1.Canvas组件
    1.1 在Canvas组件上绘制对象,可以用create_xxx()的方法(xxx表示对象类型,例如直线line,矩形rectangle和文本text等)
from tkinter import *

# 创建主窗口
root = Tk()
w = Canvas(root, width=200, height=100)
w.pack()

# 画一条黄色的横线
w.create_line(0, 50, 200, 50, fill="yellow")
# 画一条红色的竖线(虚线)
w.create_line(100, 0, 100, 100, fill="red", dash=(4, 4))
# 中间画一个蓝色的矩形
w.create_rectangle(50, 25, 150, 75, fill="blue")

mainloop()

运行结果显示:
  1.2 添加到Canvas上的对象会一直保留着。如果希望修改他们,可以使用coords(),itemconfig()和move()方法来移动画布上的对象,或者delete()方法来删除:


 
from tkinter import * # 创建主窗口 root = Tk() w = Canvas(root , width= 200, height= 100) w.pack() # 画一条黄色的横线 line1 = w.create_line( 0, 50, 200, 50, fill= "yellow") # 画一条红色的竖线(虚线) line2 = w.create_line( 100, 0, 100, 100, fill= "red", dash=( 4, 4)) # 中间画一个蓝色的矩形 rect1 = w.create_rectangle( 50, 25, 150, 75, fill= "blue") # 黄横线上移 w.coords(line1 , 0, 25, 200, 25) # 矩形框被红色填充 w.itemconfig(rect1 , fill= "red") # 删除了红色虚竖线 w.delete(line2)
Button(root, text="删除全部", command=(lambda x=ALL: w.delete(x))).pack()

 
mainloop()
运行结果显示:

点击删除按钮:

1.3 还可以在Canvas上显示文本,使用的是create_text()方法:
from tkinter import *

# 创建主窗口
root = Tk()
w = Canvas(root, width=200, height=100)
w.pack()

w.create_line(0, 0, 200, 100, fill="green", width=3)

w.create_line(200, 0, 0, 100, fill="green", width=3)
# 中间画一个蓝色的矩形
w.create_rectangle(40, 20, 160, 80, fill="green")
w.create_rectangle(65, 35, 135, 65, fill="yellow")
w.create_text(100, 50, text="FishC")

mainloop()

运行结果显示:
1.4 使用creater_oval()方法绘制椭圆形(或圆形),参数是指定的一个限定的矩形(Tkinter会自动在这个矩形内绘制一个椭圆):
from tkinter import *

# 创建主窗口
root = Tk()
w = Canvas(root, width=200, height=100)
w.pack()

w.create_rectangle(40, 20, 160, 80, dash=(4, 4))
w.create_oval(40, 20, 160, 80, fill="pink")
w.create_text(100, 50, text="FishC")

mainloop()

运行结果:
1.5 绘制多边形,可以使用create_polygon()方法。

示例画一个五角星:
from tkinter import *
import math as m

# 创建主窗口
root = Tk()
w = Canvas(root, width=200, height=100, background="red")
w.pack()

# 中心点坐标
center_x = 100
center_y = 50
# 半径长度
r = 50
points = [
    # 左上点
    center_x - int(r * m.sin(2 * m.pi / 5)),
    center_y - int(r * m.cos(2 * m.pi / 5)),
    # 右上点
    center_x + int(r * m.sin(2 * m.pi / 5)),
    center_y - int(r * m.cos(2 * m.pi / 5)),
    # 左下点
    center_x - int(r * m.sin(m.pi / 5)),
    center_y + int(r * m.cos(m.pi / 5)),
    # 顶点
    center_x,
    center_y-r,
    # 右下点
    center_x + int(r * m.sin(m.pi / 5)),
    center_y + int(r * m.cos(m.pi / 5)),
    ]
w.create_polygon(points, outline="green", fill="yellow")

mainloop()

运行结果:


设计一个像window画图工具那样的面板,让用户可以在上面随心所欲地绘画。

其实原理很简单,就是获取用户拖动鼠标的坐标,然后每个坐标对应绘制一个点上去就好了。在这里,不得不承认有点遗憾让人的是TKINTER并每天没有“点”的方法。
其实:可以通过绘制一个超小的椭圆形来表示同一个点。在下面的例子里,通过相应“鼠标左键按住拖动”事件(<B1-Motion>),在鼠标拖动的同时获取鼠标的实时位置(x, y),并绘制一个超小的椭圆代表一个”点“:
from tkinter import *
import math as m

# 创建主窗口
root = Tk()
w = Canvas(root, width=400, height=200)
w.pack()

def paint(event):
    x1, y1 = (event.x - 1), (event.y - 1)
    x2, y2 = (event.x + 1), (event.y + 1)
    w.create_oval(x1, y1, x2, y2, fill="red")

w.bind("<B1 - Motion>", paint)
Label(root, text="按住鼠标左键并移动,开始绘制你的理想蓝图吧...").pack()

mainloop()

运行结果:

相关文章:

  • 用Yolov2模型训练VOC数据集的各文件理解
  • python 中easydict的简单使用
  • Numpy np.array 相关常用操作学习笔记
  • Matconvnet关于simplenn 转dagnn的一些小的总结
  • 海思AI芯片(Hi3519A/3559A)方案学习(一)资料以及术语介绍
  • 海思AI芯片(Hi3519A/3559A)方案学习(二)RuyiStudio安装
  • 海思AI芯片(Hi3519A/3559A)方案学习(三)Ubuntu18.0.4上编译Hi3519AV100 uboot和kernel
  • 海思AI芯片(Hi3519A/3559A)方案学习(四)如何在3519A板子上运行sample code
  • 海思AI芯片(Hi3519A/3559A)方案学习(五)SDK平台文档梳理
  • Atlas 200 DK 系列 -- 快速搭建开发环境
  • Atlas 200 DK 系列--初级篇--MindStudio常见操作
  • Linux/Ubuntu下解压命令
  • ubuntu终端命令的几个常用重要命令
  • 海思AI芯片(35xx):window仿真代码需修改部分
  • 在Ubuntu 16.04 安装python3.5 环境并设置为默认
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • Apache Pulsar 2.1 重磅发布
  • C++类中的特殊成员函数
  • LeetCode18.四数之和 JavaScript
  • Linux学习笔记6-使用fdisk进行磁盘管理
  • Markdown 语法简单说明
  • mysql innodb 索引使用指南
  • Redash本地开发环境搭建
  • session共享问题解决方案
  • spring boot 整合mybatis 无法输出sql的问题
  • Vue2 SSR 的优化之旅
  • 从零搭建Koa2 Server
  • 从输入URL到页面加载发生了什么
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 什么是Javascript函数节流?
  • 事件委托的小应用
  • 微信小程序:实现悬浮返回和分享按钮
  • 为视图添加丝滑的水波纹
  • 源码安装memcached和php memcache扩展
  • Nginx实现动静分离
  • ​软考-高级-系统架构设计师教程(清华第2版)【第15章 面向服务架构设计理论与实践(P527~554)-思维导图】​
  • # centos7下FFmpeg环境部署记录
  • #Spring-boot高级
  • #我与Java虚拟机的故事#连载13:有这本书就够了
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (zt)最盛行的警世狂言(爆笑)
  • (教学思路 C#之类三)方法参数类型(ref、out、parmas)
  • (转)大型网站的系统架构
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • .NET 5.0正式发布,有什么功能特性(翻译)
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .NET 反射的使用
  • .NET 分布式技术比较
  • .net 桌面开发 运行一阵子就自动关闭_聊城旋转门家用价格大约是多少,全自动旋转门,期待合作...
  • .NET版Word处理控件Aspose.words功能演示:在ASP.NET MVC中创建MS Word编辑器
  • [2544]最短路 (两种算法)(HDU)
  • [ai笔记4] 将AI工具场景化,应用于生活和工作
  • [Asp.net mvc]国际化