“按钮”应该是GUI应用中使用最广泛的控件了吧,Python tkinter中的“按钮”是Button类。
- 1.1 构造函数:
tk.Button(parent, option, ...)
属性(option)包括“文本(text)”、“字体(font)”、“背景色(bg)”等。
- 1.2 常用功能:
**grid(row=0, column=0):
随着主窗体中的控件越来越多,就要为每个控件指定所在的行(‘row’)和列(‘column’)。还可以通过‘columnspan’和‘rowspan’指定控件占用的列数和行数。
**‘command’属性:
按钮最核心的内容,自然是当按钮被按下的时候要做出的响应,也就是指定被调用的函数。
这里通过‘command’属性指定【按钮-1】被按下的时候,调用函数‘bt1_clicked(...)’。
bt1['command'] = lambda:bt1_clicked(...)
**‘state’属性:
bt1['state'] = tk.DISABLED
按钮的‘state’属性控制按钮是否可用,默认值为‘tk.NORMAL’。
如果设置为’tk.DISABLED' ,则按钮不响应鼠标点击事件且文本会变成灰色——这样就可以控制按钮在某些条件满足以后才可用。
**事件绑定:
将【回车键】绑定到按钮‘bt1’上。
win.bind('<Return>', lambda func:bt1.invoke())
输入框
“输入框”控件用于输入单行文本,Python tkinter中的“输入框”控件是tk.Entry类。
- 2.1 构造函数:
tk.Entry(parent, option, ...)
属性(option)包括“字体(font)”、“背景色(bg)”、“前景色(fg)”等。
[width]:输入框可以容纳的字符数。
- 2.2 常用功能:
**‘show’属性:
这个属性在输入框作为密码输入框时非常有用,比如设置['show']='$',则输入框中的内容都显示为'$'。
**get()函数:
返回输入框中的内容(字符串)。
**delete(first, last=None)函数:
删除输入框中索引[first, last)范围内的内容。
示例点击【按钮-1】(或点击【回车键】),将输入框中的内容显示在上面的标签中。
import tkinter as tk
from tkinter import font
def bt1_clicked(lbl, ent1):
lbl['text'] = ent1.get()
ent1.delete(0, tk.END)
if __name__ == '__main__':
win = tk.Tk()
win.title('*** Python tkinter ****')
win.geometry('600x300 600 100')
win.resizable(width=True, height=False)
lbl_font = font.Font(family='Courier', name='lbx_font', size=20, weight='bold', slant='italic')
lbl1 = tk.Label(win, font=lbl_font, text='标签-1', anchor=tk.CENTER, bg='#0f0')
lbl1.grid(ipadx=10, ipady=10, padx=20, pady=20, row=0, column=0)
lbl1['text'] = '你好'
ent1 = tk.Entry(win, width=25, font=lbl_font, bg='yellow', fg='red')
ent1.grid(row=1, column=0, padx=10, ipadx=10, ipady=10)
#ent1['state'] = tk.DISABLED
ent1['show'] = '$'
bt_font = font.Font(family='Arial', name='btx_font', size=20, weight='bold')
bt1 = tk.Button(win, text='按钮-1', font=bt_font, bg='cyan')
bt1['command'] = lambda:bt1_clicked(lbl1, ent1)
#bt1['state'] = tk.DISABLED
bt1.grid(row=1, column=1, ipadx=10, ipady=10, padx=10, pady=10)
win.bind('<Return>', lambda func:bt1.invoke()) #把按钮和回车键绑定
win.mainloop()