请选择 进入手机版 | 继续访问电脑版

影子论坛

搜索
查看: 3066|回复: 2

[Python] Tkinter控件总结笔记

[复制链接]

4

主题

5

帖子

120

积分

倔强青铜Ⅱ

积分
120
发表于 2019-11-30 17:31:17 | 显示全部楼层 |阅读模式
本帖最后由 陈倔强123 于 2019-12-2 10:20 编辑

不知道有没有小伙伴喜欢使用python写些实用的小工具,如果只是自己用还好,分享给别人用如果没有界面很恼火。所以分享一下我自己总结的tkinter笔记,在python中,写界面最优的应该是PyQT,但是那玩意太复杂了,虽然现在出了pyqt designer,可以拖动,但是可以定制的项目太多,反而经常找不到需要的功能,个人太菜了,只会使用tkinter。遇到不会的,欢迎讨论分享。
使用前需要先导入import tkinter
1. 使用结构
创建主窗口
win = tkinter.Tk()
设置标题
win.title('标题内容')
设置大小和位置
win.grometry('400x400+200+200')
设置不可改变窗口大小
win.resizable(0,0)

2. Label控件
显示文本控件Label属性text        显示的文本内容bg        背景色fg        字体颜色font        设置字体颜色和大小width        设置控件的宽height        设置控件的高wraplength        指定text文本中多宽进行换行justify        设置换行对齐方式anchor        文本在Label中的位置 n北 e东 s南 w西 center居中

3. Button控件
按钮控件text        显示按钮上的内容command        绑定按钮的功能函数width        设置按钮的款height        设置按钮的高

4. Entry控件
输入控件
show='*'        密文显示
e = tkinter.Variable()textvariable = e        变量绑定,绑定的值需要是tkinter的变量类型变量可以用e.set("值")和e.get()来设置值和取值.用控件的对象只能用get,不能用set
e = tkinter.Variable()
entry = tkinter.Entry(win, textvariable=e)
# e就代表输入框这个对象
# 设置值
e.set('陈倔强好帅')
# 取值
print(e.get())
# entry.set('123')  # 报错
print(entry.get())
5. Text控件
文本控件,显示多行文本
height        表示显示的行数
拥有insert方法,进行文本插入
text = tkinter.Text(win, width=30, height=3)
text.pack()
str = '羊皮卷之七我要笑遍世界。只有人类才会笑。树木受伤时也会流“血”,禽兽也会 因痛苦和饥饿而哭嚎哀鸣,然而,只有我才具备笑的天赋,可以随时开怀大笑。从今往后,我要培养笑的习惯。笑有助于消化,笑能减轻压力,笑,是长寿的秘方。'
text.insert(tkinter.INSERT, str)

6. Scrollbar控件
滚动条
需要进行双向关联才有效
scroll.config(command=text.yview)text.config(yscrollcommand=scroll.set)
scroll = tkinter.Scrollbar()
text = tkinter.Text(win, width=50, height=7)
# side 放到窗体的哪一册, fill填充Y轴
scroll.pack(side=tkinter.RIGHT, fill=tkinter.Y)
text.pack(side=tkinter.LEFT, fill=tkinter.Y)
# 关联
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)

7. Checkbutton
多选框
需要绑定tkinter变量,判断是否选中用变量.get()方式,返回True为选中,返回False为未选中
def updata():
    message = ''
    if hobby1.get() == True:
        message += 'money\n'
    # 清空text中的所有内容
    text.delete(0.0, tkinter.END)
    text.insert(tkinter.INSERT, message)

# 要绑定的变量
hobby1 = tkinter.BooleanVar()
# 多选框
check1 = tkinter.Checkbutton(win, text='money', variable=hobby1, command=updata)
check1.pack()

8. Radiobutton
单选框
一组单选框需要绑定同一个变量
获取值可以使用值的方式进行
def updata():
    print(r.get())

# 一组单选框要绑定同一个变量
r = tkinter.IntVar()
radio1 = tkinter.Radiobutton(win, text='one', value=1, variable=r, command=updata)
radio2 = tkinter.Radiobutton(win, text='two', value=2, variable=r, command=updata)

9. Listbox
列表框
selectmode:
                tkinter.BORWER        -        支持鼠标按下选中元素
                tkinter.SINGLE        -        不支持鼠标按下选中元素
                tkinter.EXTENDED        -        支持shift和control选中
                tkinter.MULTIPLE        -        支持多选
