【python】tkinter GUI开发: 多行文本Text,单选框Radiobutton,复选框Checkbutton,画布canvas的应用实战详解

在这里插入图片描述

✨✨ 欢迎大家来到景天科技苑✨✨

🎈🎈 养成好习惯,先赞后看哦~🎈🎈

🏆 作者简介:景天科技苑
🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。
🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi,flask等框架,linux,shell脚本等实操经验,网站搭建,数据库等分享。

所属的专栏:python图形化GUI编程tkinter精讲
景天的主页:景天科技苑

文章目录

  • 1.Text 多行文本框
  • 2.Radiobutton 单选按钮
  • 3.Checkbutton 复选按钮
  • 4.canvas 画布

1.Text 多行文本框

Text(多行文本框)的主要用于显示多行文本,还可以显示网页链接, 图片, HTML 页面, 甚至 CSS 样式表,添加组件等。因此,也常被当做简单的文本处理器、文本编辑器或者网
页浏览器来使用。比如 IDLE 就是 Text 组件构成的。
【示例】Text 多行文本框基本用法(文本输入、组件和图像显示)

"""测试Text多行文本框组件的基本用法,使用面向对象的方式"""from tkinter import *
import webbrowserclass Application(Frame):def __init__(self, master=None):super().__init__(master)        # super()代表的是父类的定义,而不是父类对象self.master = masterself.pack()self.createWidget()def createWidget(self):self.w1 = Text(root, width=40, height=12,bg="gray")# 宽度20个字母(10个汉字),高度一个行高self.w1.pack()#insert第一个参数1.0表示第1行,第0列。列的序号是从0开始self.w1.insert(1.0, "0123456789\nabcdefg")self.w1.insert(2.3, "锄禾日当午,汗滴禾下土。谁知盘中餐,粒粒皆辛苦\n")#创建按钮pack里面加上side="left",使按钮水平排列,不加的话默认是垂直排列,垂直排列很占位置Button(self,text="重复插入文本",command=self.insertText).pack(side="left")Button(self,text="返回文本",command=self.returnText).pack(side="left")Button(self,text="添加图片",command=self.addImage).pack(side="left")Button(self,text="添加组件",command=self.addWidget).pack(side="left")Button(self,text="通过tag精确控制文本",command=self.testTag).pack(side="left")def insertText(self):# INSERT索引表示在光标处插入self.w1.insert(INSERT, ' JignTian ')# END索引号表示在最后插入self.w1.insert(END, '[sxt]')#在第1行第9列插入self.w1.insert(1.8, "景天")def returnText(self):# Indexes(索引)是用来指向Text组件中文本的位置,Text的组件索引也是对应实际字符之间的位置。# 核心:行号以1开始 列号以0开始#获取第1行,第3列到第6列文本print(self.w1.get(1.2, 1.6))print("所有文本内容:\n"+self.w1.get(1.0, END))def addImage(self):# global photoself.photo = PhotoImage(file="imgs/数据分析.png")self.w1.image_create(END, image=self.photo)def addWidget(self):b1 = Button(self.w1, text='景天学堂')# 在text创建组件的命令self.w1.window_create(INSERT, window=b1)def testTag(self):#先删除原来内容,再添加self.w1.delete(1.0,END)self.w1.insert(INSERT, "good good study,day day up!\n景天科技苑\n百战程序员\n百度,搜一下就知道")#添加标签self.w1.tag_add("good", 1.0, 1.9)#给标签设置前景色和背景色self.w1.tag_config("good", background="yellow", foreground="red")#添加个链接的标签,点击触发事件self.w1.tag_add("baidu", 4.0, 4.2)self.w1.tag_config("baidu", underline=True)self.w1.tag_bind("baidu", "<Button-1>", self.webshow)def webshow(self,event):#浏览器打开设置的网址webbrowser.open("https://www.baidu.com")if __name__ == '__main__':root = Tk()root.geometry("450x300+200+300")app = Application(master=root)root.mainloop()

运行展示
在这里插入图片描述

将光标放在第一行末尾,点击重复插入文本
在这里插入图片描述

点击返回文本
在这里插入图片描述

点击添加图片
在这里插入图片描述

点击添加组件
在这里插入图片描述

通过tag精确控制文本
在这里插入图片描述

点击里面的百度,浏览器打开百度页面
在这里插入图片描述

2.Radiobutton 单选按钮

Radiobutton 控件用于选择同一组单选按钮中的一个。Radiobutton 可以显示文本,也可以
显示图像。
【示例】Radiobutton 基础用法

