Python 编程之Tkinter的使用01

  • 原文博客链接地址
  • Python提供了多个图形开发界面的库,几个常用Python GUI库如下:
  • TkinterTkinter模块(Tk 接口)是Python的标准 Tk GUI 工具包的接口.TkTkinter可以在大多数的Unix平台下使用, 同样可以应用在WindowsMacintosh系统里。Tk8.0的后续版本可以实现本地窗口风格,并良好地运行在绝大多数平台中。
  • wxPythonwxPython是一款开源软件,是Python语言的一套优秀的GUI图形库,允许Python程序员很方便的创建完整的、功能健全的GUI用户界面。
  • JythonJython程序可以和Java无缝集成。除了一些标准模块,Jython使用Java的模块。Jython 几乎拥有标准的Python中不依赖于C 语言的全部模块。比如,Jython的用户界面将使用 SwingAWT或者SWTJython 可以被动态或静态地编译成Java字节码

一. Tkinter介绍

  • TkinterPython的标准GUI库。Python使用 Tkinter可以快速的创建GUI应用程序。
  • 由于Tkinter是内置到python的安装包中、只要安装好Python之后就能import Tkinter库、而且IDLE也是用Tkinter编写而成、对于简单的图形界面Tkinter还是能应付自如

需要注意: Python3.x版本使用的库名为 tkinter,即首写字母T为小写

import tkinter
复制代码
  • 创建一个GUI程序
    • 1、导入tkinter模块
    • 2、创建控件
    • 3、指定这个控件的master,即这个控件属于哪一个
    • 4、告诉GM(geometry manager)有一个控件产生了

1. 主窗口

  • iOS中每一个APP都有一个主窗口window, 该window就是所有视图嘴地城最基础的视图View
  • Python中童谣也会有一个主窗口, 下面看一下tkinter生成主窗口的方法
# 主窗口
import tkinter

# 创建主窗口
window = tkinter.Tk()

# 设置标题
window.title('Titanjun')

# 设置窗口大小
window.geometry('400x400')

# 进入消息循环
window.mainloop()
复制代码

效果如下

主窗口除了上述方法之外还有以下方法

# 框体大小的可调性, 分别表示x, y方向的可变性
window.resizable(0, 0)

# 退出
window.quit()

# 刷新页面
window.update()
复制代码

二. Tkinter组件

  • Tkinter的提供各种控件,如按钮,标签和文本框,一个GUI应用程序中使用, 这些控件通常被称为控件或者部件
  • 目前有15种Tkinter的部件, 下面是对这些部件以及一个简短的介绍
控件描述
Label标签控件, 可以显示文本和位图
Button按钮控件, 在程序中显示按钮
Entry输入控件;用于显示简单的文本内容
Checkbutton多选框控件;用于在程序中提供多项选择框
Frame框架控件;在屏幕上显示一个矩形区域,多用来作为容器
Canvas画布控件;显示图形元素如线条或文本
Listbox列表框控件;在Listbox窗口小部件是用来显示一个字符串列表给用户
Menubutton菜单按钮控件,由于显示菜单项。
Menu菜单控件;显示菜单栏,下拉菜单和弹出菜单
Message消息控件;用来显示多行文本,与label比较类似
Radiobutton单选按钮控件;显示一个单选的按钮状态
Scale范围控件;显示一个数值刻度,为输出限定范围的数字区间
Scrollbar滚动条控件,当内容超过可视化区域时使用,如列表框
Text文本控件;用于显示多行文本
Spinbox输入控件;与Entry类似,但是可以指定输入范围值
PanedWindow一个窗口布局管理的插件,可以包含一个或者多个子控件
LabelFrame一个简单的容器控件, 常用与复杂的窗口布局
tkMessageBox用于显示你应用程序的消息框

如果之前做过H5前端开发或者iOS等页面相关开发工作的, 应该能到, 其实这些组件和其他开发语言提供的组件功能相似, 属性也类似, 下面我们先看一下一些通用的属性介绍

