• Python:GUI之tkinter学习笔记2界面布局显示



    相关内容:

    • pack
      • 介绍
      • 常用参数
      • 使用情况
      • 常用函数
    • grid
      • 介绍
      • 常用参数
      • 使用情况
      • 常用函数
    • place
      • 介绍
      • 常用参数
      • 使用情况
      • 常用函数

    首发时间:2018-03-04 14:20


    pack:

      • 介绍:
        • pack几何管理器按行或列打包小部件。 可以使用填充fill,展开expand和靠边side等选项来控制此几何体管理器。
        • pack的排放控件的形式就像将一个个控件按大小从上到下放过去
        • 在窗口不设定大小的而使用pack进行布局的情况下,窗口默认大小为刚好包裹所有控件的大小
        • 默认情况下添加的控件是居中且占据整行的
      • 常用参数:
        • fill:填充分配给控件的空间,fill:X为填充X轴方向,Y为Y轴方向,BOTH为X+Y
        • expand:先按普通标准来规定控件大小,如果后面窗口还剩下空间,那么会分给那些expand=True的控件,如图中是两个不同大小的按钮,其中2expand=Trueimage_thumb[4] ,当使用expand=True时,side将不会生效!
        • side:使控件靠窗口的指定方向并排,side可取值LEFT,RIGHT,TOP,BOTTOM.image_thumb3[1]
        • anchor:对齐方式,可取值“n”, “s”, “w”, “e”, “nw”, “sw”, “se”, “ne”, “center”(默认为” center”)image_thumb[5]
        • ipadx, ipady:内边距
        • padx,pady:外边距
      • 适用情况:与gird相比,pack有一定的局限性,但在一些但很常见的情况下使用起来要容易得多:
        • 将一个小部件放入一个框架(或任何其他容器小部件)中,并让它填充整个框架
        • 将多个小部件放在一起
        • 并排放置一些小部件
      • 补充:
        • 常用函数:
          • pack_propagate(flag):由窗口调用来配置pack控件时窗口的大小,当flag=0时,那么窗口大小将不再仅仅包裹住所有控件,这时候窗口的高度和宽度设置才可以生效
          • pack_forget():移除控件,但并没有进行摧毁,可以再次使用pack或其他方式来显示
          • pack_info():返回pack提供的选项所对应得值。
          • pack_slaves():以列表方式返回本组件的所有子组件对象。
    from tkinter import *
    root=Tk()
    
    # for i in range(10):
        ##side
        # btn = Button(text=i)
        # btn.pack(side=LEFT)
        # btn.pack(side=RIGHT)
        # btn.pack(side=(TOP,LEFT))
    
        ####fill
        # btn.pack(fill=X)
        # btn.pack(side=LEFT,fill=Y)
        # btn.pack(fill=BOTH)
    
    ##expand
    # btn1=Button(text=1,bg='green')
    # btn2=Button(text=2,bg='yellow')
    # btn1.pack(fill=X)
    # btn2.pack(expand=True)
    #anchor:
    # btn1=Button(text=1,bg='green')
    # btn2=Button(text=2,bg='yellow')
    # btn1.pack(fill=X)
    # btn2.pack(anchor=E)
    
    #pack_propagete
    # btn1=Button(text=1,bg='green')
    # btn2=Button(text=2,bg='yellow')
    # root.pack_propagate(0)
    # btn1.pack()
    # btn2.pack()
    
    #pack_forget:
    # import time,threading
    # label=Label(text="警告!")
    # label.pack()
    # def run():
    #     start_time=time.time()
    #     while True:
    #         if time.time()-start_time>3:
    #             label.pack_forget()
    #             break
    # t=threading.Thread(target=run)
    # t.setDaemon(True)
    # t.start()
    
    root.mainloop()

     


    grid:

      • 介绍:grid是格子的意思,grid可以将控件区块式摆放.image_thumb4
      • 常用参数:
        • row: 行号,区分不同控件是否处于同一行
        • column: 列号,区分不同控件是否处于同一列
        • sticky: 决定控件的贴靠方向,该选项从集合N,S,E,W [东南西北的意思],中取一个或多个值。比如要将标签与左边框对齐,可以使用W(西)image_thumb[1]image_thumb[2]
        • rowspan:行跨度,决定某个控件占的行数 ,默认一行
        • columnspan:列跨度,决定某个控件占的列数,默认一列
        • ipadx, ipady:内边距
        • padx,pady:外边距
        • 适用情况:
          • 设计对话框的时候特别方便
          • 区块化摆放的时候
        • 补充:
          • 常用函数:
            • grid_forget :移除控件,但并没有进行摧毁,可以再次使用grid或其他方式来显示 [grid_remove有同样作用]
            • grid_propagete:由窗口调用来配置pack控件时窗口的大小,当flag=0时,那么窗口大小将不再仅仅包裹住所有控件,这时候窗口的高度和宽度设置才可以生效

            • grid_slaves():以列表方式返回本组件的所有子组件对象。

      from tkinter import *
      
      root=Tk()
      root.title("我的窗口")
      label_user=Label(text='用户名:',bg='green')
      label_pwd=Label(text='密码:',bg='green')
      user=Entry()
      pwd=Entry()
      # row,column,sticky
      label_user.grid(row=0,column=0,sticky=W) #一个有sticky,一个没有sticky,以作区分
      label_pwd.grid(row=1,column=0)
      # rowspan,columnspan
      user.grid(row=0,column=1)
      pwd.grid(row=1,column=1)
      btn=Button(text="提交")
      btn.grid(row=0,column=3,rowspan=2,columnspan=2,padx=5, pady=5)
      # 下面主要是将第一列拉大来显示上面sticky的效果
      v=IntVar()
      check=Checkbutton(text="下次自动登录",variable=v,)
      check.grid(row=2,column=0,sticky=W)
      
      
      # _forget:
      import time,threading
      label=Label(text="欢迎登录!",bg='blue')
      label.grid()
      def run():
          start_time=time.time()
          while True:
              if time.time()-start_time>3:
                  label.grid_forget()
                  break
      t=threading.Thread(target=run)
      t.setDaemon(True)
      t.start()
      
      
      
      root.mainloop()

      place:

        • 介绍:可以使用绝对的位置或相对位置来摆放控件。 conn_thumb conn2[3]_thumb
        • 常用参数:
          • x:控件在窗口中的x坐标
          • y:控件在窗口中的y坐标conn2_thumb
          • relx,rely:与主窗口的相对位置,比如image_thumb[3]
          • relwidth,relheight:相对大小,比如height=0.5,width=0.5时控件占据窗口的四分之一大小
        • 适用情况:
          • 自定义显示方式
          • 将按钮定位在对话框中
        • 补充:
          • 常用函数:
            • place_forget():移除控件,但并没有进行摧毁,可以再次使用place或其他方式来显示
            • place_slaves():以列表方式返回本组件的所有子组件对象。[slaves()具有同样功能]
            • place_info():返回place提供的选项所对应得值。
      from tkinter import *
      
      root=Tk()
      root.geometry('100x100')
      label=Label(text="用户名:",bg='green')
      entry=Entry()
      label.pack(fill=X)
      #x,y
      # entry.place(x=0,y=0)
      
      #relx,rely
      # entry.place(relx=0.3, rely=0.3)
      # entry.place(relx=0.5, rely=0.5)
      
      #relheight,relwidth
      # entry.place(relx=0.5, rely=0.5,relheight=0.5,relwidth=0.5)
      
      #_forget:
      import time,threading
      label2=Label(text="警告!",bg='blue')
      label2.place(relx=0.2,rely=0.2)
      def run():
          start_time=time.time()
          while True:
              if time.time()-start_time>3:
                  label2.place_forget()
                  break
      t=threading.Thread(target=run)
      t.setDaemon(True)
      t.start()
      
      root.mainloop()

      想要了解更多,可以参考tkinter的官方文档:http://effbot.org/tkinterbook/

       


    • 相关阅读:
      题目1522:包含min函数的栈
      [Swift]LeetCode1157. 子数组中占绝大多数的元素 | Online Majority Element In Subarray
      [Swift]LeetCode1156. 单字符重复子串的最大长度 | Swap For Maximum Repeated Substring
      [Swift]LeetCode1153. 字符串转化 | String Transforms Into Another String
      [Swift]LeetCode1151. 最少交换次数来组合所有的 1 | Minimum Swaps to Group All 1's Together
      [Swift]LeetCode1154. 一年中的第几天 | Ordinal Number Of Date
      [Swift]LeetCode1152. 用户网站访问行为分析 | Analyze User Website Visit Pattern
      [Swift]LeetCode1150. 检查一个数是否在数组中占绝大多数 | Check If a Number Is Majority Element in a Sorted Array
      [Swift]LeetCode1146. 快照数组 | Snapshot Array
      [Swift]LeetCode1147. 段式回文 | Longest Chunked Palindrome Decomposition
    • 原文地址:https://www.cnblogs.com/progor/p/8504615.html
    Copyright © 2020-2023  润新知