最近做一个小项目,又将tkinter库重新温习了一遍。tk其实并不如很多网友说的那样一文不值,它确实不如QT,Wxpython功能强大,但是这也意味着它比较简单。当我们需要做一个小工具,或者以功能为主不注重界面美观的时候,tkinter是我们的首选。
python2与python3关于tkinter有不少不同之处,比如引入包的时候,2需要大写,3却是小写。在这里,我是用python3.6开发的。
root = Tk()
root.title("hello world")
root.minsize(300, 300)
root.mainloop()
这时候最简单的一个页面就出来了。
这时候我们往里面添加一些常用控件,在这里我们介绍Label(标签)、Button(按钮)、Entry(输入框)、Text(文本框)这几个使用频率最高的控件。
我们想添加一个输入框,并且输入框旁边还有输入两个字,该如何做到呢?
label1 = Label(root, text = '输入', background = 'red')
entry1 = Entry(root)
这两句话是对标签参数的设置,现在我们运行一下。
我们发现,界面还是这样。为什么设置了控件,可是控件依旧不显示呢?这是因为虽有了设置控件的代码,却还没有放置控件的代码。说到这里,就不得不提,tkinter的布局管理了。
tkinter的布局管理有三种,第一种是用pack根据标签生成的顺序先后自动布局,灵活性比较小,但是最简单。第二种是把整个界面精细化成网格,以行列为坐标可以精确到每一个位置,比较灵活。第三种不建议使用,就不介绍了,这里我们使用第二种。
label1 = Label(root, text = '输入', background = 'red')
label1.grid(row = 0)
entry1 = Entry(root)
entry1.grid(row = 1 , column = 1)
S{)W)@9BZ3WIOS`]`KAX9B7.png
现在就好了。
我们现在在按照同样的原理,添加一个按钮和一个文本框。
button1 = Button(root, text = '确定', background = 'red')
button1.grid(row = 2, column = 1)
text1 = Text(root)
text1.grid(row = 3, column = 1)
好了,接下来我们想实现一个功能,在输入框中输入数据,会在文本框里实时显示,同时当我们换另一种数据显示的时候,会实时更新。
from tkinter import *
import tkinter
root = Tk()
root.title("hello world")
root.minsize(700, 400)
def inquire_text(event = None):
var = e3.get()
text1.delete(0.0, tkinter.END)
text1.insert(INSERT, var)
label1 = Label(root, text = '输入', background = 'red')
label1.grid(row = 0)
e3 = StringVar()
en3 = Entry(root, validate='key', textvariable=e3)
en3.grid(row = 8, column = 3)
en3.bind('<Return>', inquire_text)
button1 = Button(root, text = '确定', background = 'red')
button1.grid(row = 2, column = 1)
text1 = Text(root)
text1.grid(row = 3, column = 1)
root.mainloop()
整体代码如上,可以理解,输入框的值传给了e3, e3通过bind这个函数绑定了另一个函数,这个函数叫做inquier_text,是我在上面自定义的一个函数。其中delete负责更新,insert负责插入数据。
有时候如果数据特别多,我们一页展示不完,想有个滚动条,这就要用到高级文本框,scrolledtext。
即将之前对文本框的设置替换为这句话
text1 = scrolledtext.ScrolledText(root, wrap=tk.WORD)
text1.grid(row = 10, column = 3)
记得在前面的包别忘了引入:
from tkinter import scrolledtext