前面在下面这篇文章中已经学过输入文本框与文字框,这里再做一下补充。使用tkinter开发GUI程序3 -- tkinter常见控件的特征属性(第一部分)_笨小古的博客-CSDN博客
所谓的输入文本框Entry,通常是指一行的文本框,使用格式如下:
Entry(父对象, options, ...)
Entry()方法的第一个参数是父对象,表示这个文本框将建立在哪一个窗口内。下列是Entry()方法内其他常用的options参数:
width:宽,单位是字符宽。
height:高,单位是字符宽。
bg或background:背景色彩。
fg或froeground:字体色彩。
state:输入色彩,预设是NORMAL表示可以输入,DISABLE则是无法输入。
textvariable:文字变量。
show:显示输入字符,例如show='*'表示显示星号,常用在密码字段输入。
实例1:在窗口内建立标签和输入框,可以在输入框内执行输入,其中第2个文本框对象设定show='*',所以输入时所输入的字符用“*”显示。
from tkinter import *
window = Tk()
window.title("Entry-learning") # 窗口标题
lab1 = Label(window, text="Account ").grid(row=0)
lab2 = Label(window, text="Password").grid(row=1)
e1 = Entry(window) # 文本框1
e2 = Entry(window, show='*') # 文本框2
e1.grid(row=0, column=1) # 定位文本框1
e2.grid(row=1, column=1) # 定位文本框2
window.mainloop()
在上述代码中有设定grid(row=0),在没有设定column=x的情况下,系统将自动设定column=0.
实例2:对实例1进行扩充,增加Print按钮和Quit按钮,若是按Print按钮,可以在Python Shell窗口看到所输入的Account和Password。若是按Quit按钮,可以看到在Python Shell窗口执行的程序结束,但是屏幕上仍可以看到此窗口在执行。
from tkinter import *
def printInfo(): # 打印输入信息
print("Account: %s\nPassword: %s" % (e1.get(), e2.get()))
window = Tk()
window.title("Entry-learning") # 窗口标题
lab1 = Label(window, text="Account ").grid(row=0)
lab2 = Label(window, text="Password").grid(row=1)
e1 = Entry(window) # 文本框1
e2 = Entry(window, show='*') # 文本框2
e1.grid(row=0, column=1) # 定位文本框1
e2.grid(row=1, column=1) # 定位文本框2
btn1 = Button(window, text="Print", command=printInfo)
btn1.grid(row=2, column=0)
btn2 = Button(window, text="Quit", command=window.quit)
btn2.grid(row=2, column=1)
window.mainloop()
从上述执行结果来看,Print按钮并没有对齐上方的标签和文本框,可以在grid()方法内增加sticky参数,同时将此参数设为W,即可靠左对齐字段。另外,也可以使用pady设定对象上下的间距,padx则可以设定左右的间距。
实例3:使用sticky=W参数和pady=10参数,对上述程序进行整改。
from tkinter import *
def printInfo(): # 打印输入信息
print("Account: %s\nPassword: %s" % (e1.get(), e2.get()))
window = Tk()
window.title("Entry-learning") # 窗口标题
lab1 = Label(window, text="Account ").grid(row=0)
lab2 = Label(window, text="Password").grid(row=1)
e1 = Entry(window) # 文本框1
e2 = Entry(window, show='*') # 文本框2
e1.grid(row=0, column=1) # 定位文本框1
e2.grid(row=1, column=1) # 定位文本框2
btn1 = Button(window, text="Print", command=printInfo)
# sticky=W可以设定对象与上面的Label切齐, pady设定上下间距是10
btn1.grid(row=2, column=0, sticky=W, pady=10)
btn2 = Button(window, text="Quit", command=window.quit)
# sticky=W可以设定对象与上面的Entry切齐, pady设定上下间距是10
btn2.grid(row=2, column=1, sticky=W, pady=10)
window.mainloop()
在Entry插入字符串:在tkinter模块的应用中可以使用insert(index,s)方法插入字符串,s是所插入的字符串,字符串会插入在index位置前。程序设计时可以使用这个方法为输入文本框建立默认的文字,通常会将它放在Entry()方法建立完输入框后 。
扩充实例3,为程序建立默认的Account为kevin,Password为pwd。
在Entry()方法后加上下面代码即可。
e1.insert(1,"Kevin") # 预设文本框1内容
e2.insert(1,"pwd") # 预设文本框2内容
在Entry删除字符串:在tkinter模块的应用中可以使用delete(first,last=None)方法删除Entry内的字符串,如果要删除整个字符串可以使用delete(0,END)。
实例4:继续扩充,当按Print按钮后,清空输入框Entry的内容。
from tkinter import *
def printInfo(): # 打印输入信息
print("Account: %s\nPassword: %s" % (e1.get(), e2.get()))
e1.delete(0, END) # 删除文本框1
e2.delete(0, END) # 删除文本框2
window = Tk()
window.title("Entry-learning") # 窗口标题
lab1 = Label(window, text="Account ").grid(row=0)
lab2 = Label(window, text="Password").grid(row=1)
e1 = Entry(window) # 文本框1
e2 = Entry(window, show='*') # 文本框2
e1.insert(1, "Kevin") # 预设文本框1内容
e2.insert(1, "pwd") # 预设文本框2内容
e1.grid(row=0, column=1) # 定位文本框1
e2.grid(row=1, column=1) # 定位文本框2
btn1 = Button(window, text="Print", command=printInfo)
# sticky=W可以设定对象与上面的Label切齐, pady设定上下间距是10
btn1.grid(row=2, column=0, sticky=W, pady=10)
btn2 = Button(window, text="Quit", command=window.quit)
# sticky=W可以设定对象与上面的Entry切齐, pady设定上下间距是10
btn2.grid(row=2, column=1, sticky=W, pady=10)
window.mainloop()
文字框可以想成是Entry的扩充,可以在此输入多行数据,甚至可以使用此区域建立简单的文字编辑程序或是利用它设计网页浏览程序。使用格式如下:
Text(父对象,options,...)
Text()方法的第一个参数是父对象,表示这个文字区域将建立在哪一个窗口内。下列是Text()方法内的其他常用的options参数:
width:宽,单位是字符宽。
height:高,单位是字符宽。
bg或background:背景色彩。
fg或froeground:字体色彩。
state:输入状态,预设是NORMAL表示可以输入,DISABLE则是无法输入。
xcrollbarcommand:水平滚动条的链接。
ycrollbarcommand:垂直滚动条的链接。
wrap:这是换行参数,预设是CHAR,如果输入数据超出行宽度时,必要时会将单词依拼音拆成不同行输出。如果时WORD则不会将单词拆成不同行输出,如果是NONE,则不换行,这时将有水平滚动条。
实例5:文本框的基本应用。
from tkinter import *
window = Tk()
window.title("xiaogu")
text = Text(window, height=2, width=30)
text.insert(END, "万物皆有裂痕\n那是光照进来的地方")
text.pack()
window.mainloop()
实例6:插入字符串较多时,发现文字区域不够使用,造成部分字符串无法显示。
from tkinter import *
window = Tk()
window.title("xiaogu") # 窗口标题
text = Text(window, height=2, width=30)
text.insert(END, "我怀念\n一个人的极境旅行")
str = """2016年12月,我一个人订了机票和船票,
开始我的南极旅行,飞机经杜拜再往阿根廷的乌斯怀雅,
在此我登上邮轮开始我的南极之旅"""
text.insert(END, str)
text.pack()
window.mainloop()
由上述执行结果可以发现字符串str许多内容没有显示,此时可以增加文字区域Text的行数,另一种方法是使用滚动条,其实这也是比较高明的方法。
对前面的实例而言,窗口内只有文字区域Text,所以滚动条在设计时,可以只有一个参数,就是窗口对象,上述实例均使用window当作窗口对象,此时可以用下列指令设计滚动条。
scrollbar=Scrollbar(window) # scrollbar是滚动条对象
实例7:对实例6扩充,增加滚动条功能。
from tkinter import *
window = Tk()
window.title("xiaogu")
scrollbar = Scrollbar(window) # 卷轴对象
text = Text(window, height=2, width=30)
scrollbar.pack(side=RIGHT, fill=Y) # 靠右安置与父对象高度相同
text.pack(side=LEFT, fill=Y) # 靠左安置与父对象高度相同
scrollbar.config(command=text.yview)
text.config(yscrollcommand=scrollbar.set)
text.insert(END, "我怀念\n一个人的极境旅行")
str = """2016年12月,我一个人订了机票和船票,
开始我的南极旅行,飞机经杜拜再往阿根廷的乌斯怀雅,
在此我登上邮轮开始我的南极之旅"""
text.insert(END, str)
window.mainloop()
fill=Y主要是设定此对象高度与父对象相同,scrollbar.config()方法主要是为scrollbar对象设定选择性参数内容,此例是设定command参数,它的用法与下列概念相同。
scrollbar["command"] = text.yview # 设定执行方法
也就是当移动滚动条时,会去执行所指定的方法,此例是执行yview()方法。text.config(yscrollbarcommand=scrollbar.set),表示将文字区域与滚动条链接。