python之tkinter学习

news2024/11/25 7:12:17

python图形化界面

  • 导论
  • 为窗口命名(root.wm_title(""))
  • label类(仅用来显示信息)
    • 仅有一个标签
    • 多标签
  • 按钮
    • command绑定事件
    • bind绑定事件
    • 为button设置属性
  • pack的布局
  • grid布局
  • 事件及其绑定
    • bind函数中的事件类型
    • 解绑
  • 输入框
  • 菜单
    • 子菜单
    • 分界线
    • 单选按钮(radiobutton)与多选按钮(checkbutton)
  • 对话框
  • 消息框
  • 复选按钮
  • 文本域
  • 窗口
    • toplevel窗口
    • 窗口重绘
    • 自绘象棋盘
  • 持续更新中~~~~~~~~

导论

1:首先导入包from tkinter import *
2:然后创建一个对象 root=Tk()
3:写完程序后记得root.mainloop()
看下面测试代码

from tkinter import *
root=Tk()
root.mainloop()

在这里插入图片描述

为窗口命名(root.wm_title(“”))

from tkinter import *
root=Tk()
root.wm_title("这是我的第一个tkinter窗口")
root.mainloop()

在这里插入图片描述

label类(仅用来显示信息)

仅有一个标签

from tkinter import *
root=Tk()
root.wm_title("这是我的第一个tkinter窗口")
wl=Label(root,text="欢迎来到图书馆",background='red')#text表示文本内容,root表示显示的窗口,background是底色
wl.pack()
root.mainloop()

在这里插入图片描述

多标签

from tkinter import *
root=Tk()
root.wm_title("这是我的第一个tkinter窗口")
w1=Label(root,text="欢迎来到图书馆",background='red')#text表示文本内容,root表示显示的窗口
w2=Label(root,text="欢迎来到图书馆",background='green')#text表示文本内容,root表示显示的窗口
w3=Label(root,text="欢迎来到图书馆",background='blue')#text表示文本内容,root表示显示的窗口
w1.pack()
w2.pack()
w3.pack()
root.mainloop()

注:这里的pack是将标签处于一个默认的位置
在这里插入图片描述

按钮

按钮可以执行相应的功能可以理解为一个函数,点击按钮执行相应的函数功能

command绑定事件

from tkinter import *
def myLabel():
    global i,root
    s=Label(root,text='我爱python%d次'%i)#显示在root窗口
    s.pack()
    i+=1
root=Tk()
i=1
b=Button(root,text='python',command=myLabel)#text是按钮的名
b.pack()
root.mainloop()

以下是点击5次的结果:
在这里插入图片描述

bind绑定事件

from tkinter import *
def myLabel(event):#加了一个参数来接受事件
    global i,root
    s=Label(root,text='我爱python%d次'%i)
    s.pack()
    i+=1
root=Tk()
i=1
b=Button(root,text='python')#没有了command
b.bind("<Button-1>",myLabel)#这里Button-1是鼠标左键触发的意思,下面会详细讲
b.pack()
root.mainloop()

在这里插入图片描述

为button设置属性

在这里插入图片描述

pack的布局

1.使用pack函数的时候,默认先使用的放到最上面,然后依次向下排
2.pack函数也可以接受几个参数
(1)side指定了停在哪个方向,可以是TOP,BOTTOM,LEFT,RIGHT,分别表示上下左右
(2)fill参数可以是X,Y,BOTH,NULL,即在水平方向填充,竖直方向填充,双向均填充和不填充
(3)expand可以是YES和NO,它的anchor参数可以是N,E,S,W(分别表示北东南西,对标为上右下左),以及他们的组合或CENTER表示中间
(4)ipadx表示的是内边距的x方向,ipady表示的是内边距的y方向,padx表示的是外边距的x方向,pady表示的外边距的y方向
(pack的布局感觉还是比较复杂,所以还是较常用grid)

from tkinter import *
root=Tk()
Button(root,text='A').pack(side=LEFT,expand=YES,fill=Y)
Button(root,text='B').pack(side=TOP,expand=YES,fill=BOTH,anchor=NE)
root.mainloop()

