zoukankan      html  css  js  c++  java
  • Python-tkinter开发学习 笔记

    教程地址,感谢!
    目录:

    课时一

    GUI:用户交互界面


    kinter 介绍

    是python自带的gui库,对图形图像处理库tk的封装
    自带用着方便,跨平台,够用。
    其他gui:pythonwin,wxpython,pyQT等等。

    导入tkinter 库:import tkinter

    查询官方帮助:help(tkinter)

    概念介绍

    1. 组件:组成界面的构成内容就是组件。按钮,文本输入框,滚动条,列表,菜单等等。
    2. 窗口:一个软件的矩形区域。

    最简单的界面

    # 导入模块
    import tkinter 
    
    # 创建主窗口对象
    root = tkinter.T=Tk()  # 实例化主体,类
    
    # 将主窗口加入消息循环
    root.mainloop()
    

    实现简单的模块

    # 导入模块
    import tkinter 
    
    # 创建主窗口对象
    root = tkinter.Tk()  # 实例化主体,类
    
    # 设置窗口的大小
    root.minsize(300, 300)  # 设置窗口的最小大小为200*200px
    
    # 加入一个按钮的组件
    # 先创建一个按钮组件
    btn = tkinter.Button(root, text = '这是按钮的文本')  
    # root 表示将这个按钮放在哪里 (只是在内存中创建了,并没有摆放)
    
    # 摆放按钮(最简单的)
    btn.pack()
    
    # 将主窗口加入消息循环
    root.mainloop()
    

    组件的摆放方式

    1. pack()方式 --> 方位摆放方法(上下左右)(不推荐使用)
      a. 上(top),下(bottom),左(left),右(right)
    2. grid()方式 --> 网格摆放方法(网格坐标)
      a. 把界面变成网格,对网格横纵坐标编号.告诉坐标就可以把组件放在具体地方.
      b. 适合做格子类的东西,计算器 颜色选择框等.
    3. place()方式 --> 定位摆放方法(具体像素)
      a. 也有横纵坐标单位是像素.告诉离上边有多远,离左边有多远 即可确定位置 .
      b. 适合软件拖放的架构

    pack()方式例子

    # pack()方式:
    
    import tkinter
    root = tkinter.Tk()
    
    ---
    
    # 创建组件
    btn1 = tkinter.Button(root, text = '按钮1')
    btn1.pack(sidel = 'top')  # side表示放,后面值是上下左右,默认是top
    # 如果是多个组件 上摞的 不好用.
    
    # ipadx, ipady : 设置组件的内部间距.
    btn1.pack(ipadx = 20, ipady = 20)  # 横轴纵轴各增加20像素的空间.
    
    # padx, pady 表示距离左右上下组件的间距 单位也是px
    
    # fill 填充
    btn1.pack(fill = 'x')  # 水平方向的最大位置(一整行).
    btn1.pack(fill = 'y')  # 垂直方向的最大位置(一整列)但是摆放方式必须是左和右.
    btn.pack(fill = 
    
    # expand 设置side是否失效.
    btn1.pack(expand = 'yes')  # 按钮会在中间,占用了所有组件的空间
    
    root.mainloop()
    

    gird() 方式例子

    # 网格没有具体大小,取决于当前组件 最大组件的大小!
    import tkinter
    
    root = tkinter.Tk()
    root.minsize(500, 500)
    
    btn1 = tkinter.Button(root, text = '按钮1')
    
    btn1.grid() # 不设置,默认行列为0
    btn1.grid(row = 0, column = 0) # 和上面一个意思
    
    btn2 = tkinter.Button(root, text = '按钮2')
    btn2.grid(row = 1, column = 0) # 行1列0
    
    btn3 = tkinter.Button(root, text = '按钮3')
    btn3.grid(row = 0, column = 1) # 行0列1
    '''
    如果想跨行跨列 有如下两个参数:
    rowspan: 设置跨行数量
    cloumnspan: 设置跨列数量
    '''
    btn0 = tkinter.Button(root, text = '按钮0')
    btn0.grid(row = 2, column = 0, columnspan = 2, ipadx
              = 20) #要设置组件的大小
    btnd = tkinter.Button(root, text = ' = ')
    btnd.grid(row = 0, column = 2, rowspan = 2, ipady
              = 20)
    
    root.mainloop()
    

    place方式例子

    # 两组属性,不可混合使用!!!
    # 绝对定位布局
    import tkinter
    root = tkinter.Tk()
    root.minsize(500, 500)
    
    btn1 = tkinter.Button(root, text = '按钮1')
    btn1.place(x = 100, y = 20, width = 50, height = 50) 
    # 如果不设置组件位置会什么也不出现,但不报错,因为组件没有定位所以显示在看不到的地方了
    # x:设置距离左上角的水平长度,y:设置距离左上角的垂直高度.
    # width:设置组件所占据的宽度,height:设置组件所占的高度.
    # 这种布局方式拉动主窗口,所有的组件都不会动!因为是绝对定位布局,设置多少就是多少!
    # 这里所有的单位都是像素
    
    
    # 相对定位布局。
    # 好处是可以随界面变化而变化。
    # relx:设置距离左上角的水平长度的百分比,rely:设置距离左上角的垂直高度的百分比.
    # relwidth:设置组件所占据的宽度的百分比,relheight:设置组件所占的高度的百分比.
    import tkinter
    root = tkinter.Tk()
    root.minsize(500, 500)
    
    btn1 = tkinter.Button(root, text = '按钮1')
    btn1.place(relx = 0.2, rely = 0.1, relwidth = 0.1, relheight = 0.1) 
    # relx:当前组件左边占整个宽度的百分比,高度同理。
    # rel设置当前宽度占整体宽度的10%,高度同理。
    # 以上设置都是相对于界面宽度和高度的百分比,可以根据界面的大小而改变(取值是0到1)
    
    root.mainloop()
    

    课时二

    官方文档可以搜索 python tkinter 去官网查询.

    基本(标准)属性介绍

    有tkinter.xxx 这个类的属性,可以选择,也可以自己写参数.

    外形尺寸

    import tkinter
    root = tkinter.Tk()
    root.minsize(500, 500) # 所有属性尽量只用默认像素或者其他字符类的值.
    
    btn1 = tkinter.Button(root, text = '尺寸')
    btn1.pack(ipadx = 100, ipady = 200) # 尺寸的绝大部分尺寸的默认单位是像素
    
    root.mainloop()
    

    坐标系

    btn1 = tkinter.Button(root, text = '坐标系')
    btn1.place(x = 100, y = 50) # 设置坐标系.
    

    颜色

    btn1 = tkinter.Button(root, text = '颜色', bg = 'blue')  
    # bg:按钮的背景色.
    # 可以使用颜色单词
    # 使用hex颜色模式(例子:#ff0000)(#红色绿色蓝色)(也就是十六进制颜色)
    btn1.pack()
    

    字体属性

    btn1 = tkinter.Button(root, text = '字体', font = ('黑体',40,'bold','italic'))  
    # 字体设置以元祖出现,分别是 字体,字号,黑体,斜体等等.
    btn1.pack()
    
    

    锚点

    btn1 = tkinter.Button(root, text = '锚点', anchor = 'nw')
    # 锚点就是方向的代名词
    # 按照上北下南左东右西 写简写值就可以.
    
    btn1.pack(ipadx = 20, iapdy = 20)
    
    

    三维效果

    btn1 = tkinter.Button(root, text = '三维效果', relief = 'ridge')
    # 有几种效果:flat, raised, sunken, groove, ridge
    # relief关键字 = 值(字符串)即可
    # 也可以用 tkinter.FLAT 替代参数.
    btn1.pack(ipadx = 20, iapdy = 20)
    
    

    位图

    btn1 = tkinter.Button(root, text = '位图', bitmap = 'error')
    # 内置的位图图标库 
    # bitmap 属性.
    # error gray75 gray50 gray25 gray12 hourglass info guesthead question waring 
    # 也可以使用自己的位图文件, .xbm(x位图)格式的文件都可以用,代替标准位图名称,使用字符串@ 后跟.xbm文件的路径名.
    btn1.pack(ipadx = 20, iapdy = 20)
    
    

    鼠标

    # 用的比较少,可以自定义鼠标的各种状态,库里自带,也可以去文档中查询
    btn1 = tkinter.Button(root, text = '鼠标', cursor = 'heart')
    btn1.pack(ipadx = 20, iapdy = 20)
    
    # 如果要设置整个主窗口
    root['cursor'] = 'start'
    
    

    图片

    # 有两种
    # 第一种bmp格式和位图意思一样.很少用 略
    
    # 第二种 PhotoImage类
    # 支持.gif和.pgm和.ppm格式
    
    # 将图片设置为图像推向
    long = tkinter.PhotoImage(file = 'long.gif')
    btn1 = tkinter.Button(root, text = '图片', image = long)
    btn1.pack()
    
    

    设置界面大小,几何字符串

    imoprt tkinter
    root = tkinter.Tk()
    root.geometry('300x400')  # 几何字符串
    
    

    常用组件

    Frame 框架

    功能:用来承载放置其他GUI元素,就是一个容器。用来进行区域划分

    # 外部的代码都是重复的省略
    frame1 = tkinter.Frame(root, bg = 'black', width = 100, height = 200)
    frame1.pack()
    frame2 = tkinter.Frame(roott, bg = 'black' , width = 100, height = 200))
    frame2.pack()
    # 正常情况下是看不到这两个容器的 因为容器是虚拟的,为了方便可以加一个背景颜色就看到了
    # 设定背景颜色后 看到很小的两个点 是因为虚拟容器的大小是根据它里面的内容决定的
    # 我们可以用width和height参数设定容器的大小.
    
    # 下面展示如何在框架中放入内容
    # 假设要摆放按钮
    btn1 = tkinter.Button(frame1, text = '按钮1')
    btn1.pack(side = 'left')
    btn2 = tkinter.Button(frame1, text = '按钮2')
    btn2.pack(side = 'left')
    btn3 = tkinter.Button(frame1, text = '按钮3')
    btn3.pack(side = 'left')
    # 背景会根据元素的大小调整,所以背景被覆盖了,可以在pack的时候用padx属性设置边框 就可以显示出来了
    # 放到框架2 里面是一样的效果
    # 但是这样依然不要用pack方式摆放东西!
    
    

    Label 标签

    功能:用于显示不可编辑的文本或图标,就是界面上‘死’的东西(文字或图片)

    # 外部的代码都是重复的省略
    label = tkinter.Label(root, text = '这是一个标签')  # 摆放文字 各种通用属性都可以用.但是一样用的少.
    
    
    
    

    Button 按钮

    功能:点击时执行一个动作

    案例:

    import tkinter 
    root = tkinter.Tk()
    root.geometry('300x300')  # 设置界面大小,用几何字符串设置
    
    btn1 = tkinter.Button(root,)
    # root: 表示放的父组件未知子
    # bg: 背景色
    # text: 文本内容
    # fg: 前景色
    # font: 字体 (元祖方式 看上面)
    # command: 单击按钮时要调用的函数或方法.
    # width 和 height 是使用4字符大小,不推荐用
    # justify: 设置多行文本的对其方式.left right 等
    # state: 状态,按钮能不能点! 用于控制!(active, disabled, normal)
    # bd: 边框粗细.单位像素
    # 其他去文档里查
    btn1.pack()
    
    

    Entry 单行文本输入框

    # 外部的代码都是重复的省略
    username = tkinter.Entry(root)
    username.pack()
    # 默认20个字符
    # 可以自定义 用width属性设置,注意单位是字符.
    # 通用设置都是一样的
    # 如果用密码要掩码的话这样写
    password = tkinter.Entry(root, show = '*')
    # show属性用来显示你输入的内容.做安全用
    
    # Entry 可以用state状态 控制是否可以输入,或者展示用.'disabled'表示关闭
    
    password.pack()
    
    

    功能:显示一行文本,可以输入的单行文本

    Text 多行文本

    功能:显示多行文本,可以输入的多行文本

    Checkbutton 复选框

    功能:选择框,允许用户选择或不选择一个选项

    import tkinter
    
    root = tkinter.Tk()
    root.geometry('500x500')
    
    checkbutton = tkinter.Checkbutton(root,text = '要显示的文本')  # text 文字是固定的可以这么写
    checkbutton.pack()
    # 如果字要改变
    # 设置显示内容tkinter变量
    text = tkinter.StringVar() # 创建变量
    text.set('同意此价格')  # 设置变量(设置用set,如果想要获取用get)
    
    result = tkinter.Intvar()
    checkbutton = tkinter.Checkbutton(root,textvariable = text, variable = result, command = func)
    checkbutton.pack()
    # vaiable默认是整形,设置复选框勾选与否的值.
    # 设置操作checkbutton的方法(也就是勾选后会出发的行为.)
    def func():
        print(result.get)
    #  如果要自定义勾选或者不勾选的值 可以加`onvalue`和`offalue`也就是说得勾选和勾选的值
    result = tkinter.Intvar()
    checkbutton.pack()
    root.mainloop()
    
    

    Radiobuution 单选框

    功能:允许用户从多个选项中选取一个,就是很多选项只能选择一个(小圆点)。

    Canvas 画布

    功能:提供绘图功能,(直线,椭圆,多边形,矩形)可以包含图形或位图。

    import tkinter
    
    root = tkinter.Tk()
    root.geometry('500x500')
    canvas = tkinter.Canvas(root, bg = 'white')  #新建一个画布,把它放入主窗口中,并设置背景为白色.
    canvas.pack()
    
    # 在画布中绘制一个长方形,用矩形工具
    canvas.create_rectangle(20, 20, 100, 100, fill = 'red', outline = 'yellow')  
    # 前面数字参数中,前d两个参数表示开始矩形左上角点的位置(横轴,纵轴),后面两个参数表示矩形右下角的距离0轴(初始位置的)距离.
    # fill 给画出的模块填充颜色
    # outline 边框颜色
    root.mainloop()
    
    

    Listbox 列表框(盒子)

    功能:一个选项列表,用户可以从中选择。同时展示多个数据.

    # 外部的代码都是重复的省略
    # 设置listbox的内容
    names = ('吕洋', '任真', '吕恒一')
    # 将上面数据转换为tkinter的字符串变量.
    students = tkinter.StringVar(value = names)
    
    listbox = tkinter.Listbox(root, listvariable = students)
    listbox.pack()
    
    

    功能:点下菜单按钮后弹出一个选项列表,用户可以从中选择。

    # 1. 创建主菜单
    bigmenu = tkinter.Menu(root)
    
    # 2. 创建子菜单
    filemenu = tkinter.Menu(bigmenu, , tearoff = 0))
    # tearoff = 0 关闭菜单飘出来的功能
    # 子菜单可以添加功能
    filemenu.add_commadn(label = '打开文件', command = 一个函数)
    filemenu.add_separator()  # 在菜单中加入恒线的功能.
    # 3. 将子菜单加入主菜单
    bigmenu.add_cascade(label = '文件', menu = filemenu)
    # 4. 将主菜单加入界面
    root.config(menu)  # 在主菜单里配置一个主菜单
    
    

    功能:用来包含菜单的组件(有下拉式,叠层式等等。)按钮点击弹出菜单栏.

    # 重复的主窗口内容略
    menbutton = tkinter.Menubutton(root, text = '选择内容')
    menubutton.pack()
    # 先建立一个菜单
    menu = tkinter.Menu(menubuttion)
    # 添加选项
    # 设置变量
    sex = tkinter.StringVar()
    men.add_radiobutton(label = '男', variable = sex)
    men.add_radiobutton(label = '男', variable = sex)
    
    # 将菜单配置到组件
    menubutton.config(menu = menu)
    
    

    OptionMenu 设置菜单

    功能:类似下拉列表的效果

    # 重复框架内容略
    # 创建一个变量用来接收结果
    restult = tkinter.StringVar()
    result.set('请选择一个问题')  # 设置默认显示的值
    optionmenu - tkinter.OptionMenu(root, restult, '这是一个问题', '这是二个问题', '这是很多问题.')
    
    

    Message 消息框

    功能:类似于标签,单是可以显示多行文本

    Scale 进度条

    功能:线性"滑块"组件,可设定起始值和结束值,会显示当前位置的精确值.

    Scrollbar 滚动条

    功能:对其支持的组件(文本域,画布,列表框,文本框)提供滚动功能.

    Toplevel 顶层组件

    功能:类似框架为其他空间提供但单独的容器.比如点设置新弹出来一个设置界面 就用到这个.

    Spinbox 输入空间

    功能:与Entry类似,但是可以指定输入范围值.只能输入指定类型的内容.(数字,小数,文本之类的.)

    PanedWindow 窗口布局管理

    功能:是一个窗口布局管理的插件,可以包含一个或者多个子控件.

    LabelFrame 容器控件

    功能:是一个简单的容器控件.常用用于复杂窗口布局,例如设置界面内容太多可以把相关内容的设置装在一起.然后写上说明.

    # 外部的代码都是重复的省略
    labelframe = tkinter.LabelFrame(root, text = '常规设置')
    labelframe.pack()
    # pack内可以用ipadx设置大小
    # 也是虚拟框架 要把组件放进去才显示.
    btn1 = tkinter.Button(labelframe, text = '按钮1')
    btn1.pack()
    btn2 = tkinter.Button(labelframe, text = '按钮1')
    btn2.pack()
    
    

    messagebox 消息框

    功能:用于显示你应用程序的消息框.消息框有很多种(消息选择框,文件存储框等),可以以后用的时候慢慢查询.

  • 相关阅读:
    结构体struct和typedef后面接指针的含义
    C++中关于指针初始化和使用NULL的理解
    (虚)继承类的内存占用大小
    为什么构造函数不能为虚函数
    C++中变量自动初始化的问题
    CY7C68013A的一点总结
    Altium designer总结
    在Linux系统上限制远程登录的IP
    linux系统如何限制其他用户登录
    使用秘钥对登录Linux系统
  • 原文地址:https://www.cnblogs.com/srnl/p/11746195.html
Copyright © 2011-2022 走看看