属性值属性描述
bg控件的背景颜色
fg组件中的字体颜色
font设置文本的字体样式和字号
height设置控件高度
width设置控件宽度
bd设置控件边框的大小, 默认2个像素
relief设置边框样式, 有falt, sunken, raised, groove, ridge, 默认flat
text设置文本内容
anchor瞄点, 控制文本的位置, 默认居中(可选: n北, e东, s南, w西, center居中, ne se, sw, nw)
justify显示多行文本的时候,设置不同行之间的对齐方式(left, right, center)
wraplength根据宽度限制控件每行显示的字符的数量
underline下划线, 默认没有; 取值就是带下划线的字符串索引,为 0 时,第一个字符带下划线
padx在x轴方向上的内边距(padding),是指控件的内容与控件边缘的距离
pady在y轴方向上的内边距(padding)

1. Label控件

  • Label控件用以显示文字和图片.
  • Label通常被用来展示信息, 而非与用户交互
  • Label也可以绑定点击等事件, 只是通常不这么用
label = tkinter.Label(window,
                      text="我是一只小鸭子",
                      bg='#999999',
                      fg='white',
                      font=('黑体', 13),
                      justify='center',
                      height=5,
                      width=30,
                      anchor='n',
                      # wraplength=30
                      underline=3,
                      bd=3,
                      relief='flat'
                      )
#显示出来
label.pack()
复制代码

显示效果

部分属性介绍

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

2. Button控件

  • Button控件是一个标准的Tkinter小部件,用于各种按钮, 如果用鼠标点击按钮,可能会开始一些操作
  • Button可以显示文本和图片
  • 按钮只能以单一字体显示文本, 文本可以跨越多行
# 设置标题
window.title('Titanjun')

# 设置窗口大小
window.geometry('400x400')

# 创建按钮
button1 = tkinter.Button(window,
                         text='按钮1',
                         bg='orange',
                         height=3,
                         width=20,
                         bd=3,
                         relief='sunken',
                         activebackground='orange',
                         activeforeground='white',
                         command=action1
                         )
button1.pack()


button2 = tkinter.Button(window, text='Titanjun', height=3, command=window.quit())
button2.pack()

# 进入消息循环
window.mainloop()
复制代码

效果样式

部分属性介绍

  • activebackground: 当鼠标放上去时,按钮的背景色
  • activeforeground: 当鼠标放上去时,按钮的文本颜色
  • highlightcolor: 要高亮的颜色
  • image: 按钮上要显示的图片
  • state: 设置按钮组件状态,可选的有(normal(默认), active, disabled)
  • command: 按钮的绑定函数方法, 接受一个函数名,注意函数名不要加引号

3. Entry输入

输入控件, 用于显示简单的文本内容, 和iOS中的UITextField一样, 示例如下

vari = tkinter.Variable()
entry = tkinter.Entry(window, textvariable=vari)
entry.pack()

# 设置值
vari.set('very good')
# 取值
print(vari.get())
print(entry.get())

# 只读输入框
vari2 = tkinter.Variable()
entry2 = tkinter.Entry(window, textvariable=vari2, state='disabled')
entry2.pack()

# 设置值
vari2.set('very bad')
print(vari2.get())

# 密码输入框, 无论输入什么都显示密文
vari3 = tkinter.Variable()
entry3 = tkinter.Entry(window, textvariable=vari3, show='@', bg='red', fg='white')
entry3.pack()
复制代码

效果样式

监听输入框内文字的改变

  • 这里我们需要通过设置一下三个选项
  • validate: 设置输入框的监听状态
    • focus:当Entry组件获得或失去焦点的时候验证
    • focusin: 当Entry组件获得焦点的时候验证
    • focusout: 当Entry组件失去焦点的时候验证
    • key:当输入框被编辑的时候验证
    • all: 当出现上边任何一种情况的时候验证
  • validatecommand: 接受一个判断输入框内的文字是否符合要求的函数, 该函数只能返回 True 或 False 表示验证的结果
  • invalidcommand: 指定的函数只有在validatecommand的返回值为False的时候才被调用
# 主窗口
import tkinter

# 验证输入的文字
def varileText():
    text = entry4.get()
    if text == '1':
        print('对喽')
        return True
    print('错漏')
    return False

#
def testInvaild():
    print('invaildCommanf被调用')
    return True

# 创建主窗口
window = tkinter.Tk()
# 设置标题
window.title('Titanjun')
# 设置窗口大小
window.geometry('400x400')


# 验证输入的内容是否符合要求
vari4 = tkinter.Variable()
entry4 = tkinter.Entry(window, textvariable=vari4, validate='key', validatecommand=varileText, invalidcommand=testInvaild)
entry4.pack()