在这里插入图片描述

grid布局

有3个参数,row表示行,column表示列,还有个sticky参数,可以是N,S,W,E分别表示上下左右

from tkinter import *
root=Tk()
Label(root,text='账号:').grid(row=0,sticky=W)
Entry(root).grid(row=0,column=1,sticky=E)
Label(root,text='密码:').grid(row=1,sticky=W)
Entry(root).grid(row=1,column=1,sticky=E)
Button(root,text="登录").grid(row=2,column=1,sticky=N)
root.mainloop()

在这里插入图片描述

注:pack和grid不能同时用

事件及其绑定

bind函数中的事件类型

< Button-1 > 鼠标左击触发事件,3:鼠标右击,2:鼠标中键
还有其他的键出发,主要用鼠标,这里不再介绍,有兴趣可以查一下

解绑

用函数unbind()

输入框

Entry()
(1)get函数,不需要任何参数,返回的内容是输入框的内容
(2)e是一个文本框,可以操作e[‘show’]='*'之后就成为了一个密码框

import pymysql
from tkinter import *
root=Tk()
Label(root,text="账号").grid(row=0,column=0,sticky=W)#创建一个标签
a_txt=Entry(root)#创建一个文本
a_txt.grid(row=0,column=3,sticky=W)#将文本放入正确的位置
Label(root,text="密码").grid(row=1,column=0,sticky=W)#创建一个标签
b_txt=Entry(root)
b_txt.grid(row=1,column=3,sticky=W)#再创建一个文本
b_txt['show']='*'
root.mainloop()

在这里插入图片描述

菜单

1.Menu新建菜单
2.add_command添加菜单项
3.add_command中参数有label(菜单项名称),command(指定点击是否调用方法),acceletor指定的是快捷键,underline属性是否有下划线
4.可以指定使用哪一个作为顶层菜单

import pymysql
from tkinter import *
root=Tk()
menubar=Menu(root)
for item in ["文件","编辑","视图","关于"]:
    menubar.add_command(label=item)
root['menu']=menubar
root.mainloop()

在这里插入图片描述

子菜单

有子菜单的情况用add_cascade,其有两个属性,menu:级联到哪个菜单项上,label:该菜单项的名

import pymysql
from tkinter import *
root=Tk()
menubar=Menu(root)
Fmenu=Menu(menubar)
Emenu=Menu(menubar)
for item in ["word文件","压缩文件","ppt文件","c++文件","python文件"]:
    Fmenu.add_command(label=item)
for item in ["删除","赋值","增加"]:
    Emenu.add_command(label=item)
menubar.add_cascade(label="文件",menu=Fmenu)
menubar.add_cascade(label="操作",menu=Emenu)
root['menu']=menubar
root.mainloop()

注:应先建立好子菜单,再建立上层菜单

分界线

from tkinter import *
def myLabel():
    global root
    Label(root,text="我的程序语言课程").pack()
root=Tk()
menuBar=Menu(root)
sonMenu=Menu(menuBar)
for each in ['C++','python','java','javaEE','IOS']:
    sonMenu.add_command(label=each)
sonMenu.add_separator()#插入分割线
for each in ['PHP','UI设计','前端']:
    sonMenu.add_command(label=each)
menuBar.add_cascade(label='程序设计',menu=sonMenu)
root['menu']=menuBar
root.mainloop()

单选按钮(radiobutton)与多选按钮(checkbutton)

from tkinter import *
def myLabel():
    global root
    Label(root,text="我的程序语言课程").pack()
root=Tk()
menuBar=Menu(root)
sonMenu=Menu(menuBar)
for each in ['C++','python','java','javaEE','IOS']:
    sonMenu.add_radiobutton(label=each)#单选
sonMenu.add_separator()#插入分割线
for each in ['PHP','UI设计','前端']:
    sonMenu.add_checkbutton(label=each)#多选
menuBar.add_cascade(label='程序设计',menu=sonMenu)
root['menu']=menuBar
root.mainloop()

对话框

