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*y btn1 = 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 tk

root = 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_hit
if on_hit==True:
on_hit = False #点击交替
var.set("you hit me")
else:
on_hit = True
var.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 tk

root = 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 tk

root = 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 tk

root = 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 tk

root = 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 tk

root = 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 tk

root = 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 tk

root = 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 counter
l.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 tk

root = 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('300x200') 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, None tk.Button(root,text = 'hit_me',command=hit_me).pack() root.mainloop()

(11)pack、grid以及place布局用法

import tkinter as tk

root = 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()

将使用Tkinter编写的带图片的程序打包成exe文件,并且实现图片内嵌:https://blog.csdn.net/qq_43374245/article/details/125627133


最新文章

  1. SQL SERVER 2012 从Enterprise Evaluation Edtion 升级到 Standard Edtion SP1
  2. Netbeans 8.0.2 For PHP继续坑
  3. Cocoa pod的使用注意点
  4. jQuery 添加元素
  5. MITM to crack Https connections
  6. [转]IIS部署托管管道模式的集成和经典区别
  7. jshint 安装使用
  8. qt 设置背景图片
  9. ubuntu 安装openproj-1.4-2.noarch.rpm
  10. Java课程设计——GUI密码生成器团队博客
  11. MySQL 加锁处理分析-转载
  12. CSS核心内容之盒子模型
  13. python/零起点(一、字典)
  14. 51nod 1040 最大公约数之和(欧拉函数)
  15. SendMessageUpwards定义简单按钮(Unity3D开发之十)
  16. gradle配置国内镜像
  17. Spring是如何校验XML的
  18. linux最靠谱安装python3
  19. sql语句创建数据库和表
  20. 下载完整版Chrome离线安装文件的官方地址

热门文章

  1. openEuler 部署Kubernetes(K8s)集群
  2. 这可能是Feign调用可重试的最佳方案了
  3. 《线段树学习笔记》 AC代码索引
  4. java入门与进阶P-1.7+P-1.8
  5. Linux环境下:程序的链接, 装载和库[ELF文件详解]
  6. 【C++ 泛型编程01:模板】函数模板与类模板
  7. 平台工程101:Dev、Sec和Ops的自动化黏合剂
  8. Vue 3项目如何设置全局变量
  9. ES简介
  10. pycharm软件的基本使用、python的注释语法、变量与常量、变量的命名风格、垃圾回收机制、数据类型、数据类型之整型、数据类型之浮点型