Python之Tkinter详解

文章目录

  • Python之Tkinter详解
    • 1、Tkinter是什么
    • 2、Tkinter创建窗口
      • ①导入 tkinter的库 ,创建并显示窗口
      • ②修改窗口属性
      • ③创建按钮
      • ④窗口内的组件布局
    • 3、Tkinter布局用法
      • ①基本界面、label(标签)和button(按钮)用法
      • ②entry(输入)和text(文本)用法
      • ③var(变量)和list(列表)用法
      • ④Radiobutton(选择按钮)用法
      • ⑤Scale(尺度)用法
      • ⑥ Checkbutton(勾选项)用法
      • ⑦canvas(画布)用法
      • ⑧menubar(菜单栏)
      • ⑨Frame(架构)
      • ⑩messagebox(弹窗)
      • ⑾pack、grid以及place布局用法

1、Tkinter是什么

  • Tkinter 是使用 python 进行窗口视窗设计的模块。Tkinter模块(“Tk 接口”)是Python的标准Tk GUI工具包的接口。作为 python 特定的GUI界面,是一个图像的窗口,tkinter是python自带的,可以编辑的GUI界面,

2、Tkinter创建窗口

①导入 tkinter的库 ,创建并显示窗口

import tkinter as tk  # 在代码里面导入库,起一个别名,以后代码里面就用这个别名
root = tk.Tk()  # 这个库里面有Tk()这个方法,这个方法的作用就是创建一个窗口
root.mainloop()  # 加上这一句,就可以看见窗口了,循环显示窗口

②修改窗口属性

root.title('演示窗口') #设置窗口标题
root.geometry("300x100+630+80")  # 设置窗口长x宽+x*y

③创建按钮

import tkinter as tk  #tk代替tkinter
from tkinter import messagebox
root = tk.Tk()  # 创建窗口
root.title('演示窗口')
root.geometry("300x100+630+80")  # 长x宽+x*ybtn1 = tk.Button(root)  # 创建按钮,并且将按钮放到窗口里面
btn1["text"] = "点击"  # 给按钮一个名称
btn1.pack()  # 按钮布局def test(e):'''创建弹窗'''messagebox.showinfo("窗口名称", "点击成功")btn1.bind("<Button-1>", test)  # 将按钮和方法进行绑定,也就是创建了一个事件
root.mainloop()  # 让窗口一直显示,循环

④窗口内的组件布局

3、Tkinter布局用法

①基本界面、label(标签)和button(按钮)用法

import  tkinter as tkroot = tk.Tk()
root.title("这是Demo")
root.geometry("300x200")var = tk.StringVar() #tk专有字符串#root---界面(需要放在那个界面),textvariable----显示文本
#bg----背景   font----字体格式,大小    width----宽度   height----高度
lab = tk.Label(root,textvariable=var,bg = 'green',font=('Arial',12),width=15,height=2)
lab.pack() #把标签置入root界面布局
on_hit = True #点击标志位def hit_me():global on_hitif on_hit==True:on_hit = False #点击交替var.set("you hit me")else:on_hit = Truevar.set("")
#root---界面(需要放在那个界面),text----显示文本
#width----宽度   height----高度  command----命令(执行哪个函数)
but = tk.Button(root,text = "hitme",width=15,height=2,command=hit_me)
but.pack()root.mainloop()

②entry(输入)和text(文本)用法

import  tkinter as tkroot = tk.Tk()
root.title("这是Demo")
root.geometry("300x200")
#root---界面(需要放在那个界面),show----输入的字符显示为*,可以设置成show=none
e = tk.Entry(root,show='*')
e.pack()def insert_point():var = e.get()t1.insert('insert',var)def insert_end():var = e.get()t1.insert('end',var)#root---界面(需要放在那个界面),text----显示文本
#width----宽度   height----高度  command----命令(执行哪个函数)
b1 = tk.Button(root,text = "insert point",width=15,height=2,command=insert_point)
b1.pack()b2= tk.Button(root,text = "insert end",width=15,height=2,command=insert_end)
b2.pack()#root---界面(需要放在那个界面),height ----文本框宽度
t1 = tk.Text(root,height=2)
t1.pack(fill="x")
root.mainloop()

③var(变量)和list(列表)用法

