精华内容
下载资源
问答
  • pack布局管理器是早期Tkinter中常用的一种布局方式。这种方式应对简单的情况很容易,但是随着要求越来越复杂,布局的难度会迅速提高。本文介绍另外一种方式:grid布局管理器。grid这个英文单词是格子,网格的意思。...
    01a1e133b31a582f6adb0d6894ec7aeb.png

    pack布局管理器是早期Tkinter中常用的一种布局方式。这种方式应对简单的情况很容易,但是随着要求越来越复杂,布局的难度会迅速提高。本文介绍另外一种方式:grid布局管理器。

    grid这个英文单词是格子,网格的意思。顾名思义,grid布局管理器的工作方式就是设想将父窗口空间划分为网格,并在网格中布置控件。

    例如如下的小窗口就可以看做一个三行两列的网格。

    7541ce6aa9bd779c53f7eabb140975de.png

    这个画面可以用如下代码构建:

    from tkinter import *root = Tk()Label(root, text="用户名").grid(row=0, sticky=W)Label(root, text="密码").grid(row=1, sticky=W)Entry(root).grid(row=0, column=1, sticky=E)Entry(root).grid(row=1, column=1, sticky=E)Button(root, text="Cancel").grid(row=2, column=0, sticky=E)Button(root, text="Login").grid(row=2, column=1, sticky=E)root.mainloop()

    从代码中可以看出grid方法以供使用了3个参数:

    row:指定控件所在行,缺省值为下一行。

    column:指定控件所在列,缺省值为0

    sticky:可选值包括NW,N,NE,W,E,SW,S,SE。这些值可以理解为地图上的方位,例如NE就是东北。下图是一个示意图表明每个取值在布局网格中的位置。

    a6b8ca0b07fd04b985bc6214c9e9ff1e.png

    这些取值也可以组合使用,例如E+W的效果就是水平拉伸空间。当我们如下方式修改生成Login按钮的代码时,

    Button(root, text="Login").grid(row=2, column=1, sticky=E+W)

    可以得到如下的布局,Login按钮已经铺满了网格(2,1):

    5821578e67ca50dc0f7a6833fac70e7c.png

    如果觉的这个布局还是不够美观,也可以考虑按照如下方式布局:

    784c4db631f2a3c94506401ffbc3c87d.png

    我们希望水平方向上每个编辑框占用两个网格。这是需要使用如下参数:

    columnspan:指定水平方向上控件占有的网格数。

    rowspan:指定垂直方向上控件占有的网格数。

    代码如下:

    from tkinter import *root = Tk()Label(root, text="用户名").grid(row=0, sticky=W)Label(root, text="密码").grid(row=1, sticky=W)Entry(root).grid(row=0, column=1, sticky=E, columnspan=2)Entry(root).grid(row=1, column=1, sticky=E, columnspan=2)Button(root, text="Cancel").grid(row=2, column=1, sticky=E+W)Button(root, text="Login").grid(row=2, column=2, sticky=E+W)root.mainloop()

    代码除了为编辑框指定columnspan的值为2之外,还将两个按钮的sticky值指定为E+W以占满所处的网格。

    f7de85e3cecb4ee6a162baf72c2a7593.png

    总的来说grid布局管理器,简明易懂,使用灵活,是目前Tkinter推荐的布局方式。


    觉得本文有帮助?请分享给更多人。

    关注【面向对象思考】,轻松学习每一天!

    有任何疑问,欢迎留言提问或讨论。

    面向对象设计,面向对象编程,面向对象思考!

    展开全文
  • 1.grid模块的参数 grid模块参数非常多,常用的如下图所示: 示例程序 下面我们以用grid做一个计算器的页面,目标页面如下图所示 示例程序如下: """计算器软件的界面设计""" from tkinter import * class ...

    1.grid模块中的参数

    grid模块中参数非常多,常用的如下图所示:
    在这里插入图片描述
    图片截选自博客

    示例程序

    下面我们以用grid做一个计算器的页面,目标页面如下图所示
    在这里插入图片描述

    示例程序如下:

    """计算器软件的界面设计"""
    
    from tkinter import *
    
    class Application(Frame):
    
        def __init__(self, master=None):
            super().__init__(master)
            self.master = master
            self.pack()
            self.creatwidget()
    
        def creatwidget(self):
            """通过grid布局实现计算器界面"""
            # 定义一个元组,装计算机的每个按键名称
            btnText = (("MC", "M+", "M-", "MR"),
                       ("C", "±", "÷", "×"),
                       (7, 8, 9, "-"),
                       (4, 5, 6, "+"),
                       (1, 2, 3, "="),
                       (0, "."))
            # 第一行显示区域,跨4列,垂直方向外边距为10
            Entry(self).grid(row=0, column=0, columnspan=4, pady=10)
            # 循环创建按钮
            for rindex,r in enumerate(btnText):
                for cindex,c in enumerate(r):
                    if c == "=":
                        Button(self, text=c, width=3)\
                            .grid(row=rindex + 1, column=cindex, sticky=NSEW, rowspan=2, padx=1, pady=1)
                        # sticky=NSEW表示填充整个网格,rowspan表示跨2行
                        # padx=1, pady=1,表示垂直和水平方向的外边距均为1
                    elif c == 0:
                        Button(self, text=c, width=3)\
                            .grid(row=rindex + 1, column=cindex, sticky=NSEW, columnspan=2, padx=1, pady=1)
                        # columnspan表示跨两列,
                    elif c == ".":
                        Button(self, text=c, width=3)\
                            .grid(row=rindex + 1, column=cindex+1, sticky=NSEW, padx=1, pady=1)
                        # 取到"."的时候,将列数+1
                    else:
                        Button(self, text=c, width=3)\
                            .grid(row=rindex+1, column=cindex, sticky=NSEW, padx=1, pady=1)
    
    
    if __name__ == '__main__':
        root = Tk()
        root.geometry("200x250")
        root.title("计算器")
        app = Application(root)
        root.mainloop()
    

    3.运行结果

    在这里插入图片描述

    以上就是tkinter中gridt模块的所有内容,若有疑问,请在评论区留言

    展开全文
  • IDE Pycharm 5.0.3其实这个不应该写,我认为网上很多关于grid和listbox的操作,但是!大家都抄来抄去!完全没有get到重点啊!一个错误的答案能传和转好多博客,我真是很无语。不知道博主们转之前有没有自己实际测试...

    Python 2.7
    IDE Pycharm 5.0.3

    其实这个不应该写,我认为网上很多关于grid和listbox的操作,但是!大家都抄来抄去!完全没有get到重点啊!一个错误的答案能传和转好多博客,我真是很无语。不知道博主们转之前有没有自己实际测试过,至少我试过。
    

    好啦,其实我想实现的很简单,如下图;
    这里写图片描述
    就是那么简单的一个listbox和scrollbar组合的玩意,当时用的是pack但是布局感觉很蛋疼,之后发现了grid,想着把工程里的pack都改过来,就拿一个listbox做了测试,结果当然是很蛋疼的,我不止一次看到这样的结论:

    这里写图片描述
    作为新手我当然去改啦,结果。。。。这样
    这里写图片描述
    导演,这和说好的不一样啊,我要的是横过来的啊!!
    虽然能通过条子进行左右拽,但是!你们的审美去哪了啊喂!
    这里写图片描述
    而且,百度出来的结果几乎都是这几句话,大哥,你们能靠点谱么,至少我在python2.7,用pack,listbox,tkinter不行!
    最后,终于让我找了好人!@purpentkinter-grid布局
    这位大哥用的是grid布局,很受用,主要是那个orient='horizontal'才是解决我的实际问题(虽然很low)
    这里写图片描述


    问题得到解决,放上测试代码!

    # -*- coding: utf-8 -*-
    from tkinter import *
    root = Tk()
    
    lb = Listbox(root,exportselection=False,height=3)
    list_item=['1', '2', '3', '4这里很长我需要拽过来~~~~~~~~~~~~~~~','5','6','7']
    for i in list_item:
        lb.insert(END,i)
    
    scr1 = Scrollbar(root)
    lb.configure(yscrollcommand = scr1.set)
    scr1['command']=lb.yview
    scr1.grid(row=5,column=4)
    
    scr2 = Scrollbar(root,orient='horizontal')
    lb.configure(xscrollcommand = scr2.set)
    scr2['command']=lb.xview
    scr2.grid(row=6,column=5)
    
    scr3 = Scrollbar(root)
    lb.configure(yscrollcommand = scr3.set)
    scr3['command']=lb.yview
    scr3.grid(row=5,column=6)
    
    lb.grid(row=5,column=5)
    root.mainloop()

    这里写图片描述

    三个进度条都可以拖拽,满足我的需求。希望对你也有帮助!


    最后说上一句,我很讨厌这样的闭塞式交流,简直呵呵,闭门造车吃枣药丸!

    这里写图片描述
    如果你是新浪博客用户,并且登录状态,那么这篇文章很好


    so peace out,guys!
      have a good night!
    
    展开全文
  • 1. grid中的一些参数:需要声明的是,行列大小由该列/行最大组件大小所决定!!column: 对应的放置的所在的列序号columnspan: 表示该组件需要横跨多少列row: 对应的放置的所在的行序号rowspan: 表示组件需要横跨...

    1. grid中的一些参数:需要声明的是,行列大小由该列/行中最大组件大小所决定!!

    column: 对应的放置的所在的列序号

    columnspan: 表示该组件需要横跨多少列

    row: 对应的放置的所在的行序号

    rowspan: 表示组件需要横跨多少行

    ipadx: 需要注意,这个参数表示x方向的内部填充,即以内部颜色为标准向左右方向扩展

    ipady: 同上

    padx: 这个是表示x方向的外部填充

    pady: 同上

    例子如下:

    import tkinter as tk 
    
    windows = tk.Tk()
    windows.geometry('500x500') ## 规定窗口大小500*500像素
    windows.resizable(False, False) ## 规定窗口不可缩放
    lab1 = tk.Label(windows, text='lab1', height=1, width=15, bg='blue', fg='white')
    lab1.grid(row=0, column=0, padx=5, pady=5)
    lab2 = tk.Label(windows, text='lab2', height=1, width=15, bg='blue', fg='white')
    lab2.grid(row=0, column=1, ipadx=5, ipady=5)
    lab3 = tk.Label(windows, text='lab3', height=1, width=15, bg='red', fg='white')
    lab3.grid(row=0, column=2)
    windows.mainloop()
    

    390d402fc4653a58770e7540dfc5d55d.png

    图片中lab1附近白色的部分就是外部填充的,根据外部颜色来向外扩展;lab2中明显蓝色变大,是内部填充,根据内部颜色向外扩展, 而lab3之所以看上去和lab1相同是因为第一行(row=0)的大小已经被lab1扩展了5个像素,所以lab3想当与一个小盒子放在大盒子里居中放置,看上去和lab1相同。

    2. tkinter中Text的动态显示问题:

    tkinter中的Text组件能够显示文本,我在做自然语言处理相关软件时经常用到,在这我之前遇到如何动态显示输出的情况。我的解决方法是使用Text组件的update()方法,因为窗口的刷新需要事件的触发才能刷新,而文本的动态刷新我们只需要把Text对象保存,每次需要插入文本时使用如下的方式来及时更新:

    ## 格式化输出的字符串
    textvar = "Step:%3d,Train_loss:%9g,Train_accuracy: %g" %(itr, loss_train, accuracy_train)
    ## 插入对应的Text对象中
    tebox.insert('insert', textvar+'n')
    插入后及时的更新
    tebox.update()

    当然,可以使用多线程技术保证windows的mainloop()方法能够一直等待事件的发生,而令一条线程工作的同时实时更新Text组件。

    1606c81285a6c0544bc1fe6fd0328ab2.png

    以上这篇Python tkinter的grid布局及Text动态显示方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

    推荐学习课程:

    Python Tkinter 绘图项目 - 网易云课堂study.163.com
    展开全文
  • 在使用Tkinter模块编写图像界面时,经常用到pack()和grid()进行布局管理,pack()参数较少,使用方便,是最简单的布局,但是当控件数量较多时,可能需要使用grid()进行布局(不要在同一个窗口同时使用grid()和pack()...
  • tkintergrid布局合并单元格 rowspan 合并多行,比如:Label(root,text="table",width=10,height=2,),grid(row=0,column=0,rowspan=2) 这句话的意思是从第0行第0列开始,合并两行,最后就是第0行和第1行合并在...
  • 合并多行,比如:Label(root,text="table",width=10,height=2,),grid(row=0,column=0,rowspan=2) 这句话的意思是从第0行第0列开始,合并两行,最后就是第0行和第1行合并在一起了,但是还是只有一列 columnspan ...
  • python3中,Tkinter中关于grid布局说明

    千次阅读 2017-12-14 09:56:11
    python3中,Tkinter中关于grid布局说明
  • Tkintergrid所有属性详解

    千次阅读 2019-12-04 15:19:14
    我理解的grid方法就是需要将容器如何放置在你的窗口上面,主要是将窗口划分为一些行列的网格,理解方式可以按照excel的行列理解,少许不同的就是row和column的数值在grid中是相对的大小,而不是excel绝对位置的...
  • Tkinter-Grid的用法

    千次阅读 2018-07-22 21:23:40
    ''Tkinter教程之Grid篇'''# Tkinter参考最推荐使用的一个布局器。实现机制是将Widget逻辑上分割成表格,在指定的位置放置想要的Widget就可以了。'''1.第一个Grid例子'''# -*- coding: cp936 -*-# 使用grid来...
  • #grid 方法是一种以格状或者类似Excel电子表格方式包装和定位窗口组件的方法。grid语法如下: # grid(options,...) #options 可以是 row,column,padx,pady, rowspan,columnspan,sticky #1. row 和 column 可以...
  • 我在这里主要说一下tkinter中3种布局方式中的grid布局,在之前写个比较简单的软件的时候遇到了写问题,在此记录下来。 1. grid中的一些参数:需要声明的是,行列大小由该列/行中最大组件大小所决定!! column: ...
  • Python tkintergrid布局及Text动态显示

    千次阅读 2018-02-20 15:48:57
    Python tkinter的grid布局及Text动态显示 在python中gui编程有很多中选择,如果是相对简单的gui的话使用python自带的tkinter即可,但是由于...我在这里主要说一下tkinter中3种布局方式中的grid布局,在之前写个比较...
  • I am creating a frame the uses the grid manager. And I have a label widgets in it. I want the label widget to fill to the frame that it is in. But instead the frame re sizes itself to the label widget...
  • 之前跟大家讲过登录界面是...以及给大家介绍下用到的代码功能,一起来看下吧~grid布局管理器的工作方式就是设想将父窗口空间划分为网格,并在网格布置控件。例如如下的小窗口就可以看做一个三行两列的网格。这个画...
  • 在很久之前,我发过一篇...tkinter 共有三种几何布局管理器,分别是:pack布局,grid布局,place布局:  “Grid”兼具功能,灵活性和易用性,以及它与当今布局的自然匹配(依赖于小部件的对齐)使其成为一般...
  • Tkinter参考最推荐使用的一个布局器。实现机制是将Widget逻辑上分割成表格,在指定的位置放置想要的Widget就可以了。 使用grid显示窗体的主要流程: self.thing = constructor(parent,……)#constructor可以...
  • 之前跟大家讲过登录界面是...以及给大家介绍下用到的代码功能,一起来看下吧~grid布局管理器的工作方式就是设想将父窗口空间划分为网格,并在网格布置控件。例如如下的小窗口就可以看做一个三行两列的网格。这个画...
  • 在python中gui编程有很多中选择,如果是相对简单的gui的话使用python自带的tkinter即可,...我在这里主要说一下tkinter中3种布局方式中的grid布局,在之前写个比较简单的软件的时候遇到了写问题,在此记录下来。1....
  • 在使用Tkinter模块编写图像界面时,经常用到pack()和grid()进行布局管理,pack()参数较少,使用方便,是最简单的布局,但是当控件数量较多时,可能需要使用grid()进行布局(不要在同一个窗口同时使用grid()和pack...
  • from Tkinter import *root = Tk()root.columnconfigure(0, weight=1)Text(root).grid(row=0, column=0)root.mainloop()效果就是Text不会随着窗体增大而自动增大,其实只要能够横向自动增大就可以了,但好像找不到...
  • 什么时候使用Grid管理器grid管理器是Tkinter里面最灵活的几何管理布局器。如果你不确定什么情况下从三种布局管理选择,你至少要保证自己会使用grid。当你设计对话框的时候,grid布局管理器是一个非常方便的工具。...
  • tkinter 窗体grid布局最大化并填充

    万次阅读 2018-07-08 22:44:51
    grid布局作为tkinter最常用最灵活的布局方式,可以方便的在子控件嵌套新的grid布局,从而创建复杂的窗体结构。使用方法如下:frm=Frame(root,widht=800,width=480);lab=Label(frm,text='test');lab.grid(row=0...
  • tkinter中grid最好的总结

    千次阅读 2015-06-03 17:40:42
    Tkinter参考最推荐使用的一个布局器。实现机制是将Widget逻辑上分割成表格,在指定的位置放置想要的Widget就可以了。 使用grid显示窗体的主要流程:  self.thing = constructor(parent,……)#...

空空如也

空空如也

1 2 3 4 5 ... 14
收藏数 267
精华内容 106
关键字:

tkinter中grid