基本的框架布局好,就可以添加控件了,该实例涉及控件:输入框、透明背景图片、按钮、单选框、树形菜单(作为表格使用)、多行文本框(及文本框中添加控件)、标签、下拉菜单、滚动条
一、输入框
1、监控编辑状态,实现每输入一个字符时,都可以触发相应事件。
这个处理其实和输入框无关,而是通过监控,输入框绑定的StringVar
类型对象值变化,来实现。比如下面这个Entry_query
输入框,绑定了entry_var
对象
entry_var = tk.StringVar()
Entry_query = ttk.Entry(root, textvariable=entry_var)
监控entry_var
对象的值变化可以这样写
entry_var.trace("w", lambda name, index, mode, arg = entry_var: onEditChange(arg))
# 这样只要entry_var的值发生变化,就会执行onEditChange
2、监控输入框是否按下回车键。
只要绑定事件<Return>
就可以了
Entry_query.bind("<Return>", onEditEnter)
# 按下回车,就会执行onEditEnter
自动显示、隐藏清空按钮效果演示
二、按钮
1、动态创建按钮,并动态传参,这个之前有单独发一篇文章,要了解的可以去看看
https://blog.csdn.net/wosind/article/details/100071232
2、配合动态创建按钮,就可以把所有按钮处理的业务,集中组织到一个方法中
三、树形菜单(作为表格形态)
1、两个和表格相关的事件绑定
<<TreeviewSelect>>
:菜单项切换,对应表格就是行的选中。
<Double-Button-1>
:双击事件,可以作为行双击
2、实现点击标题,进行排序或其他业务逻辑。类似按钮动态传参,heading
创建的时候绑定一个匿名函数
tree_qlist.heading('', text='',command=lambda arg=x['col']: onListHeadClicked(arg))
四、多行文本框(Text)
1、在文本中插入控件,比如按钮,标签之类的
五、标签(Lable)
配合4个事件,完成上面的效果
<Enter>
:鼠标移入
<Leave>
:鼠标移出
<Button-1>
:鼠标点左键
<Button-3>
:鼠标点击右键
五、滚动条
滚动条使用率还比较高,不过比较简单,照例子进行必要的配置就可以了,几个属性也好理解
scr1 = ttk.Scrollbar(self.frm_left, orient=tk.VERTICAL)
self.tree_qlist.configure(yscrollcommand=scr1.set)
scr1['command'] = self.tree_qlist.yview
scr1.grid(row=1, column=1, sticky=tk.NS)