listvariable        -        绑定变量
控件对象.insert(标志,元素)        -        向列表中插入元素
                标志:tkinter.END        -        在最后插入
                tkinter.ACTIVE        -        在开始添加
控件对象.delete(参数1,参数2)        -        删除参数1为开始,参数2为结束的索引,如果不指定参数2,只删除第一个索引内容。
控件对象.select_set(参数1,参数2)        -        选中参数1为开始,参数2为结束的索引,如果不指定参数2,只选中第一个索引内容。
控件对象.select_clear(参数1,参数2)        -        取消选中
控件对象.size()        -        获取列表中元素的个数
控件对象.get(参数1, 参数2)        -        获取索引的元素
控件对象,curselection()        -        返回当前的索引项下标
控件对象.selection_includes(选项)        -        判断此索引项是否被选中
namelist = tkinter.Variable
lb = tkinter.Listbox(win, selectmode=tkinter.BROWSE, listvariable=namelist,)
lb.pack()
for item in ['good', 'nice', 'handsonme']:
    lb.insert(tkinter.END, item)

10. Scale
滑动条
tkinter.HORIZONTAL 水平tkinter.VERTICAL 竖直length 水平时表示宽度,竖直时表示高度tickinterval 选择值将为该值的倍数
scale = tkinter.Scale(win, from_=0, to=100, orient=tkinter.HORIZONTAL, tickinterval=100, length=200)
scale.pack()
# 获取值
print(scale.get())
# 设置初始值
scale.set(20)

11. Spinbox
数值范围控件
increment 步长, 默认为1value 最好不要与from_=0,to=100,increment=1同时使用。使用元组value=(0, 2, 4, 6, 8)command 只要值改变就会执行对应的方法
v = tkinter.StringVar()

def func():
    print(v.get())

sp = tkinter.Spinbox(win, from_=0, to=100, textvariable=v, command=func)

v.set(20)

12. Menu
顶层菜单
# 菜单条
menubar = tkinter.Menu(win)
# 显示顶层菜单
win.config(menu=menubar)
# 创建一个菜单选项
menu1 = tkinter.Menu(menubar, tearoff=False)
# 给菜单选项添加内容
for item in ['Python', 'C', 'Java', 'C++', 'Shell', 'Matlab', 'Html', 'exit']:
    if item == 'exit':
        # 添加分割线
        menu1.add_separator()
        menu1.add_command(label=item, command=win.quit)
    else:
        menu1.add_command(label=item)

# 向菜单条上添加菜单选项
menubar.add_cascade(label='编程语言', menu=menu1)
右键菜单
menubar = tkinter.Menu(win)
# win.config(menu=menubar)

# 菜单
menu = tkinter.Menu(menubar, tearoff=False)
for item in ['Python', 'C', 'Java', 'C++', 'Shell', 'Matlab', 'Html', 'exit']:
    menu.add_command(label=item)

menubar.add_cascade(label='编程语言', menu=menu)

def shouMenu(event):
    menubar.post(event.x_root, event.y_root)

# 绑定右键事件(1、左键,2、滚轮,3、右键)
win.bind('<Button-3>', shouMenu)

13. Combobox
下拉控件
# 绑定变量
cv = tkinter.StringVar()
com = ttk.Combobox(win, textvariable=cv)
com.pack()

# 设置下拉数据
com['value'] = ('黑龙江', '吉林', '辽宁')

# 设置默认值
com.current(2)

def func(event):
    print('stolen is a good man')
    # 获取变量值
    print(com.get())
    print(cv.get())

# 绑定事件
com.bind('<<ComboboxSelected>>', func)

14. Frame
框架控件
类似html的div,主要进行布局

15. ttk.Treeview
使用需要先导入from tkinter import ttk
表格数据
tree = ttk.Treeview(win)
tree.pack()
# 定义列
tree['columns'] = ('姓名', '年龄', '身高', '体重')
# 设置列,列还不显示
tree.column('姓名', width=100)
tree.column('年龄', width=100)
tree.column('身高', width=100)
tree.column('体重', width=100)

# 设置表头 前面名称要和定义一样
tree.heading('姓名', text='姓名-name')
tree.heading('年龄', text='年龄-age')
tree.heading('身高', text='身高-height')
tree.heading('体重', text='体重-weight')