from tkinter.dialog import *
from tkinter import *
root=Tk()
def myDialog():
    d=Dialog(None,title="python调查",text="喜欢python吗?",bitmap="info",default=0,strings=("喜欢","很喜欢","非常喜欢"))#对话窗口
    print(d.num)
btn_begin=Button(None,text="Python调查",command=myDialog)#实行按钮
btn_begin.pack()
btn_quit=Button(None,text="关闭",command=btn_begin.quit)#关闭按钮
btn_quit.pack()
btn_begin.mainloop()

在这里插入图片描述

消息框

from tkinter.dialog import *
from tkinter.messagebox import *
from tkinter import *
showinfo(title="python学堂",message="好好学python")

在这里插入图片描述

复选按钮

复选框通常是⽤来选择信息的时候的⼀种选择,它前⾯ 有个⼩正⽅形的⽅块,如果
选中则有⼀个对号,也可以再 次点击以取消该对号来取消选中

from tkinter.dialog import *
from tkinter.messagebox import *
from tkinter import *
timeA=0
timeB=0
def funA():
    global lab1,btnA,timeA
    if timeA%2==0:
        timeA+=1
        lab1['text']="python学科被选中"
    else:
        timeA+=1
        lab1['text']='python学科被取消'
def funB():
    global lab2, btnB, timeB
    if timeB % 2 == 0:
        timeB += 1
        lab2['text'] = "java学科被选中"
    else:
        timeB += 1
        lab2['text'] = 'java学科被取消'
root=Tk()
btnA=Checkbutton(root,text='python学科',command=funA)
btnA.pack()
btnB=Checkbutton(root,text='java学科',command=funB)
btnB.pack()
lab1=Label(root,text=" ")
lab1.pack()

lab2=Label(root,text=" ")
lab2.pack()
root.mainloop()

在这里插入图片描述

from tkinter import *
root=Tk()
btnA=Radiobutton(root,text='python学科',value='python')
btnA.pack()
btnB=Radiobutton(root,text='java学科',value='java')
btnB.pack()
root.mainloop()

在这里插入图片描述

文本域

from tkinter import *
root = Tk()
t = Text(root, width = 50, height = 30)
t.pack()
root.mainloop()

在这里插入图片描述

窗口

toplevel窗口

from tkinter.dialog import *
from tkinter.messagebox import *
from tkinter import *
from tkinter import *
root = Tk()
root.title("我是root窗⼝")
lr = Label(root, text = "我属于root")
lr.pack()
top = Toplevel(root, width = 30, height = 20)
top.title("我是toplevel窗⼝")
lt = Label(top, text = "我属于toplevel")
lt.pack()
root.mainloop()

窗口重绘

from tkinter import *

root = Tk()
root.title("随便绘制⼀下下")
canv = Canvas(root, width = 400, height = 300, bg = "white")
canv.create_line((0,0), (200,200), width = 8)
canv.create_text(300, 30, text = "Python学院")
canv.pack()
root.mainloop()

自绘象棋盘

from tkinter import *
root = Tk()
root.title("中国象棋棋盘⼿绘")
canv = Canvas(root, width = 400, height = 450)
canv.create_line((0,2), (400,2), width = 2)
for i in range(10):
    canv.create_line((0, i * 50), (400, i * 50), width = 2)
    canv.create_line((3,0), (3,450), width = 2)
for i in range(8):
    canv.create_line((i * 50,0), (i * 50,200), width = 2)
for i in range(8):
    canv.create_line((i * 50,250), (i * 50,450), width = 2)
    canv.create_line((397,0), (397,450), width = 2)
    canv.create_line((150,0), (250,100), width = 2)
    canv.create_line((150,100), (250,0), width = 2)
    canv.create_line((150,450), (250,350), width = 2)
    canv.create_line((150,350), (250,450), width = 2)
    canv.create_text(110, 220, text = "汉界")
    canv.create_text(290, 220, text = "楚河")
    canv.pack()
root.mainloop()

在这里插入图片描述

持续更新中~~~~~~~~

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

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

相关文章

SEO 基础知识遇上圣诞节