import  tkinter as tkroot = tk.Tk()
root.title("这是Demo")
root.geometry("300x200")#root---界面(需要放在那个界面),textvariable----显示文本变量
#bg----背景   font----字体格式,大小    width----宽度   height----高度
var1 = tk.StringVar()
l = tk.Label(root, bg='yellow', width=4, textvariable=var1)
l.pack()def print_selection():value = lb.get(lb.curselection()) #获取列表选项var1.set(value) #设置textvariable=var1的文本值#root---界面(需要放在那个界面),text----显示文本
#width----宽度   height----高度  command----命令(执行哪个函数)
b1 = tk.Button(root,text = "print selection",width=15,height=2,command=print_selection)
b1.pack()var2 = tk.StringVar()
var2.set((11,22,33,44))
#root---界面(需要放在那个界面),listvariable----列表变量
lb = tk.Listbox(root, listvariable=var2) #列表变量var2
list_items = [1,2,3,4]for item in list_items: #列表遍历lb.insert('end', item)
lb.insert(1, 'first') #1号位后加入first
lb.insert(2, 'second') #2号位后加入second
#lb.delete(2) #删除2后的second
lb.pack()root.mainloop()

④Radiobutton(选择按钮)用法

import  tkinter as tkroot = tk.Tk()
root.title("这是Demo")
root.geometry("300x200")#root---界面(需要放在那个界面),textvariable----显示文本变量
#bg----背景   font----字体格式,大小    width----宽度   height----高度
var = tk.StringVar()
l = tk.Label(root, bg='yellow', width=20, text='empty')
l.pack()def print_selection():l.config(text='you have selected ' + var.get())#Radiobutton-----选择按钮
#root---界面(需要放在那个界面),variable----变量
#value----值   command----命令
r1 = tk.Radiobutton(root, text='Option A',variable=var, value='A',command=print_selection)
r1.pack()
r2 = tk.Radiobutton(root, text='Option B',variable=var, value='B',command=print_selection)
r2.pack()
r3 = tk.Radiobutton(root, text='Option C',variable=var, value='C',command=print_selection)
r3.pack()root.mainloop()

⑤Scale(尺度)用法

import  tkinter as tkroot = tk.Tk()
root.title("这是Demo")
root.geometry("300x200")#root---界面(需要放在那个界面),textvariable----显示文本变量
#bg----背景   font----字体格式,大小    width----宽度   height----高度
l = tk.Label(root, bg='yellow', width=20, text='empty')
l.pack()def print_selection(v):l.config(text='you have selected ' + v)#Scale----尺度函数
#root---界面(需要放在那个界面),label----标签名字   from_ ----尺度从哪开始    to----尺度到哪结束
#orient----尺度方向(HORIZONTAL水平)   length----显示长度(单位为像素)   tickinterval----每隔多少加个尺度显示
#resolution ----精度(精确到小数点后多少)  command----命令
s = tk.Scale(root, label='try me', from_=5, to=11, orient=tk.HORIZONTAL,length=200, showvalue=0, tickinterval=2, resolution=0.01, command=print_selection)
s.pack()root.mainloop()

⑥ Checkbutton(勾选项)用法

import  tkinter as tkroot = tk.Tk()
root.title("这是Demo")
root.geometry("300x200")#root---界面(需要放在那个界面),textvariable----显示文本变量
#bg----背景   font----字体格式,大小    width----宽度   height----高度
l = tk.Label(root, bg='yellow', width=20, text='empty')
l.pack()def print_selection():if (var1.get() == 1) & (var2.get() == 0):l.config(text='I love only Python ')elif (var1.get() == 0) & (var2.get() == 1):l.config(text='I love only C++')elif (var1.get() == 0) & (var2.get() == 0):l.config(text='I do not love either')else:l.config(text='I love both')var1 = tk.IntVar()
var2 = tk.IntVar()#Checkbutton----勾选函数
#root---界面(需要放在那个界面),text----文本   variable ----变量
#onvalue----勾选标志值   offvalue----无勾选标志值   command----命令
c1 = tk.Checkbutton(root, text='Python', variable=var1, onvalue=1, offvalue=0,command=print_selection)
c2 = tk.Checkbutton(root, text='C++', variable=var2, onvalue=1, offvalue=0,command=print_selection)
c1.pack()
c2.pack()root.mainloop()

⑦canvas(画布)用法

