欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Tkinter编程应知应会(7)-创建和使用标签控件

程序员文章站 2022-07-12 22:40:27
...

还是首先看视频。

视频链接

 

 

视频中一共构建了两个标签。第一个用于显示属性变更后的状态。

 

# create a label to change state.label = Label(root,text="ColorLabel",       background="#ffffa0",foreground="#ff0000",       activebackground="#a0ffa0",activeforeground="#0000ff",       font=ftiTimes, height=1, width=20)label.grid(row=0, column=0, columnspan=4)

这个标签和前一篇文章中构建状态按钮的代码除了控件的类型由Button变为Label以外,其他完全一样。实际上这也意味着不同的控件之间有许多相同的属性,这会带来许多便利性。

 

接下来是前一篇文章中差不多一样的change_state函数和按钮。

 

 

# change state function.def change_state():    state = label.cget('state')    if state==DISABLED:        label.config(state=NORMAL)    elif state==NORMAL:        label.config(state=ACTIVE)    else:        label.config(state=DISABLED)# change state button.Button(root,text="State", command=change_state).grid(row=1, column=0, sticky=E+W)

接下来设计一个用来调整控件高度的按钮。它的处理是从1到4循环调整标签的高度。需要注意的是高度的数值是文字的行数。

 

# change label height function.def change_height():    current_height = label.cget('height')    if current_height == 4:        current_height = 1    else:        current_height = current_height + 1    label.config(height=current_height)# change state button.Button(root,text="Height", command=change_height).grid(row=1, column=1, sticky=E+W)

调整宽度的处理和调整高度处理差不多。这里宽度的单位是当前字体一个字符的宽度。

 

 

# change width.def change_width():    width = label.cget('width')    if width == 20:        width = 1    else:        width = width + 1    label.config(width=width)
# change width button.Button(root,text="Width", command=change_width).grid(row=1, column=2, sticky=E+W)

切换文字列的处理。这里使用的是修改text属性的方式。

 

 

# change label_textdef change_text():    text = label.cget('text')    if text=="ColorLabel":        label.config(text='Demo')    else:        label.config(text='ColorLabel')# change text button.Button(root,text="Text", command=change_text).grid(row=1, column=3, sticky=E+W)

构建另一个多行标签:

 

 

# create fontftTimes = Font(family='Times', size=12, weight=BOLD)
# create text variable.str_var = StringVar()str_var.set("You can limit the number of characters in each"            "line by seting this option tothedesirednumber.")
# create a label to change state.m_label = Label(root,font=ftTimes, height=3, wraplength=250,                textvariable=str_var)m_label.grid(row=2, column=0, columnspan=4)

略有不同的是标签的字符串不是通过text属性指定,而是通过一个StringVar类型的变量指定的。这种方式的好处是一旦完成设定,将来所有修改变量的结果都会直接反映到标签控件上。在实际的开发中,也可以使用另外一个已经存在的变量。这应该是这种方式的本意。

wraplength属性用来指定多行文字列折返的宽度。文档中的说明的是字符单位,但从目前作者环境的执行结果来看好像是像素单位。

underline属性可以在标签文字列中选择一个字符添加下划线。下面是向左移动下划线的处理。当下划线移动到第0个字符的时再向左移动时,下划线会出现在最后一个字符的下面。

 

 

# change underline to previous char.def prev_underline():    text = m_label.cget('text')    underline = m_label.cget('underline')    if underline == -1:        m_label.config(underline=len(text) - 1)    else:        underline = underline - 1        if underline == -1:            m_label.config(underline=len(text) - 1)        else:            m_label.config(underline=underline)# change underline to previous char button.Button(root,text='PrevChar', command=prev_underline).grid(row=3, column=0, sticky=E+W)

向右移下划线的代码和向左移差不多:

 

 

# change underline to next char.def next_underline():    text = m_label.cget('text')    underline = m_label.cget('underline')    if underline == -1:        m_label.config(underline=0)    else:        underline = underline + 1        if underline>=len(text):            m_label.config(underline=0)        else:            m_label.config(underline=underline)# change underline to next char button.Button(root,text='NextChar', command=next_underline).grid(row=3, column=1, sticky=E+W)

左移和右移下划线的感觉和移动光标差不多,接下来可以使用下面的代码删除当前字符。

 

 

# delete char.def delete_char():    text = str_var.get()    underline = m_label.cget('underline')    if underline >=0 and underline < len(text):        str_var.set(text[0 : underline] + text[underline + 1:])# change state button.Button(root,text='DeleteChar', command=delete_char).grid(row=3, column=2, sticky=E+W)

最后是调整文字对齐方式的代码,这个功能只在多行条件下可用。

 

 

# change state justify.def change_justify():    justify = m_label.cget('justify')    if justify==LEFT:        m_label.config(justify=CENTER)    elif justify==CENTER:        m_label.config(justify=RIGHT)    else:        m_label.config(justify=LEFT)# change state button.Button(root,text="Justify", command=change_justify).grid(row=3, column=3, sticky=E+W)

完整代码可以从以下链接下载:

https://github.com/xueweiguo/TkinterPrimer/blob/master/Sample/7%20label.py

 

觉得本文有帮助?请分享给更多人。

阅读更多更新文章,请扫描下面二维码,关注微信公众号【面向对象思考】

Tkinter编程应知应会(7)-创建和使用标签控件