*2022年圣诞节到来啦,很高兴这次我们又能一起度过~ SEO 基础知识 文章目录 SEO 基础知识1、SEO是什么2、SEO工作内容3、网站排名的流程数据4、认识搜索引擎爬虫4.1 什么是爬虫4.2 模拟普通用户5、网络爬虫的管理规则6、用数据快速提升网络权重7、其他工具1、SEO是什么 SEO 即…

【Javassist】快速入门系列08 当检测到对象(不包括数组)创建时用代码块替换

系列文章目录 01 在方法体的开头或结尾插入代码 02 使用Javassist实现方法执行时间统计 03 使用Javassist实现方法异常处理 04 使用Javassist更改整个方法体 05 当有指定方法调用时替换方法调用的内容 06 当有构造方法调用时替换方法调用的内容 07 当检测到字段被访问时使用语…

Docker Desktop 4.15 正式发布,这里是新功能

Docker Desktop 4.15 正式发布&#xff0c;这里是新功能 Docker Desktop 4.15现在可用于所有平台&#xff1a;Linux、Windows 和 macOS。它附带 Docker Compose v2.13.0、Containerd v1.6.10 和 Docker Hub Tool v0.4.5 2 主要亮点 VirtioFS 正式发布新的快速搜索功能在任何…

杨校老师课堂之JDK1.8下载、安装与环境变量配置

一、安装 1. 安装引导 2. 修改安装目录(路径) 3. 选择后的路径如下&#xff1a; 4. JRE的安装【可选】 5. 成功安装 二、配置 环境变量配置 1. 进行校验 win R 打开cmd窗口 在新建cmd内&#xff0c;输入javac&#xff0c;出现下列内容&#xff0c;即表示未配置成功。目前尚…

Eclipse 插件 ERMaster安装与使用

ERMaster 是什么&#xff1f; ERMaster是制作ER图&#xff08;Entity Relationship Diagram&#xff0c;实体关系图&#xff09;的Eclipse插件。 提供了从数据库导入、Excel表定义簿制作、图片输出、DDL输出等功能。支持的数据库包括&#xff1a; MySQLOraclePostgreSQLDB2HS…

Windows内核--内核空间和用户空间(3.6)

内核喜欢抽象出句柄给用户空间 句柄, Handle, 表达处理、控制之意。内核不会直接暴露指针给用户空间&#xff0c;这样会增大内核风险。相反&#xff0c;内核抽象出Handle给用户态&#xff0c;不管是文件、进程、线程等对象&#xff0c;通过Handle可以隐藏内核细节&#xff0c;统…

C++不知算法系列之解析回溯算法中的人文哲学

1. 前言 回溯算法让我想起“退一步海阔天空”的名言。当事情的发展到了绝境或是边缘时&#xff0c;可以试着后退一步&#xff0c;换一个方向、换一种策略&#xff0c;或许会看到新的出路或生机。 回溯算法的精髓&#xff1a;无所畏惧而不固执&#xff0c;善于在变通中迂回。故…

基于PyTorch的图像数据归一化min-max normalization和zero-mean normalization操作实践对比分析

本文紧接前文&#xff1a; 《python基于不同方法实现特征工程常用的归一化技术Normalization对比分析》 前文主要是讲解对于数值型特征数据在特征工程或者是数据处理阶段往往需要用到数据尺度归一化操作&#xff0c;基于原生的对象和numpy第三方库分别实现了按列归一化计算和…

一文告诉你什么是开源表单系统

熟悉市场的人都知道&#xff0c;传统的表单存在效率低的瓶颈&#xff0c;无法满足当前很多企业的业务需求。开源表单系统也是顺应时代发展需求应运而生的产物&#xff0c;在提升企业办公效率和协作效率&#xff0c;推动企业数字化转型方面意义重大。今天这篇文章就告诉大家什么…

《计算机网络》——第一章知识点

考试题型: 选择题填空题判断题简答题计算题ISP:因特网服务提供者/因特网服务提供商&#xff0c;是一个向广大用户综合提供互联网接入业务、信息业务、和增值业务的公司&#xff0c;如中国电信、中国联动、中国移动等。分为主干ISP、地区ISP和本地ISP。 计算机网络∶利用通信线…

