Python 编程之Tkinter的使用01

Snip20180620_1.png
  • 原文博客链接地址
  • 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()

效果如下

Snip20180620_5.png

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

# 框体大小的可调性, 分别表示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()

显示效果

Label效果.png

部分属性介绍

  • 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()

效果样式

Python按钮.png

部分属性介绍

  • 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()

效果样式

Python输入框.png

监听输入框内文字的改变

  • 这里我们需要通过设置一下三个选项
  • 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)

效果样式

滚动Text.png

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()

效果样式

[图片上传失败...(image-fbcbfa-1543211943603)]

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()

效果样式

python单选框.png

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


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容