Tkinter python3

Tkinter

在这里插入图片描述
Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。

由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。
注意:python3中的库名为tkinter,即首字母大写。

创建一个GUI程序

1、导入 Tkinter 模块
2、创建控件
3、指定这个控件的 master, 即这个控件属于哪一个
4、告诉 GM(geometry manager) 有一个控件产生了。

Tkinter主体:

每一个tkinter应用的主体框架都可以包含下面这部分,定义window窗口和window的一些属性,然后书写窗口内容,最后执行window.mainloop让窗口活起来。

//导入模块
import tkinter
// 创建主窗口
win = tkinter.Tk()
//设置窗口标题
win.title(“sunck”)
//设置窗口大小与位置
win.geometry(“400x400+200+0”)
//进入消息循环,程序运行起来
win.mainloop()

代码如下:

#!usr/bin/python3
#-*- coding: UTF-8 -*-

import tkinter

#创建主窗口
win=tkinter.Tk()
#窗口标题
win.title('哈哈')
#窗口大小位置
win.geometry('400x400+200+0')
#消息循环 程序运行
win.mainloop()

效果图:
在这里插入图片描述

Tkinter 组件

Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用。这些控件通常被称为控件或者部件。

常用控件:

在这里插入图片描述

所有控件共有属性

在这里插入图片描述

常用控件:

1. label(标签控件),button(按钮控件)

  • Label控件用于显示文字和图片
  • Label通常被用来展示信息,而非与用户进行交互
  • Label也可以绑定点击等事件,只是通常不这么用

label,button完整代码如下:

import tkinter as tk  
#创建主窗口
window=tk.Tk()
#窗口标题
window.title('哈哈')
#窗口大小位置
window.geometry('400x400')
#这是文字变量存储器
var = tk.StringVar()
#创建标签控件
l = tk.Label(window,
#标签的文本
    # text='omg,this is label',
    # 使用 textvariable 替换 text, 因为这个可以变化
    textvariable=var, 
    bg='red',
    font=('Arial',12),
    #标签宽高
    width=15,
    height=2,
    #瞄点,标签里的文本在标签里面显示的位置
    anchor='n',
    #显示多行文本的时候,设置不同行之间的对齐方式
    justify='center',
    #下划线  第5个字符带下划线
    underline=4,
    #设置边框样式
    relief='flat',
    )
#显示控件
l.pack()
# 默认初始状态为 False
on_hit = False  
def hit_me():
    global on_hit
    # 从 False 状态变成 True 状态
    if on_hit == False:    
        on_hit = True
        # 设置标签的文字为 'you hit me'
        var.set('you hit me')   
    else: 
    # 从 True 状态变成 False 状态     
        on_hit = False
        # 设置文字为空
        var.set('') 
        #点击按钮,点击之后才会执行相关函数
b = tk.Button(window,
# 显示在按钮上的文字 
    text='hit me',     
    width=15, height=2, 
   
    #设置控件边框的大小 默认2像素
    bd=3,
    #边框样式
    relief='sunken',
    #当鼠标放上去时,按钮的背景颜色
    activebackground='orange',
    #当鼠标放上去时,按钮的文本颜色
    activeforeground='green',
    # 点击按钮时执行一次命令
    command=hit_me,    
    )
# 按钮位置
b.pack()
#消息循环 程序运行
window.mainloop()

显示效果:

在这里插入图片描述

部分属性介绍:

  • anchor:文本在空间中的显示位置(按照上北下南,左西右东规则),可选值有(n北 e东 s南 w西 center剧中 ne西北 se东南 sw西南 nw东北)方向

  • imag:显示的图片

  • acticvebackground:当鼠标放上去的时候,按钮的背景色

  • activeforeground:当鼠标放上去时,按钮的文本颜色

  • highlightcolor:要亮的颜色

  • image:按钮上要显示的图片

  • state:设置按钮组件状态,可选的有(normal(默认),active,disabled)

  • command:按钮的绑定函数方法,接受一个函数名,注意函数名不要加引号

2.Entry(输入框) ,Text(文本框):

首先得定义一个Entry控件

e = tk.Entry(window,show=None)
e.pack()

注意这里的show,可以自定义显示你想要在Entry中显示的字符,例如像输入密码时,可令show=‘*’
本节实现的例子功能为,如下所示的一个窗口,从上至下分别为定义的Entry、Button、Button和Text。两个Button分别命名为insert point和insert end,获取Entry中输入的内容并且分别在光标位置、末尾插入,内容显示在Text中。

