tkinter笔记

Tkinter笔记

1.常用窗口组件及说明
组件名称作用
Button简单按钮,点击以执行命令
Canvas可以绘制图表和图,创建图形编辑器,定制窗口部件
Checkbutton代表一个变量,点击再两个值之间切换
Entry文本输入域
Frame窗口容器组件。可以有边框和背景,当创建一个应用程序或对话面板时,Frame用来组织其他窗口组件
Label显示文本或图像
Listbox显示供选方案的列表。listbox能被配置来得到radiobutton或checklist的行为
Menu可实现下拉式和弹出式菜单
Menubutton实现下拉式菜单
Message显示文本
Radiobutton代表一个变量,可以使多个值中的一个
Scale通过滑块设置数字值
Scrollbar为配合使用canvas,entry,listbox,text等窗口组件的标准滚动条
Text可用不同样式和属性来显示和编辑文本,支持内嵌图像和窗口
Toplevel作为一个单独的,最顶层的窗口显示
messageBox消息框

注意:Tkinter中窗口部件没有分级,所有窗口部件在树中都是兄弟关系

2. 各组件使用示例
2.1 主窗口及Label标签创建和使用
import tkinter as tk

window = tk.Tk()
window.title("window") #标题
window.geometry("500x300") #大小,中间是小写字母 "x"

# 可设置多种属性
l = tk.Label(window,text="hello,this is a label",bg="green",font=("Arial",12),width=30,height=1)
l.pack() # 放置到创建时制定的窗口中

window.mainloop()
2.2 Button组件的使用

​ 按钮能包含文本或图像,按钮仅能显示一种字体,文本可跨行,这个文本的一个字母可以有下划线。

import tkinter as tk

window = tk.Tk()
window.title("window") #标题
window.geometry("500x300") #大小,中间是小写字母 "x"

# 设定标签,用以和按钮联动
var = tk.StringVar()
l = tk.Label(window,textvariable=var,bg="green",font=("Arial",12),width=30,height=1)
l.pack()

on_click = False
def click_btn():
    # python函数中若想对函数外的变量进行操作,需要在函数内部对变量进行global声明
    global on_click 
    if on_click == False:
        on_click = True
        var.set("clicked!")
    else:
        on_click = False
        var.set("")

# 创建按钮
btn = tk.Button(window,text="click me",font=("Arial",12),width=10,height=1,command=click_btn)
btn.pack()

window.mainloop()
2.3 Entry窗口组件

​ Entry是一个单行文本输入域,类似HTML中的text

import tkinter as tk

window = tk.Tk()
window.title("window") #标题
window.geometry("500x300") #大小,中间是小写字母 "x"


# 创建标签显示entry内容
var = tk.StringVar()
l = tk.Label(window,textvariable=var,bg="green",font=("Arial",12),width=30,height=1)
l.pack()

def click_btn():
    global var
    str = "e1:"+e1.get() # entry取值
    var.set(str)
    e2.insert(0,e1.get()) # entry赋值

# 创建按钮
btn = tk.Button(window,text="click me",font=("Arial",12),width=10,height=1,command=click_btn)
btn.pack()

# 创建entry
e1 = tk.Entry(window,show="*",font=("Arial",12))
e2 = tk.Entry(window,show=None,font=("Arial",12))
e1.pack()
e2.pack()

window.mainloop()
2.4 Text组件

​ Text是文本域,用来收集和显示多行文本,格式化文本显示,支持内嵌图像和窗口

import tkinter as tk

window = tk.Tk()
window.title("window")  # 标题
window.geometry("500x300")  # 大小,中间是小写字母 "x"

# 创建entry
e = tk.Entry(window, show=None, font=("Arial", 12))
e.pack()

def insert_point():
    var = e.get()
    t.insert("insert",var) # 从当前焦点处插入内容

def insert_end():
    var = e.get()
    t.insert("end",var) # 从文本末尾插入内容

b1 = tk.Button(window,text="insert point",width=10,height=2,command=insert_point)
b1.pack()
b2 = tk.Button(window,text="insert end",width=10,height=2,command=insert_end)
b2.pack()

t = tk.Text(window,height=3)
t.pack()

window.mainloop()
2.5 Listbox组件
import tkinter as tk

window = tk.Tk()
window.title("window")  # 标题
window.geometry("500x300")  # 大小,中间是小写字母 "x"

var1 = tk.StringVar()
l = tk.Label(window,textvariable=var1,bg="green",fg="yellow",font=("Arial",12),width=30,height=1)
l.pack()