"""测试Radiobutton组件的基本用法,使用面向对象的方式"""from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)        # super()代表的是父类的定义,而不是父类对象self.master = masterself.pack()self.createWidget()def createWidget(self):self.v = StringVar()#设置默认选项self.v.set("F")#设置男女选项self.r1 = Radiobutton(self, text="男性", value="M", variable=self.v)self.r2 = Radiobutton(self, text="女性", value="F", variable=self.v)self.r1.pack(side="left")self.r2.pack(side="left")Button(self, text="确定", command=self.confirm).pack(side="left")def confirm(self):messagebox.showinfo("测试","选择的性别:"+self.v.get())if __name__ == '__main__':root = Tk()root.geometry("400x50+200+300")root.title('单选框')app = Application(master=root)root.mainloop()

运行,默认选中女性
在这里插入图片描述

选择后点击确定,弹窗出我们选择的值
在这里插入图片描述

3.Checkbutton 复选按钮

Checkbutton 控件用于选择多个按钮的情况。Checkbutton 可以显示文本,也可以显示图像。
【示例】Checkbutton 复选按钮用法

"""测试Checkbutton组件的基本用法,使用面向对象的方式"""from tkinter import *
from tkinter import messageboxclass Application(Frame):def __init__(self, master=None):super().__init__(master)        # super()代表的是父类的定义,而不是父类对象self.master = masterself.pack()self.createWidget()def createWidget(self):self.codeHobby = IntVar()self.videoHobby = IntVar()print(self.codeHobby.get())  # 默认值是0#onvalue表示当我们选中的时候,返回的是1,offvalue表示不选中返回的是0#多选按钮,不同选项用不同变量接收self.c1 = Checkbutton(self, text="敲代码",variable=self.codeHobby, onvalue=1, offvalue=0)self.c2 = Checkbutton(self, text="看视频",variable=self.videoHobby, onvalue=1, offvalue=0)self.c1.pack(side="left");self.c2.pack(side="left")Button(self, text="确定", command=self.confirm).pack(side="left")def confirm(self):if self.videoHobby.get() == 1:messagebox.showinfo("测试","看视频,都是正常人有的爱好!你喜欢看什么类型?")if self.codeHobby.get() == 1:messagebox.showinfo("测试","抓获野生程序猿一只,赶紧送给他景天科技苑的教程充饥")if __name__ == '__main__':root = Tk()root.geometry("400x50+200+300")app = Application(master=root)root.mainloop()

运行
在这里插入图片描述

选中相应的项目,点确定会有弹窗
在这里插入图片描述

4.canvas 画布

canvas(画布)是一个矩形区域,可以放置图形、图像、组件等。本节我们简单介绍
canvas 的使用,更加详细和深入的内容将在后面的“图形绘制”章节讲解。

Canvas 组件支持对象:
arc(弧形、弦或扇形)
bitmap(内建的位图文件或 XBM 格式的文件)
image(BitmapImage 或 PhotoImage 的实例对象)
line(线)
oval(圆或椭圆形)
polygon(多边形)
rectangle(矩形)
text(文本)
window(组件)

其中,弦、扇形、椭圆形、圆形、多边形和矩形这些“封闭式”图形都是由轮廓线和填充颜色组成的,但都可以设置为透明(传入空字符串表示透明)。

常用创建方法:

Create_line(x1,y1,x2,y2,dash=(4,4), fill='blue') -- 直线, 虚线(指定dash)
Create_rectangle() -- 矩形,添加对角坐标
Create_oval() -- 椭圆,使用的是长方形的坐标绘制的,正方形坐标时就是圆形
Create_text(x,y, text='F') --字体中心点坐标
create_arc(bbox, **options) -- 根据 bbox (x1, y1, x2, y2) 创建一个扇形(PIESLICE)、弓形(CHORD)或弧形(ARC)

创建的对象一直保留,直到被修改才会覆盖

修改方法:

w.coords() 移动对象w.itemcofig() 设置对象属性w.delete() 删除对象

【示例】canvas 画布使用基础示例

