(八)python语法之Tkinter 1.主框架 2.标签 变量 3.输入框 文本框 按钮 4.Listbox长条形选择框 5.Radiobutton圆形选择框 6.Checkbutton勾选项 7.Scale滑动选择框 8.Canvas画布 9.弹窗 10.菜单 11.布局 12.Frame

import tkinter as tk

root = tk.Tk()
root.title('my window')
root.geometry('400x300')
root.mainloop()

2.标签 变量

import tkinter as tk

root = tk.Tk()
root.title('my window')
root.geometry('400x300')

# 标签
l1 = tk.Label(root, text='Label1', bg='green', font=('Arial', 12), width=15, height=2)
l1.pack(expand=True, side='top')  
l1.config(text='Hello', bg='yellow')

# 标签内容设为变量
var = tk.StringVar() 
l2 = tk.Label(root, textvariable=var, bg='red', font=('Arial', 12), width=15, height=2)
l2.pack(expand=True, side='top')
var.set('Label2')

root.mainloop()

3.输入框 文本框 按钮

import tkinter as tk

root = tk.Tk()
root.title('my window')
root.geometry('400x300')

def hit_me():
    # 从输入框获取内容
    var = e.get()          
    # 在文本框光标处输入内容
    t.insert('insert',var) 
    # 向文本框末尾处输入内容
    t.insert('end',var)    

# 输入框设置输入内容显示为*
e = tk.Entry(root, show='*') 
e.pack()

# 文本框
t = tk.Text(root, width=15, height=2)
t.pack()

# 按钮
b = tk.Button(root, text='hit me', width=15, height=2, command=hit_me) 
b.pack()

root.mainloop()

4.Listbox长条形选择框

import tkinter as tk
import tkinter.messagebox as msg

root = tk.Tk()
root.title('my window')
root.geometry('400x300')

def add_item():
    var = e.get() 
    lb.insert('end', var) # 在末尾插入
    lb.insert(0, 'first') # 在最上面插入
    
def del_item():
    # 删除第二个位置的字符
    lb.delete(lb.curselection())    

def show_item():
    # 获取Listbox光标值 
    var = lb.get(lb.curselection())  
    # 弹窗消息
    msg.showinfo(title='Hello', message=var)    

var = tk.StringVar()
var.set(('Tom','Mary','Jack'))
lb = tk.Listbox(root, listvariable=var) 
lb.pack()

e = tk.Entry(root) 
e.pack()

b1 = tk.Button(root, text='增加', width=15, height=2, command=add_item) 
b1.pack(side='left')

b2 = tk.Button(root, text='删除', width=15, height=2, command=del_item) 
b2.pack(side='left')

b3 = tk.Button(root, text='Show', width=15, height=2, command=show_item) 
b3.pack(side='right')

root.mainloop()

5.Radiobutton圆形选择框

import tkinter as tk

root = tk.Tk()
root.title('my window')
root.geometry('400x300')

# 选中时把value的值A放到变量var中
var = tk.StringVar() 
var.set('A')

r1 = tk.Radiobutton(root, text='Option A', variable=var, value='A')
r1.pack()

r2 = tk.Radiobutton(root, text='Option B', variable=var, value='B')
r2.pack()

print(var.get())

root.mainloop()

6.Checkbutton勾选项

import tkinter as tk

root = tk.Tk()
root.title('my window')
root.geometry('400x300')

# 选中时onvalue的值1放到变量var中
var = tk.StringVar() 
var.set(0)

c = tk.Checkbutton(root, text='Python', variable=var, onvalue=1, offvalue=0)
c.pack()

print(var.get())

root.mainloop()

7.Scale滑动选择框

import tkinter as tk

root = tk.Tk()
root.title('my window')
root.geometry('400x300')

var = tk.IntVar()

s = tk.Scale(root, label='try me', from_=5, to=11, orient=tk.HORIZONTAL,
             length=200, showvalue=1, tickinterval=2, resolution=0.01,
             variable=var)
s.pack()

print(var.get())

root.mainloop()

8.Canvas画布

import tkinter as tk

root = tk.Tk()
root.title('my window')
root.geometry('400x300')

# 横坐标移动0个单位,纵坐标移动2个单位
def moveit(): 
    canvas.move(rect, 0, 2)

canvas = tk.Canvas(root, bg='blue', height=400, width=300)
canvas.pack()

# 加载图片
image_file = tk.PhotoImage(file='1.png') 
# 在画布上添加图片
image = canvas.create_image(10, 10, anchor='nw', image=image_file) 

# 从坐标(50,50)到(80,80)画一条直线 
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=0, extent=180)

# 画一个矩形
rect = canvas.create_rectangle(100, 30, 100+20, 30+20) 

b = tk.Button(root, text='move', command=moveit).pack()

root.mainloop()

9.弹窗

import tkinter as tk
import tkinter.messagebox as msg
import tkinter.filedialog as fd

root = tk.Tk()
root.title('my window')
root.geometry('400x300')
###########################################
msg.showinfo(title='Hi', message='INFO')  

msg.showwarning(title='Hi', message='WARNING') 

msg.showerror(title='Hi', message='ERROR')   

# return 'yes' , 'no'
msg.askquestion(title='Hi', message='ask1')  

# return True, False
msg.askyesno(title='Hi', message='ask2')     

# return True, False
msg.askokcancel(title='Hi', message='ask3')  

# return, True, False, None
msg.askyesnocancel(title="Hi", message="ask4") 

# 文件选择框
fd.askopenfilename() 

root.mainloop()

10.菜单

import tkinter as tk

root = tk.Tk()
root.title('my window')
root.geometry('400x300')

def do_job():
    print("test")

# 创建菜单栏容器
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_separator()                              
filemenu.add_command(label='Exit', command=root.quit) 

# 在filemenu上添加二级菜单
submenu = tk.Menu(filemenu)                           
filemenu.add_cascade(label='Import', menu=submenu, underline=0)
submenu.add_command(label="Image", command=do_job)

# 菜单项配置
root.config(menu=menubar) 

root.mainloop()

11.布局

import tkinter as tk

root = tk.Tk()
root.title('my window')
root.geometry('400x300')

# grid用表格形式定位。row为行,colum为列,padx是单元格左右间距,pady是单元格上下间距
for i in range(4):
    for j in range(3):
        tk.Label(root, text=i+j).grid(row=i, column=j, padx=10, pady=10)

# place将这个部件放在坐标为(x,y)的位置,anchor=nw表示锚定点是西北角
tk.Label(root, text='Hello').place(x=200, y=100, anchor='nw')

root.mainloop()

12.Frame

import tkinter as tk

root = tk.Tk()
root.title('my window')
root.geometry('400x300')

# 在root上创建一个frame
frm = tk.Frame(root).pack()

# 在frame上创建两个frame
frm_l = tk.Frame(frm)       
frm_r = tk.Frame(frm)

# 布局位置
frm_l.pack(side='left')     
frm_r.pack(side='right')

# 在Frame上添加组件
tk.Label(frm_l, text='frm_l1').pack() 
tk.Label(frm_l, text='frm_l2').pack()
tk.Label(frm_r, text='frm_r1').pack()

root.mainloop()