python GUI编程tkinter(1)

最近学的有点杂,先总结一下。

一、细节

1.tkMessageBox

python3.4以前的tkMessageBox现在合并到tkinter.messagebox里了;

2.根窗口(root)

top=tkinter.Tk()
top.title('my title')#窗口命名
top.geometry('250x150')#窗口大小
top.mainloop()#循环,窗口不断刷新循环

下面的控件的master都是top,当然也可以是别的控件(widget),pack里的可选参数side控制的是控件在master里的位置。

二、下文为各个控件(widget)
3.标签(Label)
text文件,bg背景色,font字体,width\height长宽,单位是一个字符长、宽
justify每一行文本对齐
anchor对整个文本
wraplength制定多少个单位后开始换行

label=tkinter.Label(top,text='my text',bg='red',font=('Arial',12),width=15,height=2,justify='left',wraplength=80)

要把Label安放在一个地方,用pack(默认)或place(可以输入坐标点 )

label.pack(side='left')#side是基于master的左右
label.place()
label.config(text="change")#重设label里的部分参数

关键字text不可变
关键字textvariable可变,可用方法set等。

var=tkinter.StringVar()#tk的字符变量,可以变化的字符串
label=tkinter.Label(top,textvariable=var,bg='red',font=('Arial',12),width=15,height=2)
label.pack()

4.按钮(Button)
command关键字是按钮的功能,command的功能由其所接的函数来实现
on_hit=False#判断是否点击了

def foo():#进入这个函数就代表点击了按钮
    global on_hit
    if on_hit==False:
        on_hit=True
        var.set('you hit me')
    else:
        on_hit=False
        var.set('')

