python 可视化界面学习简易教程

利用python中的tkinter创建窗口

1、窗口主体框架

import tkinter as tk

window = tk.Tk()  #创建窗口
window.title("this is a test")  #窗口标题
window.geometry('500x400')     #窗口大小,小写字母x
#窗口的label
k = tk.Label(window,
    text = 'this is a window created by tkinter',  #文本
    bg ='green',   #字体的背景颜色
    font = ('Arial',12),  #字体和大小
    width = 30 , height = 2   #字体所占的宽度和高度
    )
k.pack()  #固定

#以上是窗口的主体
window.mainloop() #结束(不停循环刷新)

2、实现简单的点击计数窗口(添加标签和按钮)

import tkinter as tk

window = tk.Tk()  #创建窗口
window.title("this is a test")  #窗口标题
window.geometry('500x400')     #窗口大小,小写字母x
#窗口的label
textcontent = tk.StringVar() #文字变量储存
k = tk.Label(window,
    textvar = textcontent,  #文本,可变换
    bg ='green',   #字体的背景颜色
    font = ('Arial',12),  #字体和大小
    width = 30 , height = 2   #字体所占的宽度和高度
    )
k.pack()  #固定窗口
hit_state = False
i = 0
textcontent.set(i)     #为textcontent置值
def hit_here():
    global hit_state, i     #指定为全局变量,如果你想要为一个定义在函数外的变量赋值,
                            # 那么你就得告诉Python这个变量名不是局部的,而是 全局 的。
                            #我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。
    if hit_state == False:
        hit_state = True
        i+=1
        textcontent.set(i)
    else:
        hit_state = False
        i+=1
        textcontent.set(i)
#添加按钮
b = tk.Button(
    window,
    text = 'button',
    width = 5 , height = 2,
    command = hit_here   #执行函数体,而不是得到函数执行的结果
)
b.pack()

#以上是窗口的主体
window.mainloop() #结束(不停循环刷新)
可以通过config对label的内容进行重新设置,如下:
l = tk.Label(window, bg='yellow', width=20, text='empty')
l.pack()
l.config(bg = 'green',text='change ' )

注:调用函数时,不带括号调用的是这个函数本身 ,是整个函数体,是一个函数对象,不须等该函数执行完成
带括号(参数或者无参)调用的是函数的执行结果,须等该函数执行完成的结果,如果没有返回则没有响应

3、添加输入、文本框、列表部件

e = tk.Entry(window,show='*')
e.pack()
t = tk.Text(window,height=2)
t.pack()

e.get()  #可以得到输入的内容

t.insert('insert',var)  #在文本框的光标处插入var

t.insert('end',var)     #在末尾插入var
var2 = tk.StringVar()     
var2.set((11,22,33,44))     #设置列表中的内容、

lb = tk.Listbox(window, listvariable=var2)   #创建一个选择列表
lb.pack()

value = lb.get(lb.curselection())     #获取选中的列表中的值

注意,列表中的值必须由tk.StringVar()  来设置,直接赋值无法使用

4、添加选择按钮radiobutton

r1 = tk.Radiobutton(window, text='Option A',  #按钮的显示名称
                    variable=var, value='b', #var 的值放在value中
                    command=action)  #执行的操作
r1.pack()

5、scale部件

