话不多说。
代码片:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
# -*- coding: utf8 -*- from tkinter import * ##################################### ###--------------tk---------------- class app: def __init__( self ,master): frame = frame(master) frame.pack(expand = 1 ) self .e1 = entry(frame) self .e1.pack() self .e2 = entry(frame) self .e2.pack() self .e1.bind( "<return>" ,handleradaptor(focus_cg,e2 = self .e2)) #tk类不能直接传递参数,需要lambda def focus_cg(event,e2): e2.focus_set() #焦点移到e2 def handleradaptor(fun, * * kwds): #事件处理函数的适配器,相当于中介,那个event是从那里来的呢,我也纳闷,这也许就是python的伟大之处吧 return lambda event,fun = fun,kwds = kwds: fun(event, * * kwds) if __name__ = = '__main__' : root = tk() app = app(root) root.mainloop() |
tkinter 事件绑定的,参数不能直接传递。全局变量可以使用。
不使用全局变量的方法:
1
|
self .btn = button(frame,text = u 'ok' , command = lambda : handler(v = 123 )) |
事件绑定型:
1
2
3
4
5
6
|
self .e1.bind( "<return>" ,handleradaptor(focus_cg,e2 = self .e2)) #tk类不能直接传递参数,需要lambda def focus_cg(event,e2): e2.focus_set() #焦点移到e2 def handleradaptor(fun, * * kwds): #事件处理函数的适配器,相当于中介,那个event是从那里来的呢,我也纳闷,这也许就是python的伟大之处吧 return lambda event,fun = fun,kwds = kwds: fun(event, * * kwds) |
补充:python之tkinter 文本框entry的基本应用
entry简介
所谓的文本框entry,通常是指单行的文本框,在gui程序设计中,这是用于输入的最基本控件,我们可以使用它输入单行字符串,如果所输入的字符串长度大于文本框的宽度,所输入的文字会自动隐藏,造成部分内容无法显示,碰到这种状况时可以使用箭头键移动鼠标光标到看不到的区域。
文本框限定的是单行文字,如果想要处理多行文字,需要使用控件中的text
它的语法格式:
entry(父对象, options, ...)
第一个参数:父对象,表示这个文本框将建立在哪一个窗口内
第二个参数:options,参数如下
参数 | 含义 |
---|---|
borderwidth | 边界宽度 默认是两个像素 |
bd | 边界宽度 默认是两个像素 |
background | 背景色彩 |
bg | 背景色彩 |
command | 当用户更改内容时,会自动执行此函数 |
cursor | 当鼠标光标移至按钮上时的形状 |
exportselection | 如果执行选取时,所选取的字符串会自动输出至剪贴板 如果想要避免,可以设置exportselection=0 |
foreground | 前景色彩 |
fg | 前景色彩 |
font | 字形 |
height | 高,单位是字符高 |
highlightbackground | 当功能按钮获取焦点时的背景颜色 |
highlightcolor | 当工人按钮取得焦点时的颜色 |
justify | 当有多行文字时,最后一行文字的对齐方式 |
relief | 可由此控制文字外框 默认是relief=flat |
selectbackground | 被选取字符串的背景色彩 |
selectborderwidth | 选取字符串时的边界宽度 预设是1 |
selectfroeground | 被选取字符串的前景色彩 |
show | 显示输入字符 例如,show='*'表示显示星号,常用于输入密码字段 |
state | 输入状态 默认是normal表示可以输入,disable则表示无法输入 |
textvariable | 文字变量 |
width | 宽,单位是字符宽 |
xscrollcommand | 在x轴使用滚动条 |
entry的基本应用
例子:建立标签和文本框,输入姓名和地址
1
2
3
4
5
6
7
8
9
10
11
|
import tkinter root = tkinter.tk() label1 = tkinter.label(root, text = "姓名 :" ) label2 = tkinter.label(root, text = "住址 :" ) label1.grid(row = 0 ) label2.grid(row = 1 ) entry1 = tkinter.entry(root) entry2 = tkinter.entry(root) entry1.grid(row = 0 , column = 1 ) entry2.grid(row = 1 , column = 1 ) root.mainloop() |
运行结果:
设置grid(row=0),在没有设置column=x的情况下,系统自动设置column=0
使用show 参数隐藏输入的字符
其实entry控件具有可以使用show参数设置隐藏输入字符的特性,所以也常被应用在用于输入密码的时候
例子:密码的输入,用*隐藏
1
2
3
4
5
6
7
8
9
10
11
|
import tkinter root = tkinter.tk() label1 = tkinter.label(root, text = "账号 :" ) label2 = tkinter.label(root, text = "密码 :" ) label1.grid(row = 0 ) label2.grid(row = 1 ) entry1 = tkinter.entry(root) entry2 = tkinter.entry(root, show = "*" ) entry1.grid(row = 0 , column = 1 ) entry2.grid(row = 1 , column = 1 ) root.mainloop() |
运行结果:
entry 的 get 方法
entry 有一个get()方法,可以利用这个方法来获取目前entry 的字符串内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import tkinter def getvalue(): print ( "账号为{}, 密码为{}" . format (entry1.get(), entry2.get())) root = tkinter.tk() label1 = tkinter.label(root, text = "账号 :" ) label2 = tkinter.label(root, text = "密码 :" ) label1.grid(row = 0 ) label2.grid(row = 1 ) entry1 = tkinter.entry(root) entry2 = tkinter.entry(root, show = "*" ) entry1.grid(row = 0 , column = 1 ) entry2.grid(row = 1 , column = 1 ) buttonlogin = tkinter.button(root, text = "登录" , command = getvalue) buttonexit = tkinter.button(root, text = "退出" , command = root.quit) buttonlogin.grid(row = 2 , column = 0 , sticky = tkinter.w, padx = 20 ) buttonexit.grid(row = 2 , column = 1 ) root.mainloop() |
运行结果:
我们输入账号密码,点击登录
1
|
账号为 123456 , 密码为 132456 |
控制台就出现了我们所需要的的信息
entry 的 insert() 方法
在设计gui程序时,常常需要在建立entry的文本框内默认建立输入文字,在widget控件中可以使用insert(index, s)方法插入字符串
其中s是所插入的字符串,字符串会插在index位置
例子:建立默认文字内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
import tkinter def getvalue(): print ( "账号为{}, 密码为{}" . format (entry1.get(), entry2.get())) root = tkinter.tk() label1 = tkinter.label(root, text = "账号 :" ) label2 = tkinter.label(root, text = "密码 :" ) label1.grid(row = 0 ) label2.grid(row = 1 ) entry1 = tkinter.entry(root) entry2 = tkinter.entry(root, show = "*" ) # 默认账号内容 entry1.insert( 0 , "123456" ) # 默认密码内容 entry2.insert( 0 , "123456" ) entry1.grid(row = 0 , column = 1 ) entry2.grid(row = 1 , column = 1 ) buttonlogin = tkinter.button(root, text = "登录" , command = getvalue) buttonexit = tkinter.button(root, text = "退出" , command = root.quit) buttonlogin.grid(row = 2 , column = 0 , sticky = tkinter.w, padx = 20 ) buttonexit.grid(row = 2 , column = 1 ) root.mainloop() |
运行结果:
entry 的 delete() 方法
在tkinter模块的应用中可以使用delete(first, last=none)方法删除entry内的从第first字符到last-1字符间的字符串,如果要删除整个字符串可以使用delete(0, end)
如果删除倒数第一个,我们可以用len()方法判断长度,然后长度减一就行
例子:单击删除按钮清空文本框内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import tkinter def getvalue(): print ( "账号为{}, 密码为{}" . format (entry1.get(), entry2.get())) # 删除的方法 def deletevalue(): entry1.delete( 0 , tkinter.end) entry2.delete( 0 , tkinter.end) root = tkinter.tk() label1 = tkinter.label(root, text = "账号 :" ) label2 = tkinter.label(root, text = "密码 :" ) label1.grid(row = 0 ) label2.grid(row = 1 ) entry1 = tkinter.entry(root) entry2 = tkinter.entry(root, show = "*" ) # 默认账号内容 entry1.insert( 0 , "123456" ) # 默认密码内容 entry2.insert( 0 , "123456" ) entry1.grid(row = 0 , column = 1 ) entry2.grid(row = 1 , column = 1 ) buttonlogin = tkinter.button(root, text = "登录" , command = getvalue) # 调用删除的方法 buttonexit = tkinter.button(root, text = "删除" , command = deletevalue) buttonlogin.grid(row = 2 , column = 0 , sticky = tkinter.w, padx = 20 ) buttonexit.grid(row = 2 , column = 1 ) root.mainloop() |
运行结果:
例子:删除最后一个
1
2
3
4
|
def deletevalue(): len_entry = len (entry1.get()) entry1.delete(len_entry - 1 ) entry2.delete( 0 , tkinter.end) |
运行结果:
如果只有一个参数的话,那这个参数将是first,如不是last,len_entry - 1相当于是从到底第一个开始删除,一直到末尾
计算数学表达式使用 eval()
python有一个非常好用的计算数学表达式的函数eval
该函数可以直接传回此数学表达式的计算结果,它的语法格式:
1
2
|
"""expression为字符串""" result = eval (expression) |
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
import tkinter def getvalue(): try : value = eval (entry.get()) label2.configure(text = "计算结果为:" + str (value)) except : pass root = tkinter.tk() label = tkinter.label(root, text = "请输入数学表达式:" ) label.pack(anchor = tkinter.w) entry = tkinter.entry(root) entry.pack(pady = 5 ) label2 = tkinter.label(root) label2.pack() button = tkinter.button(root, text = "计算" , command = getvalue) button.pack(pady = 5 ) root.mainloop() |
运行结果:
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/bill_zhou2008/article/details/90707396