Entry,Text完整代码如下:

import tkinter as tk

window = tk.Tk()
window.title('my window')
window.geometry('300x300')
#密形式输入 
e = tk.Entry(window,show='*')
e.pack()
def insert_point():
    var = e.get()
    #insert索引表示在光标处插入 insert改为2.4,则表示在文本的第2行第4列插入
    t.insert('insert',var)
def insert_end():
    var = e.get()
    #end索引表示在最后插入
    t.insert('end',var)
b1 = tk.Button(window,text='insert point',width=15,
            height=2,command=insert_point)
b1.pack()
b2 = tk.Button(window,text='insert end',
               command=insert_end)
               b2.pack()
t = tk.Text(window,height=2)
t.pack()
window.mainloop()

效果图:

在这里插入图片描述

标部分属性介绍:

  • Text文本组件用于显示和处理多行文本
  • 在Tkinter的所有组件中,Text组件显得异常强大和灵活,他适用于处理多任务
  • 当创建一个Text组件的时候里面是没有内容的。为了给其插入数据,可以使用‘
    insert()以及INSERT或END索引号

3. Listbox 列表部件 :

本节例子实现功能为:如下所示,从上到下分别为Label、Button和Listbox,Button实现将Listbox中当前光标选中的内容显示在Label中

完整代码如下:

import tkinter as tk

window = tk.Tk()
window.title = 'listhbox'
window.goemetry='300x300'

var = tk.StringVar()
l = tk.Label(window,bg='blue',textvariable=var,height=2,width=15)
l.pack()

def print_selection():
    #获取鼠标选中的值
    value=lb.get(lb.curselection())
    var.set(value)  
    
b1 = tk.Button(window, text='print selection', width=15,
              height=2, command=print_selection)
b1.pack()

var2=tk.StringVar()
var2.set((11,22,33,44))
lb=tk.Listbox(window,listvariable=var2)
list_items=[1,2,3,4]
for item in list_items:
    lb.insert('end',item)
#在列表部件的第2行,加'first'
lb.insert(1,'first')
#在列表部件的第3行加 'second'
lb.insert(2,'second')
#删除第三行
lb.delete(2)
lb.pack()
window.mainloop()

效果图如下:

在这里插入图片描述

4 .Radiobutton 单选框

Radiobutton 为单选按钮,即在同一组内只能有一个按钮被选中,每当选中组内的一个按钮时,其他 的按钮
自动改为非选中状态,与其他控件不同的是,他有组的概念。

完整代码如下:

import tkinter as tk

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

var=tk.StringVar()
l=tk.Label(window,bg='yellow',width=20,text='空')
l.pack()

def print_selection():
    #config能对所有的参数进行更改,在函数定义中选择text属性进行更改
    l.config(text='you have selected '+var.get())
    
r1=tk.Radiobutton(window,text='Option A',
                    #按钮的值为 A   value='A'
                  variable=var,value='A',
                  command=print_selection)
r1.pack()
r2=tk.Radiobutton(window,text='Option B',
                  variable=var,value='B',
                  command=print_selection)
r2.pack()
r3=tk.Radiobutton(window,text='Option C',
                  variable=var,value='C',
                  command=print_selection)
r3.pack()
window.mainloop()

效果图:

在这里插入图片描述

5. Scale 尺度

可以被拉动的一个条,Scale返回的是一个数字。如下所示,当拉动时会在Label上显示具体的数字。

效果图:

在这里插入图片描述

完整代码:

import tkinter as tk

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

l=tk.Label(window,bg='yellow',width=20,text='empty')
l.pack()

#在Scale中所定义的command功能是有默认传入值的,该传入值即为Scale标签
#当前标注的值。所以在定义print_selection函数时需要定义一个参数用于表示该传入值
def print_selection(v):
    l.config(text='you have selected '+v)
    