s = tk.Scale(window,label = 'scale',from_ = 0,to = 10,orient = tk.HORIZONTAL,
             length = 200, showvalue = 1,tickinterval = 2,resolution = 0.01,command = showup   #触发的功能 )
s.pack()
  • 参数from_=0,to=10的意思就是从0到10,即这个滚动条最小值为0,最大值为10(这里使用from_是因为在python中有from这个关键词)
  • 参数orient=tk.HORIZONTAL在这里就是设置滚动条的方向,如我们所看到的效果图,这里HORIZONTAL就是横向。
  • 参数length这里是指滚动条部件的长度,但注意的是和其他部件width表示不同,width表示的是以字符为单位,比如width=4,就是4个字符的长度,而此处的length=200,是指我们常用的像素为单位,即长度为200个像素
  • 参数resolution=0.01 保留2位小数,如果保留一位就是resolution=0.1 这里的showvalue就是设置在滚动条上方的显示。showvalue=0上方无结果显示,如果改为showvalue=1,则会显示当前值,下图为效果图

6、勾选项checkbutton

tk.IntVar()
c = tk.Checkbutton(window, text='yes', #选项名
                    variable=var, onvalue=1, #选中时var的值
                    offvalue=0,   #未选中时var的值
                    command=choice  #选中时执行的命令   )
c.pack()

example:

var3 = tk.IntVar()
var4 = tk.IntVar()
def choice():
    if(var3.get()==1)&(var4.get()==0):
        l.config(bg = 'red',text = "you have choicen 'yes'!")
    elif(var3.get()==0)&(var4.get()==1):
        l.config(bg = 'red',text="you have choicen 'no'!")
    elif(var3.get()==0)&(var4.get()==0):
        l.config(bg='red', text='please choice!')
    else:
        l.config(text='error!you can just choice a answer')
c1 = tk.Checkbutton(window, text='yes', variable=var3, onvalue=1, #选中时var3的值
                    offvalue=0,   #未选中时var3的值
                    command=choice)
c1.pack()
c2 = tk.Checkbutton(window, text='no', variable=var4, onvalue=1, #选中时var3的值
                    offvalue=0,   #未选中时var3的值
                    command=choice)
c2.pack()

 7、canvas画布

#创建画布
canvas = tk.Canvas(window, bg='blue', height=100, width=200)

#添加图片
image_file = tk.PhotoImage(file='ins.gif')
image = canvas.create_image(10, 10, anchor='nw', image=imagefile)

oval = canvas.create_oval(x0, y0, x1, y1, fill='red')  #创建一个圆,填充色为`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)   #创建一个矩形

#以上为画布的内容
canvas.pack()  

 image_file = tk.PhotoImage(file='ins.gif')这一句是创造一个变量存放ins.gif这张图片。 image = canvas.create_image(10, 10, anchor='nw', image=image_file)里面的参数10,10就是图片放入画布的坐标, 而这里的anchor=nw则是把图片的左上角作为锚定点,在加上刚刚给的坐标位置,即可将图片位置确定。

8、menubar菜单

menubar = tk.Menu(window)  #在窗口上添加菜单栏

filemenu = tk.Menu(menubar, tearoff=0)  #filemenu放在menu中
submenu = tk.Menu(filemenu)             #submenu放在filemenu中
ssubmenu = tk.Menu(submenu)             #ssubmenu放在submenu中
menubar.add_cascade(label='File', menu=filemenu)    #add_cascade用来创建下拉栏,filemenu命名为File
filemenu.add_command(label='New', command=do_job)   #add_command用来创建命令栏,不可有子项
filemenu.add_command(label='Open', command=do_job)
filemenu.add_command(label='Save', command=do_job)
filemenu.add_cascade(label='1',menu = submenu)   #submenu 命名为1
submenu.add_cascade(label='2',menu = ssubmenu)   #ssubmenu 命名为2


window.config(menu=menubar) #创建完毕

 效果图为:

 9、Frame

Frame 是一个在 Windows 上分离小区域的部件, 它能将 Windows 分成不同的区,然后存放不同的其他部件. 同时一个 Frame 上也能再分成两个 Frame, Frame 可以认为是一种容器.可以把它看做是一个小的window

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

#在刚刚创建的`frame`上创建两个`frame`,我们可以把它理解成一个大容器里套了一个小容器,即`frm`上有两个`frame` ,`frm_l`和`frm_r`

frm_l = tk.Frame(frm)
frm_r = tk.Frame(frm)

#这里是控制小的`frm`部件在大的`frm`的相对位置,此处`frm_l`就是在`frm`的左边,`frm_r`在`frm`的右边
frm_l.pack(side='left')
frm_r.pack(side='right')

example:

import tkinter as tk

window = tk.Tk()
window.title('my window')
window.geometry('200x200')
tk.Label(window, text='on the window').pack()

frm = tk.Frame(window)
frm.pack()
frm_l = tk.Frame(frm)
frm_r = tk.Frame(frm)
frm_l.pack(side='left')
frm_r.pack(side='right')

def insert_point():
    value = lb.get(lb.curselection())
    t.insert('insert',value)

def insert_end():
    var = e.get()
    t.insert('end',var)
#添加按钮
b1 = tk.Button(frm_l,text="insert point",width=15,height=2,command=insert_point)
b1.pack()

b2 = tk.Button(frm_l,text="insert end",command=insert_end)
b2.pack()
e = tk.Entry(frm_l,show='*')
e.pack()
t = tk.Text(frm_l,height=2)
t.pack()
l = tk.Label(frm_r, bg='yellow', width=20, text='empty')
l.pack()
def showup(v):
    l.config(bg = 'yellow',text='you have selected ' + v)
s = tk.Scale(frm_r,label = 'scale',from_ = 0,to = 10,orient = tk.HORIZONTAL,
             length = 200, showvalue = 1,tickinterval = 2,resolution = 0.01,command = showup)
s.pack()
tk.Label(frm_l, text='左面的部分').pack()
tk.Label(frm_r, text='右面的部分').pack()
window.mainloop()

效果图:

 

10、messagebox  弹窗以及放置位置pack、grid、place

tk.messagebox.showinfo(title=' ',message=' ')#提示信息对话窗
tk.messagebox.showwarning(title=' ',message=' ')#提出警告对话窗
tk.messagebox.showerror(title=' ',message=' ')#提出错误对话窗
tk.messagebox.askquestion(title=' ',message=' ')#询问选择对话窗

#pack
pack(side='top')#上
pack(side='bottom')#下
pack(side='left')#左
pack(side='right')#右

#grid
grid(row=i, column=j, padx=10, pady=10)
#这里的参数 row为行,colum为列,padx就是单元格左右间距,pady就是单元格上下间距。

#place
place(x=20, y=10, anchor='nw')
#将这个部件放在坐标为(x,y)的这个位置 后面的参数anchor=‘nw’ 意为锚定点是西北角。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值