button=tkinter.Button(top,text='hit me',bg='red',font=('Arial',12),width=15,height=2,command=foo
button.pack()

5.输入(Entry)
覆盖输入模式:关键字show=‘’时,所有输入都会被替换为。除了*也可以是其他任何符号,也会把其他字符覆盖成show的字符
普通模式:不输入show或者show=None

entry=Entry(top,show='*')
entry.pack()

方法

var=entry.get()#得到输入框中的文本

6.文本(Text)

text=Text(top)
text.pack()

方法

text.insert('end',var)#第一个变量的位置为插入的位置,'insert'鼠标点的位置,'end'末尾,x.y第x行第y列(x\y为数字),x\y从0开始

7.列表选项(Listbox)
可以用鼠标选择其中的某一个元素

lb=Listbox(top,listvariable=var2)
lb.pack()

方法

lb.insert(place,var)#place可以是数字\'end'
lb.delete(place)#place可以是数字
lb.curseselection()#鼠标所指的位置

8.单选按钮(Radiobutton)
关键字variable是指变量var,value是最后会赋给var的值

r1=Radiobutton(top,text='option A',variable=var,value="A",command=print_selection)
r1.pack()

9.多选按钮(Checkbutton)
text:按钮上的文字
variable:绑定var
onvalue:选定时的值(注意这里的变量的类型与var的类型要一致)
offvalue:不选时的值

cb=Checkbutton(top,text="Python",variable=var)

10.尺度(Scale)
关键label:标签,展示字符
from_:数值,下限
to:数值,上限
方向(orient):横向(HORIZONTAL),纵向()
length:像素高度
showvalue:显示(=1)当前选择的值
tickinterval:刻度,隔多少个像素点显示一个刻度值
resolution:选择的值保留的小数的位数
command:scale的command默认会传入一个值(str类型)(当前选择的值),函数要默认接收一个参数

s=Scale(top,label='pull',from_=5,to=12,orient=HORIZONTAL,showvalue=0,tickinterval=3,resolution=0.01,command=print_selection)
s.pack()

11.画布(Canvas)
可以放图片、形状等等,还可以换位置
anchor:锚定的点,将图片上的点(锚点)定在坐标上的某个点(x,y),锚点可选:nw,n,ne,e,se,s,sw,w,center

#!/usr/bon/env python
from tkinter import *
from PIL import Image,ImageTk
canvas=Canvas(top,bg='skyblue',height=200,width=200)
image_file=Image.open('dragon.jpg')# 打开图片
img=ImageTk.PhotoImage(image_file)# 用PIL模块的PhotoImage打开,这样才能显示
#img=PhotoImage(file='dragon.gif')#tkinter原生只支持gif
image=canvas.create_image(20,20,anchor='nw',image=img)
rect=canvas.create_rectangle(50,50,100,100,fill='white')
arc=canvas.create_arc(100,100,120,120,start=0,extent=180)
#x0,y0,x1,y1分别是对角线的两个端点的坐标
canvas.pack()

12.菜单(Menu)
tearoff:(=1)可以被分开,(=0)不能被分开

menubar=Menu(top)
filemenu=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()
importmenu=Menu(filemenu,tearoff=0)#再次一级的子菜单是长在父菜单上的
filemenu.add_cascade(label='Import',menu=importmenu)
importmenu.add_command(label='Import jpg',command=do_job)#子子菜单展开的是子子菜单的功能
importmenu.add_command(label='Import text',command=do_job)
settingmenu=Menu(menubar,tearoff=0)
menubar.add_cascade(label='Setting',menu=settingmenu)
settingmenu.add_command(label='Font',command=do_job)
settingmenu.add_command(label='Exit',command=top.quit)#退出窗口
top.config(menu=menubar)#把菜单添上去,因为之前初始设置里没有这个菜单
14960611-95cecfdedf0855a6.png
menu

13.Frame(框架)
长在top里的框架,用来放其他部件

mainframe=Frame(top).pack()
leftframe=Frame(mainframe)
leftframe.pack(side='left')
rightframe=Frame(mainframe)
rightframe.pack(side='right')
Label(leftframe,text='l1',bg='skyblue').pack()
Label(leftframe,text='l2',bg='skyblue').pack()
Label(rightframe,text='r1',bg='skyblue').pack()
Label(rightframe,text='r2',bg='skyblue').pack()

14.messagebox(弹窗)

import tkinter.messagebox as mb#必须先import
def hit():
    #mb.showinfo(title='Info',message='hithit')
    #mb.showwarning(title='Info', message='hithit')
    mb.showerror(title='Info', message='hithit')
b=Button(top,text='hit me',bg='white',width=12,height=1,command=hit)
b.pack(side='bottom')

15.pack,grid,place(控件放置)
side='top''bottom''left''right'
如果pack是直接放在控件后面,里面的side便不起作用
anchor:锚定的点,将图片上的点(锚点)定在坐标上的某个点(x,y),锚点可选:nw,n,ne,e,se,s,sw,w,center

pack(side='top')#side是基于master的左右
grid(row=i,column=j,ipadx=0,ipady=0,padx=0,pady=0)
place(x=10,y=10,anchor='center')

16.绑定鼠标或键盘事件
event为事件,handler为函数

widget.bind(event,handler)
widget.bind_all(event,handler)#键盘按键事件用bind_all
event细表
(1)鼠标

<ButtonPress-n> <Button-n> <n> 鼠标按钮n被按下,n为1左键,2中键,3右键
<ButtonRelease-n> 鼠标按钮n被松开
<Double-Button-n> 鼠标按钮n被双击
<Triple-Button-n> 鼠标按钮n被三击
<Motion> 鼠标被按下,同时,鼠标发生移动
<Bn-Motion> 鼠标按钮n被按下,同时,鼠标发生移动
<Enter> 鼠标进入
<Leave> 鼠标离开
<MouseWheel> 鼠标滚轮滚动

(2)键盘

(对于大多数的单字符按键,你还可以忽略“<>”符号。但是空格键和尖括号键不能这样做)
<Any-KeyPress> <KeyPress> <Key> 任意键按下
<KeyRelease> 任意键松开
<KeyPress-key> <Key-key> <key> 特定键按下
<KeyRelease-key> 特定键松开
<Control-Shift-Alt-KeyPress-key> <Control-Shift-Alt-key> 组合键按下(Alt,Shift,Control任选一到三个)

(3)特殊键

<Return>
<Escape>
<space>
<Tab>
<Up>
<Right>
<Left>
<Down>
<Shitf_L>
<Shift_R>
<Control_L>
<Control_R>
<Alt_L>
<Alt_R>
<F1>
...
<F12>

(4)根据事件,查看按键

event.char 可见字符,甚至中文
event.keysym 用字符串命名了按键
event.keycode 用按键码命名了按键,但是它不能反映事件前缀:Alt、Control、Shift、Lock,并且它不区分大小写写按键,即输入a和A是相同的键码。
event.keysym_num 用数字代码命名了按键
event.Key 描述了键盘上的按键名,方便一一对应

猜你喜欢

转载自blog.csdn.net/weixin_33924770/article/details/87560916