import  tkinter as tkroot = tk.Tk()
root.title("这是Demo")
root.geometry("300x300")#Canvas----画布
#root---界面(需要放在那个界面)
#bg----背景     width----宽度,height----高度(单位像素)
canvas = tk.Canvas(root, bg='white', height=200, width=200)#PhotoImage----加载图片
#图片路径为file='C:\\Users\\admin\\Desktop\\Demo\\Demo\\1.gif'  注意是使用双斜杆\\
image_file = tk.PhotoImage(file='C:\\Users\\admin\\Desktop\\Demo\\Demo\\1.gif')#create_image----图片位置
#create_image(瞄点横坐标,瞄点纵坐标,瞄点位置,加入图片)
image = canvas.create_image(0,0, anchor='nw', image=image_file)#create_line----画线
#create_oval----画圆
#create_arc----画扇形
#create_rectangle----画矩形
#canvas.create_oval
x0, y0, x1, y1= 50, 50, 80, 80
line = canvas.create_line(x0, y0, x1, y1)
#create_oval----画扇形
#create_oval(坐标,坐标,坐标,坐标,填充颜色)
oval = canvas.create_oval(x0, y0, x1, y1, fill='red')
#create_oval----画圆
#create_oval(坐标,坐标,坐标,坐标,开始角度,结束角度)
arc = canvas.create_arc(x0+30, y0+30, x1+30, y1+30, start=90, extent=180)
rect = canvas.create_rectangle(100, 30, 100+20, 30+20)
canvas.pack()#move----移动
#canvas.move(对象, 横坐标, 纵坐标)
def moveit():canvas.move(rect, 2, 4)b = tk.Button(root, text='move', command=moveit).pack()root.mainloop()

⑧menubar(菜单栏)

import tkinter as tkroot = tk.Tk()
root.title('my window')
root.geometry('300x300')#root---界面(需要放在那个界面),textvariable----显示文本变量
#bg----背景   font----字体格式,大小    width----宽度   height----高度
l = tk.Label(root, text='', bg='yellow')
l.pack()
counter = 0
def do_job():global counterl.config(text='do '+ str(counter))counter+=1#menubar----菜单
menubar = tk.Menu(root) #菜单加入root界面
filemenu = tk.Menu(menubar, tearoff=0) #filemenu加入菜单栏menubar下(tearoff=0 不可分割)
#filemenu菜单加入标签和相应执行命令
menubar.add_cascade(label='File', menu=filemenu)
filemenu.add_command(label='New', command=do_job)
filemenu.add_command(label='Open', command=do_job)
filemenu.add_command(label='Save', command=do_job)
filemenu.add_separator() #添加分割线
filemenu.add_command(label='Exit', command=root.quit)editmenu = tk.Menu(menubar, tearoff=0)#editmenu加入菜单menubar下(tearoff=0 不可分割)
#editmenu菜单加入标签和相应执行命令
menubar.add_cascade(label='Edit', menu=editmenu)
editmenu.add_command(label='Cut', command=do_job)
editmenu.add_command(label='Copy', command=do_job)
editmenu.add_command(label='Paste', command=do_job)#submenu加入菜单filemenu下(tearoff=0 不可分割)
submenu = tk.Menu(filemenu)
#filemenu菜单加入标签和相应执行命令
filemenu.add_cascade(label='Import', menu=submenu, underline=0)
submenu.add_command(label="Submenu1", command=do_job)#配置菜单栏
root.config(menu=menubar)root.mainloop()

⑨Frame(架构)

import tkinter as tkroot = tk.Tk()
root.title('my window')
root.geometry('200x200')#root---界面(需要放在那个界面),textvariable----显示文本变量
#bg----背景   font----字体格式,大小    width----宽度   height----高度
tk.Label(root, text='on the window').pack()#Frame----框架
#Frame的作用可以合理分布控件位置
#框架设置在root界面上
frm = tk.Frame(root)
frm.pack()#框架设置在Frame框架上(分别在左右)
frm_l = tk.Frame(frm)
frm_r = tk.Frame(frm)
frm_l.pack(side='left')
frm_r.pack(side='right')tk.Label(frm_l, text='on the frm_l1').pack()
tk.Label(frm_l, text='on the frm_l2').pack()
tk.Label(frm_r, text='on the frm_r1').pack()
root.mainloop()

⑩messagebox(弹窗)

import tkinter as tk
import tkinter.messagebox
root = tk.Tk()
root.title('my window')
root.geometry('200x200')def hit_me():#tk.messagebox.showinfo(title='Hi', message='hahahaha')   # return 'ok'#tk.messagebox.showwarning(title='Hi', message='nononono')   #警告 return 'ok'tk.messagebox.showerror(title='Hi', message='No!! never')   #错误 return 'ok'#print(tk.messagebox.askquestion(title='Hi', message='hahahaha'))   #询问 return 'yes' , 'no'#print(tk.messagebox.askyesno(title='Hi', message='hahahaha'))   #是否 return True, False#print(tk.messagebox.askretrycancel(title='Hi', message='hahahaha'))   # 重试  return True, False#print(tk.messagebox.askokcancel(title='Hi', message='hahahaha'))   # return True, False# print(tk.messagebox.askyesnocancel(title="Hi", message="haha"))     # return, True, False, Nonetk.Button(root,text = 'hit_me',command=hit_me).pack()root.mainloop()

⑾pack、grid以及place布局用法