def print_selection():
    # global var
    if lb.curselection() is not (): # 未选择时为空元组
        value = lb.get(lb.curselection()) # 获取当前选中的文本
        var1.set(value)

b1 = tk.Button(window,text="print selection",width=10,height=2,command=print_selection)
b1.pack()

var2 = tk.StringVar()
var2.set((1,2,3,4))

lb = tk.Listbox(window,listvariable=var2)
list_items = [11,22,33,44]
for item in list_items:
    lb.insert("end",item)

lb.insert(1,"first")
lb.insert(2,"second")
lb.delete(2)
lb.pack()

window.mainloop()
2.6 Radiobutton组件
import tkinter as tk

window = tk.Tk()
window.title("window")  # 标题
window.geometry("500x300")  # 大小,中间是小写字母 "x"

var= tk.StringVar()
var.set("A")
l = tk.Label(window,text="",bg="yellow",font=("Arial",12),width=30,height=1)
l.pack()

def print_selection():
    l.config(text="selected :" + var.get())

r1 = tk.Radiobutton(window,text="Option A",variable=var,value="A",command=print_selection)
r1.pack()
r1 = tk.Radiobutton(window,text="Option B",variable=var,value="B",command=print_selection)
r1.pack()
r1 = tk.Radiobutton(window,text="Option C",variable=var,value="C",command=print_selection)
r1.pack()

window.mainloop()
2.7 Checkbutton
import tkinter as tk

window = tk.Tk()
window.title("window")  # 标题
window.geometry("500x300")  # 大小,中间是小写字母 "x"

l = tk.Label(window,text="",bg="yellow",font=("Arial",12),width=30,height=1)
l.pack()

def print_selection():
    if (var1.get()==1)&(var2.get()==0):
        l.config(text="choose only 1")
    elif (var1.get()==0)&(var2.get()==1):
        l.config(text="choose only 2")
    elif (var1.get()==0)&(var2.get()==0):
        l.config(text="choose neither 1 nor 2")
    else:
        l.config(text="choose both 1 and 2")

var1 = tk.IntVar()
var2 = tk.IntVar()

c1 = tk.Checkbutton(window,text="11111",variable=var1,onvalue=1,offvalue=0,command=print_selection)
c1.pack()
c2 = tk.Checkbutton(window,text="22222",variable=var2,onvalue=1,offvalue=0,command=print_selection)
c2.pack()

window.mainloop()
2.8 Scale滑动条组件
import tkinter as tk

window = tk.Tk()
window.title("window")  # 标题
window.geometry("500x300")  # 大小,中间是小写字母 "x"

l = tk.Label(window,text="",bg="yellow",font=("Arial",12),width=30,height=1)
l.pack()

def print_selection(v):
    l.config(text="selected :" + v)

# 长度200字符,0开始10结束,以2为刻度,精度0.01
s = tk.Scale(window,label="try me",from_=0,to=10,orient=tk.HORIZONTAL,length=200,showvalue=0,tickinterval=2,resolution=0.01,command=print_selection)
s.pack()

window.mainloop()
2.9 Canvas窗口组件

​ 可绘制图表和图,创建图形编辑器,实现定制窗口部件

import tkinter as tk

window = tk.Tk()
window.title("window")  # 标题
window.geometry("500x300")  # 大小,中间是小写字母 "x"

canvas = tk.Canvas(window,bg="green",height=200,width=500)

img_file = tk.PhotoImage(file="pic.gif")
img = canvas.create_image(250,0,anchor="n",image=img_file)
x0, y0, x1, y1 = 100, 100, 150, 150
line = canvas.create_line(x0-50, y0-50, x1-50, y1-50)                   # 画直线
oval = canvas.create_oval(x0+120, y0+50, x1+120, y1+50, fill='yellow')  # 画圆 用黄色填充
arc = canvas.create_arc(x0, y0+50, x1, y1+50, start=0, extent=180)      # 画扇形 从0度打开收到180度结束
rect = canvas.create_rectangle(330, 30, 330+20, 30+20) 
canvas.pack()

def moveit():
    canvas.move(rect, 2, 2) # 移动正方形rect(也可以改成其他图形名字用以移动一起图形、元素),按每次(x=2, y=2)步长进行移动
b = tk.Button(window, text='move item',command=moveit).pack()
window.mainloop()

图片锚定点位置参数图:

img
2.10 Menu组件

​ 实现弹出式和下拉式菜单

import tkinter as tk

