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()
root.mainloop()
②修改窗口属性
root.title('演示窗口')
root.geometry("300x100+630+80")
③创建按钮
import tkinter as tk
from tkinter import messagebox
root = tk.Tk()
root.title('演示窗口')
root.geometry("300x100+630+80")
btn1 = tk.Button(root)
btn1["text"] = "点击"
btn1.pack()
def test(e):
'''创建弹窗'''
messagebox.showinfo("窗口名称", "点击成功")
btn1.bind("", test)
root.mainloop()
④窗口内的组件布局
3、Tkinter布局用法
①基本界面、label(标签)和button(按钮)用法
import tkinter as tk
root = tk.Tk()
root.title("这是Demo")
root.geometry("300x200")
var = tk.StringVar()
lab = tk.Label(root,textvariable=var,bg = 'green',font=('Arial',12),width=15,height=2)
lab.pack()
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("")
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")
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)
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()
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")
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)
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))
lb = tk.Listbox(root, listvariable=var2)
list_items = [1,2,3,4]
for item in list_items:
lb.insert('end', item)
lb.insert(1, 'first')
lb.insert(2, 'second')
lb.pack()
root.mainloop()
④Radiobutton(选择按钮)用法
import tkinter as tk
root = tk.Tk()
root.title("这是Demo")
root.geometry("300x200")
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())
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")
l = tk.Label(root, bg='yellow', width=20, text='empty')
l.pack()
def print_selection(v):
l.config(text='you have selected ' + v)
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")
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()
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 = tk.Canvas(root, bg='white', height=200, width=200)
image_file = tk.PhotoImage(file='C:\\Users\\admin\\Desktop\\Demo\\Demo\\1.gif')
image = canvas.create_image(0,0, anchor='nw', image=image_file)
x0, y0, x1, y1= 50, 50, 80, 80
line = canvas.create_line(x0, y0, x1, y1)
oval = canvas.create_oval(x0, y0, x1, y1, fill='red')
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()
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')
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 = tk.Menu(root)
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=root.quit)
editmenu = tk.Menu(menubar, tearoff=0)
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 = tk.Menu(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')
tk.Label(root, text='on the window').pack()
frm = tk.Frame(root)
frm.pack()
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.showerror(title='Hi', message='No!! never')
tk.Button(root,text = 'hit_me',command=hit_me).pack()
root.mainloop()
⑾pack、grid以及place布局用法
import tkinter as tk
root = tk.Tk()
root.title('my window')
root.geometry('200x200')
tk.Label(root, text=1).place(x=20, y=10, anchor='nw')
root.mainloop()