#定义Scale的属性时,名字为label,from to为取值范围,
#from_是为了区分python中的from,Scale还有横向和竖向属性,注意为tk.横向/竖向。
#length为显示的长度,不同于Label中的width,width的单位是字符,
#和length的单位是像素。showvalue即是否显示所选中的数字,取值为0时不显示,
#为1时显示。显示的标签单位长度为tickinterval,即显示出的数字的间隔,取值为3时,
#即显示5,8,11。resolution为要保留的小数个数。
s=tk.Scale(window,label='try me',from_=5,to=11,
    #VERTICAL:竖向  HORIZONTAL:横向 
    orient=tk.HORIZONTAL,
    length=200,showvalue=0,tickinterval=3,resolution=0.01,
    command=print_selection)
s.pack()
window.mainloop()

6. Checkbutton 多选框:

与Radiobutton类似,但是Radiobutton选中一个后其他默认为不选中,但是Checkbutton类似于多选,可以选中多个。Checkbutton可以表示两种状态:on off,可以设置回调函数,每当点击此按钮时,回调函数被调用
选择不同的复选框,会有不同的文本显示

完整代码:

import tkinter as tk

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

l=tk.Label(window,bg='yellow',width=20,text='空')
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()
#并且选中时value为1,即onvalue=1,未选中时offvalue=0.
#通过var1变量才能赋值或取值 var.get() 并且选中时value为1,即onvalue=1,未选中时offvalue=0. var.set()
c1=tk.Checkbutton(window,text='Python',variable=var1,onvalue=1,offvalue=0,
                  command=print_selection)
c2=tk.Checkbutton(window,text='C++',variable=var2,onvalue=1,offvalue=0,
                  command=print_selection)
c1.pack()
c2.pack()
window.mainloop()

效果图:

在这里插入图片描述

7. Canvas 画布

规定一片区域,可以放置图片、图形等等,并且可以把位置和形状进行改变。

完整代码:

import tkinter as tk

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

# 首先定义一个Canvas
#放置一张图片,首先读取读片并存入到image_file中,
#注意10,10为放置的坐标,anchor意为锚点,即锚定的位置,可选择的属性如下所示:
#nw即为放置在左上角,图片最左上角的点放置的坐标应为所定义的10,10.
#接着create.line从坐标为(90,90)到(120,120)绘制一条直线。
#create.oval为绘制圆形,fill填充颜色。
#create.arc为绘制扇形,start和extent表示该扇形从0°到180°。
#create.rectangle为绘制一个正方形。
#此外,定义了一个button,该按钮的作用是每点击一次,rect对象,
#即为所绘制的正方形下移两格,moveit函数中0表示x方向的位移为0,2为y方向上
#的位移变化尺度。
canvas=tk.Canvas(window,bg='blue',height=150,width=200)
image_file=tk.PhotoImage(file='3.png')
image=canvas.create_image(10,10,anchor='nw',image=image_file)
x0,y0,x1,y1=90,90,120,120
line=canvas.create_line(x0,y0,x1,y1)
oval=canvas.create_oval(x0,y0,x1,y1,fill='yellow')
arc=canvas.create_arc(x0+30,y0+30,x1+30,y1+30,start=0,extent=180,fill='green')
rect=canvas.create_rectangle(100,30,100+20,30+20)
canvas.pack()

def moveit():
    #rect y轴方向上下移2个单位  x:x方向  y:y方向
    canvas.move(rect,0,2)
    
b=tk.Button(window,text='move',command=moveit).pack()
window.mainloop()

8.Menubar 菜单

菜单条,如下所示为本节将要完成的简单菜单条

在这里插入图片描述

完整代码:

import tkinter as tk

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

l=tk.Label(window,text='',bg='yellow')
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.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)
window.config(menu=menubar)
window.mainloop() 

9 .Frame 框架

底层框架,可以在上面放各种小部件

在这里插入图片描述

首先定义一个主Frame,放在window上
接着定义了第二层的两个Frame,分别放在主Frame的左右侧
在左边的Frame上放置了两个标签,右边放了一个标签

完整代码:

import tkinter as tk

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

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')
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()
window.mainloop() 

10.scroll(滚动条)

import tkinter as tk

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

text = tk.Text(window,bg='Yellow',width=100,height=10)
scroll = tk.Scrollbar(window)
scroll.pack(side=RIGHT,fill=Y)
text.pack(side=RIGHT,fill=Y)
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)
str='''fsafsfsfsd
    fdfsdafasfwef
    fsafsfasfds
    asfasdfsadfs
    fasdfsf
'''

text.insert(insert,str)
window.mainloop()

在这里插入图片描述

  • 14
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值