import tkinter as tkroot = tk.Tk()
root.title('my window')
root.geometry('200x200')#canvas = tk.Canvas(window, height=150, width=500)
#canvas.grid(row=1, column=1)
#image_file = tk.PhotoImage(file='welcome.gif')
#image = canvas.create_image(0, 0, anchor='nw', image=image_file)#pack布局----可以通过side控制放在上下左右
#tk.Label(window, text='1').pack(side='top')
#tk.Label(window, text='1').pack(side='bottom')
#tk.Label(window, text='1').pack(side='left')
#tk.Label(window, text='1').pack(side='right')#grid布局----通过方格的格式,将控件分布于其中
##for i in range(4):#for j in range(3):#tk.Label(window, text=1).grid(row=i, column=j, padx=10, pady=10)#place布局----通过设置坐标方式,可以精确分布控件
tk.Label(root, text=1).place(x=20, y=10, anchor='nw')root.mainloop()

python之Tkinter详解相关推荐

  1. python嗅探工具详解附源码(使用socket,带tkinter界面)

    python嗅探工具详解(带tkinter界面) 点击详见原理 点击详见原理 TCP/IP协议号补充 必备基础知识 IP数据包格式 详见点此 TCP报文格式 详见点此 struct模块 在Python ...

  2. python单机五子棋详解(tkinter)

    python单机五子棋详解(tkinter) 简介 样式创建 逻辑编写 简介 这是实验室2018年底招新时的考核题目,使用Python编写一个能够完成基本对战的五子棋游戏.面向新手. 程序主要包括两个 ...

  3. python20191031_20191031:Python取反运算详解

    20191031:Python取反运算详解 取反运算:~3 == 4 1.对于数字 3 =======>转换为二进制表示为011 2.对011取反为100 3.为什么表示-4 a.计算机用补码表 ...

  4. Python字符编码详解

    Python字符编码详解 转自http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html Python字符编码详解 本文简单介绍了各种常用的 ...

  5. python的执行过程_在交互式环境中执行Python程序过程详解

    前言 相信接触过Python的伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行.命令行窗口运行.开发工具上运行等,其中在不同的操作平台上还互不相同.今天,小编讲些Py ...

  6. windows上安装Anaconda和python的教程详解

    一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...

  7. python变量类型-Python 变量类型详解

    变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此,变量可以指定不同的数据类型,这些变量可以存储整 ...

  8. python安装教程windows-windows上安装Anaconda和python的教程详解

    一提到数字图像处理编程,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因 ...

  9. python语言编程基础-Python语言入门详解!快速学成Python!

    原标题:Python语言入门详解!快速学成Python! 很多技能是被职场所需要的,但很可惜... 这些技能在大学中并学习不到. 大学和职场现实存在的横沟对大部分同学来说难以跨越或碰得头破血流... ...

最新文章

  1. 用java爬虫来提高CSDN博客访问量,浏览量
  2. pythonset是什么类型的游戏_Python集合(set)类型的操作
  3. Python工作笔记002---PYTHON之DEF函数
  4. 深入理解python.md_从python角度,理解进程,线程,协程.md-Go语言中文社区
  5. 2021年的第一本书,就从这里选
  6. PHP使用CURL使用问题
  7. 使用jquery 给span 赋值
  8. 20191110每日一句
  9. redis分布式锁学习总结
  10. java毕业设计产品销售管理系统Mybatis+系统+数据库+调试部署
  11. c#设置导出Excel的列宽
  12. C语言 课程设计 实现简单的车辆管理系统
  13. 人脸识别学生考勤系统【2】--登录
  14. scrapy链接mysql_Scrapy存入MySQL(四):scrapy item pipeline组件实现细节
  15. python分析比赛_世界杯:用Python分析热门夺冠球队-(附源代码)
  16. Android Studio中使用Git——结合GitLab,Android热修复原理
  17. Linux之向日葵命令行版安装和使用
  18. AGV-麦克纳姆轮小车控制总结
  19. selenium java 高级技巧篇(必学)美化测试报告(十三)
  20. android app crash测试,APP常见崩溃原因和测试方法整理

热门文章

  1. java数组循环_java数组,遍历数组
  2. 技能在赛题解析:交换机防环路设置
  3. 洛谷P2231 [HNOI2002]跳蚤 [数论,容斥原理]
  4. 浅谈TCP协议与DDOS
  5. 损失函数——机器学习
  6. 无线电频谱、频段、频率、频道之间的区别是什么?
  7. 办公软件 Word2010 所有操作界面
  8. JavaScript零基础入门--笔记动力节点最新老杜(九-完结)全套笔记精髓
  9. 麻省理工公开课:微积分,中文字幕视频+PDF
  10. SPark高集群从头到尾踩坑记录