"""测试Canvas组件的基本用法,使用面向对象的方式"""from tkinter import *
from tkinter import messagebox
import randomclass Application(Frame):def __init__(self, master=None):super().__init__(master)        # super()代表的是父类的定义,而不是父类对象self.master = masterself.pack()self.createWidget()def createWidget(self):#创建画布self.canvas = Canvas(self, width=300, height=200, bg="green")self.canvas.pack()# 画一条直线,分别是各个点的坐标line = self.canvas.create_line((10, 10), (30, 20), (40, 50))# 画一个矩形. 两个点分别是左上角和右下角的坐标rect = self.canvas.create_rectangle((50, 50), (100, 100))# 画一个椭圆.坐标两双。为椭圆的边界矩形左上角和底部右下角oval = self.canvas.create_oval(50, 50, 100, 150)# global photo# self.photo = PhotoImage(file="imgs/数据分析.png")# #150,170就是图片放入画布的坐标,x和y是指定图片左上角的坐标位置# '''# 在使用create_image()函数时,需要先通过Pillow库(或其他图片处理库)读取图片文件并生成图片对象,# 然后再将这个图片对象传递给create_image()函数,在指定的坐标位置将图片添加到画布上。# '''# self.canvas.create_image(250,70,image=self.photo)Button(self, text="画10个矩形", command=self.draw10Recg).pack(side="left")def draw10Recg(self):#循环10次for i in range(0, 10):x1 = random.randrange(int(int(self.canvas["width"])/2))y1 = random.randrange(int(int(self.canvas["height"])/2))x2 = x1 + random.randrange(int(int(self.canvas["width"])/2))y2 = y1 + random.randrange(int(int(self.canvas["height"])/2))self.canvas.create_rectangle(x1, y1, x2, y2)if __name__ == '__main__':root = Tk()root.geometry("400x300+200+300")app = Application(master=root)root.mainloop()

运行
在这里插入图片描述

打开画图片
在这里插入图片描述

点击画10个矩形

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/26261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Vue3使用datav3报错问题解决

报错&#xff1a;Failed to resolve entry for package "dataview/datav-vue3". The package may have incorrect main/module/exports specified in its package.json. 修改package.json 修改为 "module": "./es/index.mjs",

细说MCU串口函数及使用printf函数实现串口发送数据的方法

目录 1、硬件及工程 2、串口相关的库函数 &#xff08;1&#xff09;串口中断服务函数&#xff1a; &#xff08;2&#xff09;串口接收回调函数&#xff1a; &#xff08;3&#xff09;串口接收中断配置函数&#xff1a; &#xff08;4&#xff09;非中断发送&#xff…

飞速(FS)InfiniBand解决方案构建HPC网络

面对HPC领域的不断发展&#xff0c;未来HPC业务核心在于HPC网络和基础设施。随着高性能计算应用的复杂性和数据量的增长&#xff0c;对弹性、可扩展和高效网络的需求变得日益迫切。HPC网络架构作为HPC系统运行的基础&#xff0c;在数据处理、管理和大规模存储方面至关重要。本文…

什么是 URL 过滤?是如何保障浏览体验的?

互联网是一个无边无际的空间&#xff0c;几乎包含了你能想象到的一切。不幸的是&#xff0c;这意味着也存在着从不合适到非常危险的网站。这就是 URL 过滤可以发挥作用的地方。 一、URL 过滤的含义 我们希望您已经熟悉 URL&#xff08;统一资源定位器&#xff09;&#xff0c;…

Linux命令详解(2)

文本处理是Linux命令行的重要应用之一。通过一系列强大的命令&#xff0c;用户可以轻松地对文本文件进行编辑、查询和转换。 cat&#xff1a; 这个命令用于查看文件内容。它可以一次性显示整个文件&#xff0c;或者分页显示。此外&#xff0c;cat 还可以用于合并多个文件的内容…

使用winscp 通过中转机器(跳板机、堡垒机)密钥远程连接服务器,保姆级别教程

1.winscp下载地址 winscp下载 2.安装自己选择位置 3.连接服务器 到这里,基本就是没有壁垒机的就可直接连接,传递文件 4.配置中转服务器(壁垒机、跳板机) 选择高级选项 配置utf-8的编码格式 配置中转服务器(壁垒机、跳板机) 设置中专机的密码或者私钥 配置私钥

Day 16:3040. 相同分数的最大操作数目II

Leetcode 相同分数的最大操作数目II 给你一个整数数组 nums &#xff0c;如果 nums 至少 包含 2 个元素&#xff0c;你可以执行以下操作中的 任意 一个&#xff1a; 选择 nums 中最前面两个元素并且删除它们。选择 nums 中最后两个元素并且删除它们。选择 nums 中第一个和最后一…

Adobe Photoshop cc快速抠图与精致抠图方法

一、背景 Photoshop cc绝对是最好用的抠图and修图软件&#xff0c;但是即使最简单的抠图&#xff0c;每次用时都忘记怎么做&#xff0c;然后再去B站搜&#xff0c;非常费时&#xff0c;下面记录一下抠图过程&#xff0c;方便查阅。 一、Adobe Photoshop快速抠图 选择——主体…

大模型基础——从零实现一个Transformer(3)