前端的实例化是什么?

我们在用vue框架的时候&#xff0c;总是会看到各种各样的实例化或者说实例化对象(实例) 所以这篇文章就谈一下什么是实例化和实例化对象(实例)&#xff0c;以及为什么要实例化的问题 前端的实例化是什么&#xff1f;vue的createApppinia的实例化为什么要实例化再一次回答上面这…

关于缓存问题的思考与总结

提到缓存&#xff0c;最容易想到的便是Redis了。Redis凭借其出色的性能表现&#xff0c;十分适合做缓存。那么为什么需要缓存这个东西以及缓存用在哪些地方呢&#xff1f; 一、基本原理 存储层次模型 注&#xff1a;也是背景来源 想要设计好的架构或者应用、程序&#xff0c…

Maven安装配置的保姆级教程

前言 下面是关于maven的一些介绍&#xff1a; maven是一个项目构建和管理的工具&#xff0c;提供了帮助管理 构建、文档、报告、依赖、scms、发布、分发的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等maven的好处在于可以将项目过程规范化、自动化、高效化以及…

C++程序设计——继承与派生

更多内容可以查看系列文章C语言入门全教程&#xff08;持续更新&#xff09; 目录 前言 一、继承的概念 1.楔子 2.派生类的定义 3.继承和派生的意义 4.案例1&#xff1a;派生类的定义 二、继承方式 1.公有继承&#xff08;public&#xff09; 2.保护继承&#xff08;…

网络拓扑结构可视化呈现方案

随着数字化进程的加速&#xff0c;企业网络中设备的数量日益快速增长&#xff0c;网络规模逐渐庞大&#xff0c;组网结构、IT 环境变的无比复杂&#xff0c;需要花费大量的时间和资源去监测网络运行状态&#xff0c;诊断解决故障问题。面对不断趋向复杂化和多样化的网络规模和结…

Mac M1使用Docker报错 Failed to get D-Bus connection: No such file or directory的解决方案

0x00 前言 最近在Mac上安装docker的CentOS7镜像&#xff0c;打算开个sshd服务&#xff0c;使用命令&#xff1a; $ systemctl start sshd结果在启动sshd服务的时候提示报错&#xff1a; Failed to get D-Bus connection: No such file or directory0x01 运行环境 版本MacOS…

《Qt开发》基于QwtPolar的极坐标图绘制

QwtPolar绘制极坐标图 该示例包含以下功能: 使用QwtPolarPlot绘制极坐标曲线实现曲线的缩放和平移调整极坐标为顺时针顺序1. 创建项目 创建项目名称为QwtPolarDemo1&#xff0c;并添加一个Qt5Class类&#xff0c;命名为myPlot。 2. 配置项目 在项目——属性——C/C——常规…

【C++】——初识C++(一)

文章目录1. 进入C1.1 main&#xff08;&#xff09;函数1.2 C注释1.3 C预处理器和iostream文件1.4 头文件名1.5 名称空间1.6 使用cout进行C输出1.6.1 控制符endl1.6.2 换行符1.6.3 使用cout进行拼接1.7 cin1.8 变量1.8.1 变量名1.9 常量1.10 关键字1. 进入C 第一个程序 // my…

构建数据大屏,塑造IT运维可视化核心竞争力

随着大数据、云计算等新兴技术的发展与运用&#xff0c;在金融、交通、教育、政府等行业的信息化在飞速发展。与此同时&#xff0c;各行业的IT建设与维护管理成本也在与日俱增&#xff0c;大量的运维工作下产生庞大的运维数据&#xff0c;如何进行运维数据可视化建设也逐渐成为…

qt之smtp-demo封装与测试

简介 SMTP是一种提供可靠且有效的电子邮件传输的协议&#xff0c;它建立在FTP文件传输服务上的一种邮件服务&#xff0c;主要用于系统之间的邮件信息传递&#xff0c;并提供有关来信的通知。 SMTP的工作过程是建立连接、邮件传送、连接释放。 SMTP的默认端口是25。…