# 进入消息循环
window.mainloop()
复制代码

4. Text多行文本

  • Text文本组件用于显示和处理多行文本。
  • Tkinter的所有组件中,Text组件显得异常强大和灵活,它适用于处理多任务
  • 当创建一个Text组件的时候里面是没有内容的。为了给其插入内容,可以使用insert()以及INSERTEND索引号
4-1. 插入文本/控件/图片
text = Text(window, bg='yellow', width=40, height=10)
#INSERT索引表示在光标处插入
text.insert(INSERT,'I Love')
#END索引号表示在最后插入
text.insert(END,' you')
text.pack()

def show():
    print('好了, 你赢了')

# text还可以插入按钮  图片等
b1 = Button(text, text='点我点我', command=show)
# 在text创建组件的命令
text.window_create(INSERT, window=b1)
复制代码
4-2. 索引值
  • Indexes(索引)是用来指向Text组件中文本的位置,跟python的序列索引一样,Text的组件索引也是对应实际字符之间的位置
  • 值得注意的是: 行号以1开始 列号以0开始
  • 例如: 2.4表示第2行第4列的字符
from tkinter import *
root = Tk()
text1=Text(root,width=30,height=3)
text1.insert(INSERT,'index的练习')
#1.2到1.5的范围之间
print(text1.get(1.2,1.5))
复制代码
4-3. Text中的Tags

Tags通常用于改变Text组件中内容的样式和功能,你可以修改文本的字体,尺寸和颜色,另外Tags还允许你将文本、嵌入的组件和图片与键盘相关联,除了user-defined tags(用户自定义的Tags)

text.insert(INSERT, '自定义标签的名字')

#第一个参数为自定义标签的名字
#第二个参数为设置的起始位置,第三个参数为结束位置
#第四个参数为另一个位置
text.tag_add('tag1', '1.7', '1.12', '1.14')

#用tag_config函数来设置标签的属性(这里不要用简写, 否则报错)
text.tag_config('tag1', font=17, background='blue', foreground='red')
# text.tag_config('tag1', bg='yellow', fg='red')
#新的tag会覆盖旧的tag
复制代码
4-4. 带滚动条
text = Text(window, bg='yellow', width=100, height=10)
# 添加右侧滚动条
scroll = Scrollbar()
# side放到窗体的那一侧   fill填充
scroll.pack(side=RIGHT, fill=Y)
text.pack(side=RIGHT, fill=Y)
# 两者关联
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)

str = '''致橡树--舒婷

..........此处省略N个字...........

'''

text.insert(INSERT, str)
复制代码

效果样式

5. Checkbutton多选按钮

  • Checkbutton可以表示两种状态:OnOff,可以设置回调函数,每当点击此按钮时回调函数被调用
  • 这里有一个示例: 选择不同的复选框, 会有不同的文本显示
def update():
    message = ''
    if tag1.get() == True:
        message += 'titan \n'
    if tag2.get() == True:
        message += 'jun \n'
    if tag3.get() == True:
        message += 'coder \n'

    #清除text中的所有内容
    text.delete(0.0, END)
    # 插入新的文本内容
    text.insert(INSERT, message)

# 要绑定的变量
tag1 = BooleanVar()
check1 = Checkbutton(window, text = 'Titan', variable = tag1, command = update)
check1.pack()

tag2 = BooleanVar()
check2 = Checkbutton(window, text = 'Juned', variable = tag2, command = update)
check2.pack()

tag3 = BooleanVar()
check3 = Checkbutton(window, text = 'Coder', variable = tag3, command = update)
check3.pack()


text = Text(window, bg = 'orange', width = 50, height = 5)
text.pack()
复制代码

效果样式

6. Radiobutton单选框

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

def selectorAction():
    print(tag.get())

# 一组单选框要绑定同一个变量
tag = IntVar()
radio1 = Radiobutton(window, text = 'one', value = 23, variable = tag, command = selectorAction)
radio1.pack()
radio2 = Radiobutton(window, text = 'two', value = 32, variable = tag, command = selectorAction)
radio2.pack()
radio3 = Radiobutton(window, text = 'ten', value = 10, variable = tag, command = selectorAction)
radio3.pack()
复制代码

效果样式

未完待续, 后期会继续更新其他控件的相关介绍..........


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值