# 添加数据
tree.insert('', 0, text='line1', value=('哒哒', '20', '173', '120'))
tree.insert('', 1, text='line2', value=('哒哒2', '202', '1732', '1202'))
tree.insert('', 2, text='line3', value=('哒哒3', '203', '1733', '1203'))
tree.insert('', 3, text='line4', value=('哒哒4', '204', '1734', '1204'))
tree.insert('', 4, text='line5', value=('哒哒5', '205', '1735', '1205'))
树状数据
tree = ttk.Treeview(win)
tree.pack()

# 添加一级树枝
treeF1 = tree.insert('', 0, '中国', text='China', values=('F1'))
treeF2 = tree.insert('', 1, '美国', text='American', values=('F2'))
treeF3 = tree.insert('', 2, '英国', text='English', values=('F3'))

# 添加二级树枝
treeF1_1 = tree.insert(treeF1, 0, '黑龙江', text='中国黑龙江', values=('F1_1'))
treeF1_2 = tree.insert(treeF1, 1, '吉林', text='中国吉林', values=('F1_2'))
treeF1_3 = tree.insert(treeF1, 2, '辽林', text='中国辽林', values=('F1_3'))

treeF2_1 = tree.insert(treeF2, 0, '纽约', text='美国纽约', values=('F2_1'))
treeF2_2 = tree.insert(treeF2, 1, '旧金山', text='美国旧金山', values=('F2_2'))
treeF2_3 = tree.insert(treeF2, 2, '拉斯维加斯', text='美国拉斯维加斯', values=('F2_3'))

16. 布局
place 绝对布局
x为距离左边框的距离, y为距离上边框的距离
label1 = tkinter.Label(win, text='good', bg='red')
label1.place(x=10, y=10)
pack 相对布局
fill                填充方式
        tkinter.X        水平填充
        tkinter.Y        垂直填充
        tkinter.BOTH         水平和竖直方向填充
        tkinter.NONE        不填充
side                 停靠在窗口的哪个位置
        tkinter.LEFT        左
        tkinter.RIGHT        右
        tkinter.TOP        上
        tkinter.BOTTON        下
expand                是否扩展
        tkinter.YES        扩展整个空白区域        
        no        不扩展
anchor        位置
        N        北  下
 E        东  右
 S        南 下
 W        西 左
label1 = tkinter.Label(win, text='good', bg='red')
label1.pack(fill=tkinter.Y, side=tkinter.LEFT)
grid 表格布局
row        第几行
column        第几列
rowspan        跨几行
columnspan        跨几列
label1 = tkinter.Label(win, text='good', bg='red')
label1.grid(row=0, column=0)17. 事件绑定
控件名.bind(事件名,事件函数)
控件焦点设置:控件名.focus_set()
鼠标点击事件
<Button-1> 鼠标左键
<Button-2> 鼠标中键
<Button-3> 鼠标右键
<Double-Button-1> 双击鼠标左键
<Double-Button-2> 双击鼠标中键
<Double-Button-3> 双击鼠标右键
<Triple-Button-1> 三击鼠标左键
<Triple-Button-2> 三击鼠标中键
<Triple-Button-3> 三击鼠标右键
鼠标移动事件
<B1-Motion>左键移动
<B2-Motion>中键移动
<B3-Motion>右键移动
鼠标释放事件
<ButtonRelease-1>鼠标左键释放
<ButtonRelease-2>鼠标中键释放
<ButtonRelease-3>鼠标右键释放
鼠标进入与离开事件
<Enter>鼠标光标进入控件时触发
<Leave>鼠标光标离开空间时触发
按键事件
<Key>响应所有键盘按键事件
特殊按键事件
<Shift_L>        左Shift
<Shift_R>右Shift
<F5>        F5按键
<Return>        回车
<BackSpace>        退格
逆风的方向,更适合飞翔


评分

参与人数 1disk +10 收起 理由
admin + 10 很给力!

查看全部评分

影子论坛是一个高度自由简约的资源共享平台
回复

使用道具 举报

417

主题

716

帖子

3938

积分

管理员

积分
3938
发表于 2019-11-30 23:16:56 | 显示全部楼层
tkinter是python 自带的,可以编辑的GUI界面。其实可以用GUI 实现很多直观的功能。
而且我是什么都喜欢自带的,用软件也是,用系统也是
影子论坛是一个高度自由简约的资源共享平台
回复 支持 反对

使用道具 举报

2

主题

18

帖子

194

积分

vip

积分
194
发表于 4 天前 来自手机 | 显示全部楼层
挺详细的啊!不错不错。
影子论坛是一个高度自由简约的资源共享平台
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表