window = tk.Tk()
window.title("window")  # 标题
window.geometry("500x300")  # 大小,中间是小写字母 "x"

l = tk.Label(window,width=30,height=2,bg="gray")
l.pack()

counter = 0
def do_job():
    global counter
    l.config(text="do"+str(counter))
    counter += 1

menubar = tk.Menu(window)
filemenu = tk.Menu(menubar,tearoff=0) # 默认不展开菜单
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=window.destroy)

window.config(menu=menubar)

window.mainloop()
2.11 Frame窗口组件

​ Frame是一个容器,可承载其他GUI元素,可以做区域划分

import tkinter as tk

window = tk.Tk()
window.title("window")  # 标题
window.geometry("500x300")  # 大小,中间是小写字母 "x"

tk.Label(window,text="on th window",bg="red").pack()

frame = tk.Frame(window)
frame.pack()

frame_l = tk.Frame(frame)
frame_r = tk.Frame(frame)
frame_l.pack(side="left")
frame_r.pack(side="right")

tk.Label(frame_l,text="on frame_l1").pack()
tk.Label(frame_l,text="on frame_l2").pack()
tk.Label(frame_l,text="on frame_l3").pack()
tk.Label(frame_r,text="on frame_r1").pack()
tk.Label(frame_r,text="on frame_r2").pack()
tk.Label(frame_r,text="on frame_r3").pack()

window.mainloop()
2.12 messageBox消息弹窗组件
import tkinter as tk
import tkinter.messagebox

window = tk.Tk()
window.title("window")  # 标题
window.geometry("500x300")  # 大小,中间是小写字母 "x"

tk.Button(window, text='click', bg='green', font=('Arial', 14), command=lambda title="info",
          message="提示": tkinter.messagebox.showinfo(title=title,message=message)).pack()
tk.Button(window, text='click', bg='red', font=('Arial', 14), command=lambda title="info",
          message="警告": tkinter.messagebox.showwarning(title=title,message=message)).pack()
tk.Button(window, text='click', bg='yellow', font=('Arial', 14), command=lambda title="info",
          message="错误": tkinter.messagebox.showerror(title=title,message=message)).pack()
tk.Button(window, text='click', bg='green', font=('Arial', 14), command=lambda title="info",
          message="询问": tkinter.messagebox.askquestion(title=title,message=message)).pack()
tk.Button(window, text='click', bg='red', font=('Arial', 14), command=lambda title="info",
          message="询问对错": tkinter.messagebox.askyesno(title=title,message=message)).pack()
tk.Button(window, text='click', bg='yellow', font=('Arial', 14), command=lambda title="info",
          message="询问取消": tkinter.messagebox.askokcancel(title=title,message=message)).pack()

window.mainloop()
3. 组件的三种布局方式
3.1 Grid表格布局
import tkinter as tk
import tkinter.messagebox

window = tk.Tk()
window.title("window")  # 标题
window.geometry("500x300")  # 大小,中间是小写字母 "x"

for i in range(3):
    for j in range(3):
        # row为行,column为列,padx单元格左右间距,pady单元格上下间距,ipadx单元格内部左右间距,ipady单元格内部上下间距
        tk.Label(window,text=str((i+1)*(j+1))).grid(row=i,column=j,padx=10,ipadx=10,ipady=10)

window.mainloop()
3.2 Pack包装布局
import tkinter as tk
import tkinter.messagebox

window = tk.Tk()
window.title("window")  # 标题
window.geometry("500x300")  # 大小,中间是小写字母 "x"

tk.Label(window,text="上",bg="green").pack(side="top")
tk.Label(window,text="下",bg="red").pack(side="bottom")
tk.Label(window,text="左",bg="yellow").pack(side="left")
tk.Label(window,text="右",bg="gray").pack(side="right")

window.mainloop()
3.3 Place位置布局
import tkinter as tk
import tkinter.messagebox

window = tk.Tk()
window.title("window")  # 标题
window.geometry("500x300")  # 大小,中间是小写字母 "x"

tk.Label(window,text="place布局",bg="green").place(x=50,y=100,anchor="nw")

window.mainloop()
4. 其他技巧

标准属性:

​ 标准属性是所有控件的共同属性,如大小,颜色,字体等

属性描述
Dimension控件大小;
Color控件颜色;
Font控件字体;
Anchor锚点;
Relief控件样式;
Bitmap位图;
Cursor光标;

注:本文学习自洪卫的博客菜鸟tkinter教程后总结而来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值