大模型基础——从零实现一个Transformer(1)-CSDN博客 大模型基础——从零实现一个Transformer(2)-CSDN博客 一、前言 之前两篇文章已经讲了Transformer的Embedding,Tokenizer,Attention,Position Encoding, 本文我们继续了解Transformer中剩下的其他组件. 二、归一化 2.1 L…

C++--DAY7

vector容器 #include <iostream> #include <vector>using namespace std; void printVector(vector<int> &v) {//定义一个迭代器 指针vector<int>::iterator iter;//v.end&#xff08;&#xff09;是最后一个元素的下一个元素地址for(iterv.begin…

申请郑州水污染防治乙级资质,这些材料你需要提前准备

申请郑州水污染防治乙级资质时&#xff0c;你需要提前准备以下材料&#xff0c;以确保申请流程的顺利进行&#xff1a; 一、企业基本材料 企业法人营业执照副本复印件&#xff1a;需加盖企业公章&#xff0c;确保复印件清晰、完整。企业章程文本&#xff1a;提供企业章程的完整…

网络安全在2024好入行吗?

前言 024年的今天&#xff0c;慎重进入网安行业吧&#xff0c;目前来说信息安全方向的就业对于学历的容忍度比软件开发要大得多&#xff0c;还有很多高中被挖过来的大佬。 理由很简单&#xff0c;目前来说&#xff0c;信息安全的圈子人少&#xff0c;985、211院校很多都才建立…

Java课程设计:基于ssm的旅游管理系统系统(内附源码)

文章目录 一、项目介绍二、项目展示三、源码展示四、源码获取 一、项目介绍 2023年处于信息科技高速发展的大背景之下。在今天&#xff0c;缺少手机和电脑几乎已经成为不可能的事情&#xff0c;人们生活中已经难以离开手机和电脑。针对增加的成本管理和操作,各大旅行社非常必要…

鸿蒙开发文件管理:【@ohos.securityLabel (数据标签)】

数据标签 该模块提供文件数据安全等级的相关功能&#xff1a;向应用程序提供查询、设置文件数据安全等级的JS接口。 说明&#xff1a; 本模块首批接口从API version 9开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import security…

iOS ReactiveCocoa MVVM

学习了在MVVM中如何使用RactiveCocoa&#xff0c;简单的写上一个demo。重点在于如何在MVVM各层之间使用RAC的信号来更方便的在各个层之间进行响应式数据交互。 demo需求&#xff1a;一个登录界面(登录界面只有账号和密码都有输入&#xff0c;登录按钮才可以点击操作)&#xff0…

白酒:茅台镇白酒的口感特点与品质保障

当我们谈及中国的白酒&#xff0c;茅台镇无疑是其中璀璨的一颗明珠。而在这片神奇的土地上&#xff0c;云仓酒庄凭借其与众不同的酿造工艺和卓着的品质保障&#xff0c;成为了茅台镇白酒的新一代佼佼者。今天&#xff0c;让我们一起领略云仓酒庄豪迈白酒的口感特点和品质魅力。…

win11 修改hosts提示无权限

win11下hosts的文件路径 C:\Windows\System32\drivers\etc>hosts修改文件后提示无权限。 我做了好几个尝试&#xff0c;都没个啥用~比如&#xff1a;右键 管理员身份运行&#xff0c;在其他版本的windows上可行&#xff0c;但是win11不行&#xff0c;我用的是微软账号登录的…

【Ardiuno】实验使用ESP32单片机实现高级web服务器暂时动态图表功能(图文)

接下来&#xff0c;我们继续实验示例代码中的Wifi“高级web服务器”&#xff0c;配置相关的无线密码后&#xff0c;开始实验 #include <WiFi.h> #include <WiFiClient.h> #include <WebServer.h> #include <ESPmDNS.h>const char *ssid "XIAOFE…

高通Android 12 右边导航栏改成底部显示

最近同事说需要修改右边导航栏到底部&#xff0c;问怎么搞&#xff1f;然后看下源码尝试下。 1、Android 12修改代码路径 frameworks/base/services/core/java/com/android/server/wm/DisplayPolicy.java a/frameworks/base/services/core/java/com/android/server/wm/Display…

为什么电容两端电压不能突变

我们先从RC延时电路说起吧&#xff0c;图1是最简单的RC延时电路&#xff0c;给一个阶跃的电压信号&#xff0c;电压会变成黄色曲线这个样子&#xff0c;这是为什么呢&#xff1f; 图1 电压跳变后&#xff0c;电源负极电子移动到电容下极板&#xff0c;排斥上极板电子流动到电源…