精华内容
下载资源
问答
  • 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推荐的布局方式。


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

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

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

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

    展开全文
  • tkinter.pack设计复杂界面布局

    万次阅读 多人点赞 2018-11-04 12:41:59
    对程序员来说,界面设计的实现,要解决的一个主要问题就是如何根据...如果你对以上用tkinter.pack实现的界面布局有兴趣,觉得有些实现效果可以参考借鉴,请继续阅读下面的内容。 一. pack的组件空间布局原理分析 ...

    对程序员来说,界面设计的实现,要解决的一个主要问题就是如何根据界面设计的需求,将组件以规定的大小放置在规定的位置。tkinter是python语言中常用的界面实现模块,其中pack()方法,可创建浮动,自动伸缩扩展的软件界面,如以下界面。

    如果你对以上用tkinter.pack实现的界面布局有兴趣,觉得有些实现效果可以参考借鉴,请继续阅读下面的内容。

    一. pack的组件空间布局原理分析

    用pack进行的布局界面组件,可用以下一些界面布局空间来进行分析

    side = top 的布局空间

    side = left 的布局空间

    1. 容器可用空间 

    系统严格按代码的前后组织顺序依次排列组件,前辈组件还没有占据的空间,是当前组件的可用空间,pack布局是在当前组件的可用空间内进行的。如上图的黑边白底的区域。(为了说明,我留出padding空间,若没有padding,组件将占据整个目前可用空间)

    2.组件原始大小可见空间

    设置了width, height, 或由具体内容确定的组件原始大小,也就是可以看得见的组件宽高。如上图的黄色区域。

    3.组件的独占空间

    组件不单只占据它原始可见的位置,而是会同时占据可用空间的整行空间或整列空间。如上图红色区域。

    side = top / bottom 时,组件占据整行,后辈组件只能依次排在它的下面 / 上面;组件为上下排列方式

    side = left / right 时, 组件占据整列,后辈组件只能依次排在它的右边 / 左边;组件为左右排列方式

    pack() , 我分析下来,其实就是 pack(side=top)

    组件独占空间,没有进行填充(fill)时,不可见,但我们必须了解到它的存在,因为它直接影响组件本身及后辈组件的布局。

    组件独占空间,是固有的,其它后辈组件绝对不可能进入该空间,后辈组件最多只能紧靠它。

    4. 组件可扩展空间

    组件独占空间的另一个方向,是组件的可扩展空间方向。如上图的浅蓝色区域。

    side = top / bottom 时,组件独占整行,并可向整列方向进行扩展。

    side = left / right 时,组件独占整列,并可向整行方向进行扩展。

    组件可扩展空间,没有进行填充(fill)时,也是不可见的,但它同样会直接影响自身和后辈组件的布局,必须掌握它的空间存在。

    若设置了 expand = yes, 则启用可扩展空间;若 expand = no, 则不启用可扩展空间。

    组件可扩展空间,是动态的,是可以被后辈组件的独占空间占据压缩的,后辈组件可以从前辈可扩展空间的边缘开始入侵,直至压缩到前辈组件自身的独占空间为止。 

    5. 组件占用总空间

    组件独占空间 + 组件可扩展空间,就是当前组件的总占用空间,若没有启用组件扩展空间(expand = no),则只包含组件独占空间。

    接下来的 锚定位(anchor)和填充(fill),都是基于组件的占用总空间来进行处理的。

    6. 空间定位和填充

    锚定位(anchor ),加 padx, pady , 可将组件安排在指定位置

    锚定位有9个方向,缺省为 center, 居中

    若 side = top / bottom ,  expand=no, 则合并到一行,即NW, W, SW的效果一样,其他同理。

    若 side = left / right,  expand = no, 则合并到一列,即NW, N, NE的效果一样,其他同理

    填充(fill)组件,可以将组件的可见,可操作范围充满指定区域

    填充的方式有4种,缺省的方式是(none),不填充。

     

    二. 单组件布局的分析步骤

    以上描述的pack布局原理,需要仔细理解和掌握,这是pack布局的基础,当我们理解这些原理后,就可以用来控制单个组件的位置了。

    基本分析步骤为:

    1. 明确当前容器的可用空间范围

    2.分析是用上下排列方式(side=top / bottom),还是左右排列方式(side=left/right)

    3.分析是否需要启用扩展空间,若需要则设置 expand = yes, 否则保持缺省值 expand = no

    4.利用锚定位(anchor),确定组件的具体位置

    5.利用填充(fill), 对组件的可见区域进行填充

     

    举例分析

    设置代码

    布局效果

    说明

    .pack(side=‘top‘)

    独占整行,缺省居中

    .pack(side='top', anchor='sw')

    没有启用可扩展空间,只独占行,锚定位 nw, w, sw 都一样,定位在西边

    .pack(side='top', expand='yes', anchor='sw')

    启用可扩展空间,除了独占的行空间,还扩展到了容器可用空间的所有列空间,锚定位'sw' ,定位到了容器的西南边

    .pack(side='top', expand='yes')

    启动扩展空间,没有设置anchor,则缺省居中(整个组件占用空间的中间,不同于第1个例子)

    .pack(side='top', expand='yes', fill='y')

    启用扩展空间,定位完后,进行“y”轴方向的填充,填满整个占用空间的列

    .pack(side='top', fill='y')

    没有启用扩展空间,当选择进行“y”方向填充时,也只是在独占的行空间内进行“y”方向填充

     

    三.  多组件布局的分析

    我们现在基本掌握了单个组件的布局定位分析方法,而实际的软件界面,一定是多组件的综合布局,涉及多组件之间的相互关系和影响。以上所有讲到的单组件布局分析,都有一个前提,就是在已知容器可用空间的前提下, 进行当前组件的布局定位。

     

    整理分析多组件布局的要点

    1. 所有组件按代码的前后组织次序,依次进行布局定位

    2. 设置side = top / bottom 的组件,为上下排列的组件,独占当时可用空间的整行 

    3. 设置side = left / right 的组件,为左右排列的组件,独占当时可用空间的整列

    4. 后辈组件不可进入任何前辈组件的独占空间,不论 side的设置如何,是否相同,一律都是前辈

    5. 组件可扩展空间,是动态的,是可以被后辈组件的独占空间占据压缩的,后辈组件可以从前辈可扩展空间的边缘开始入侵,直至压缩到前辈组件自身的独占空间为止

    6.后辈组件的扩展空间,不能侵占前辈组件的扩展空间;既若扩展空间重叠,前辈享用扩展空间

    7. 若整个界面空间缩小,出现后辈组件独占空间跟前排组件独占空间重叠时,后辈组件将被压缩,直至消失。

    8. 若界面空间继续缩小,小到比组件独占空间小时,组件将被压缩,直至消失。

    9. 空间优先级别为:界面空间 > 前辈组件独占空间 > 后辈组件独占空间 > 前辈组件可扩展空间 > 后辈组件可扩展空间

    10.可利用frame的多层嵌套,进行灵活布局

     

    举例分析:

    设置代码

    布局效果

    说明

    1.pack(side='left', expand='no', anchor='w', fill='y', padx=5, pady=5)
    2.pack(side='top')
    3.pack(side='right')
    4.pack(side='bottom')

    块1:

    第一个组件,可用空间为整个界面空间,靠左,独占列,不启动扩展空间,按“y”方向填充,周围有5个像素的padding

     

    块2:

    可用空间从块1的右边缘开始,靠上,独占行,位置居中,但注意是从块1右边缘到界面边缘的中间位置,而不是整个界面的中间位置

     

    块3:

    靠右,居中;其上下可用空间大小是块2的下边缘,到界面边缘

     

    块4

    靠下,居中;其左右可用空间大小是从块1的右边缘 到 块3的左边缘

    1.pack(side='left', expand='yes', fill='x')
    2.pack(side='top')
    3.pack(side='right', expand='yes', fill='x')
    4.pack(side='bottom')
     

    这个例子比较复杂点

    块1:

    启用了扩展空间,往“x”行方向填充,但被块2,块3,块4的独占空间压回到了现在的大小。

     

    块2:

    同上,始终位于块1右边缘和界面边界的中间靠上位置

     

    块3:

    启用了扩展空间,但也越不过块4的独占列空间

     

    块4:

    始终位于块1,块3的中间位置靠下

    1.pack(side='left', expand='no', fill='y')
    2.pack(side='top', fill='x')
    3.pack(side='right', expand='yes', fill='both')

    一个很常规的导航界面设置

    块1:导航栏

    靠左,上下填充,不可扩展

     

    块2:标题栏

    靠上,左右扩展

     

    块3:内容栏

    位置无所谓,全面扩展填充

     

     

    四. 代码演示

    我写了一个布局演示程序,包含文章开头展示的界面,可以对照界面实际效果和具体代码,来了解实现的细节。另外提供了单组件和多组件的演示工具,可以调整设置,观察效果,来理解和掌握pack布局的基本方法。演示程序中还包括一些其它窗体布局和实现的方法,希望对大家有帮助。

    源代码位置

    https://github.com/EdwinZhang1970/Python/tree/master/tkinter-pack%20Demo

     

     

     

     

     

     

    展开全文
  • Tk布局管理器TKinter布局管理器能够控制组件位置摆放,当调整窗口的大小,布局管理器会自动调整窗口中各组件的大小和位置TKinter布局管理器提供三种布局方式:Pack布局Grid布局Place布局Pack布局管理器一个复杂的...
    7d5513946ef00599f6349e44d13f225d.png

    Tk布局管理器

    TKinter布局管理器能够控制组件位置摆放,当调整窗口的大小,布局管理器会自动调整窗口中各组件的大小和位置

    TKinter布局管理器提供三种布局方式:

    • Pack布局
    • Grid布局
    • Place布局

    Pack布局管理器

    一个复杂的界面,其实都可以分解为水平排列和垂直排列,Pack 布局既可实现水平排列,也可实现垂直排列,然后再通过多个容器进行组合,就可以开发出更复杂的界面

    # -*- coding:utf-8 -*-from tkinter import * if __name__ == "__main__": mw = Tk() # 设置窗口标题 mw.title('Pack布局') for i in range(3): lab = Label(mw, text="第%d个Label" % (i + 1), bg='#326191') # 调用pack进行布局 lab.pack() mw.mainloop()

    上面程序创建了一个窗口,在窗口内添加了三个 Label,并使用Pack 布局

    组件支持pack方法,其常用参数:

    • anchor:指定组件摆放容器内位置,前提是可用空间大于组件大小,参数取值:
    • N(北,代表上)
    • E(东,代表右)
    • S(南,代表下)
    • W(西,代表左)
    • NW(西北,代表左上)
    • NE(东北,代表右上)
    • SW(西南,代表左下)
    • SE(东南,代表右下)
    • CENTER(中,默认值)
    • expand:是否拉伸,bool值,当父容器大于子组件时
    • fill:设置组件是否沿水平或垂直方向填充,参数取值:
    • NONE 表示不填充
    • X
    • Y
    • BOTH 表示沿着两个方向填充
    • ipadx:指定组件在 x 方向(水平)上的内部留白大小
    • ipady:指定组件在 y 方向(水平)上的内部留白大小
    • padx:指定组件在 x 方向(水平)上与其他组件的间距大小
    • pady:指定组件在 y 方向(水平)上与其他组件的间距大小
    • side:设置组件的添加位置,参数取值:
    • TOP
    • BOTTOM
    • LEFT
    • RIGHT

    使用Pack布局更复杂例子

    # -*- coding:utf-8 -*-from tkinter import *class App(object): def __init__(self, mw): self.mw = mw self.initWidgets() def initWidgets(self): # 创建第一个容器 fm1 = Frame(self.mw) # 该容器放在左边排列 fm1.pack(side=LEFT, fill=BOTH, expand=YES) # 向fm1中添加3个按钮 # 设置按钮从顶部开始排列,且按钮只能在垂直(X)方向填充 Button(fm1, text='左一').pack(side=TOP, fill=X, expand=YES) Button(fm1, text='左二').pack(side=TOP, fill=X, expand=YES) Button(fm1, text='左三').pack(side=TOP, fill=X, expand=YES) # 创建第二个容器 fm2 = Frame(self.mw) # 该容器放在左边排列,就会挨着fm1 fm2.pack(side=LEFT, padx=10, expand=YES) fm2.pack(side=LEFT, padx=10, fill=BOTH, expand=YES) # 向fm2中添加3个按钮 # 设置按钮从右边开始排列 Button(fm2, text='中一').pack(side=LEFT, fill=Y, expand=YES) Button(fm2, text='中二').pack(side=LEFT, fill=Y, expand=YES) Button(fm2, text='中三').pack(side=LEFT, fill=Y, expand=YES)  # 创建第三个容器 fm3 = Frame(self.mw) # 该容器放在右边排列,就会挨着fm1 fm3.pack(side=RIGHT, padx=10, fill=BOTH, expand=YES) # 向fm3中添加3个按钮 # 设置按钮从底部开始排列,且按钮只能在垂直(Y)方向填充 Button(fm3, text='右一').pack(side=BOTTOM, fill=Y, expand=YES) Button(fm3, text='右二').pack(side=BOTTOM, fill=Y, expand=YES) Button(fm3, text='右三').pack(side=BOTTOM, fill=Y, expand=YES)if __name__ == "__main__": mw = Tk() mw.title("Pack布局") display = App(mw) mw.mainloop()
    总结:对于使用 Pack 布局来说,首先要做的事情是将程序界面进行分解,分解成水平排列的容器和垂直排列的容器(有时候甚至要容器嵌套容器), 然后使用多个 Pack 布局的容器将它们组合在一起

    Grid布局管理器

    Grid布局把组件空间分解成一个网格,即按照行、列的方式摆放组件,组件位置由其所在的行号和列号决定 行号相同而列号不同的几个组件会被依次上下排列,列号相同而行号不同的几个组件会被依次左右排列

    组件支持grid()方法,其常用参数:

    • 支持 ipadx、ipady、padx、pady参数,用法与pack()方法一致
    • column:指定将组件放入哪列,第一列的索引为 0
    • columnspan:指定组件横跨多少列
    • row:指定组件放入哪行,第一行的索引为 0
    • rowspan:指定组件横跨多少行
    • sticky:类似于pack()方法的anchor选项
    • N(北,代表上)
    • E(东,代表右)
    • S(南,代表下)
    • W(西,代表左)
    • NW(西北,代表左上)
    • NE(东北,代表右上)
    • SW(西南,代表左下)
    • SE(东南,代表右下)
    • CENTER(中,默认值)

    使用 Grid 布局来实现一个计算器界面

    # -*- coding:utf-8 -*-from tkinter import *class App(object): def __init__(self, mw): self.mw = mw self.initWidgets() def initWidgets(self): # 创建一个输入组件 e = Entry(relief=SUNKEN, font=('Courier New', 24), width=25, bg='gray') # 对该输入组件使用Pack布局,放在容器顶部 e.pack(side=TOP, pady=10) p = Frame(self.mw) p.pack(side=TOP) # 定义字符串的元组 names = ("0" , "1" , "2" , "3" , "4" , "5" , "6" , "7" , "8" , "9" , "+" , "-" , "*" , "/" , ".
    展开全文
  • 相关学习视频:Python Tkinter 数字时钟小项目​ke.qq.com如果你本身具备了一定Qt的使用经验,转移到pyqt并不会很复杂。而且与tkinter相比,pyqt可以用拖控件的方式设计界面,tkinter却只能自己写代码。如果你想做一...

    相关学习视频:

    Python Tkinter 数字时钟小项目ke.qq.com
    61e4670bbf550b6670e88c9a47c1d809.png

    如果你本身具备了一定Qt的使用经验,转移到pyqt并不会很复杂。而且与tkinter相比,pyqt可以用拖控件的方式设计界面,tkinter却只能自己写代码。如果你想做一个复杂点的项目,动辄上千行代码就出去了,写起来很累,但写完了会很有成就感。然而,虽然代码很多,但有很多地方可以通过复制粘贴来重现,不要以为上千行代码就很复杂。Python Tkinter 数字时钟小项目如果你本身具备了一定Qt的使用经验,转移到pyqt并不会很复杂。而且与tkinter相比,pyqt可以用拖控件的方式设计界面,tkinter却只能自己写代码。如果你想做一个复杂点的项目,动辄上千行代码就出去了,写起来很累,但写完了会很有成就感。然而,虽然代码很多,但有很多地方可以通过复制粘贴来重现,不要以为上千行代码就很复杂。

    那么我们为什么还要使用tkinter呢?在我看来主要有以下三点原因:

    其一,tkinter是python自带的库,无需安装,性能很好而且具有良好的技术支持。

    其二,门槛低,即使你只学过python也能很快上手。虽然tkinter里面有很多组件,每个组件又有各自的方法、参数等等,但通用性很高,而且可以即查即用。

    其三,tkinter制作界面的能力被很多人低估了,其实它也可以做出漂亮的UI。

    我学习tkinter已经有两年多的时间了,在专栏里陆陆续续发过一些实战项目。之前我就说过,个人认为学习tkinter最好的方法是以练代学、边查边做。这次我想自己写一本tkinter的学习教程,其中结合了大量的实战项目,包含了许多个人见解和学习经验,或许是你在其他地方搜不到的。

    在学习本书之前,你唯一需要掌握的就是python的基础语法知识。另外,本书所有代码是基于python3.x的版本。


    1.认识tkinter

    1.1 tkinter是什么?

    Tkinter 模块(Tk 接口)是 Python 的标准 Tk GUI 工具包的接口,TCL/Tk的GUI工具组。Tk 和 Tkinter 可以在大多数的 Unix 平台下使用,也可以应用在 Windows 和 Mac 系统里。在使用Tkinter时,我们不需要关注TCL/Tk的实现,而可以将Tkinter看成python一个独立的扩展。

    你可能注意到了,为什么这里的Tkinter变成大写了呢?其实,如今网上的各类教程里都习惯写作Tkinter,这是由于在Python3之后,它才改名为tkinter,而后文会统一采用tkinter的写法。

    tkinter模块下,还有许多增强模块,如tkinter.ttk 和 tkinter.tix等,它们为tkinter补充了更多的组件。另外,scrolledtext提供了带滚动条的文本框,messagebox、filedialog等模块提供了各种对话框。本书的内容是以tkinter基本组件的学习为主(如图1.1),在实战项目需要时,会介绍其他模块的相关内容。

    1a0206e07b610777aa0ddbf220a861aa.png
    图1.1 tkinter的基本组件

    由于 tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能导入库、然后创建GUI程序了。就连 IDLE 都是用 tkinter 编写而成,因此对于简单的图形界面 ,tkinter 无疑是能应付自如。

    1.2 创建第一个tkinter程序

    创建程序的第一步,一定是要导入tkinter模块,通常我们会用以下两种方式:

    from tkinter import *
    import tkinter as tk

    如果采用第一种,在引用组件时不需要加前缀,第二种方式则必须加上tk.的前缀。当然,这两种引用方式仅限于tkinter本身的模块,不包括上文提到的扩展模块。以ttk为例,它的导入方式应该为:

    from tkinter import ttk

    第二步,创建控件实例:

    root = Tk()

    第三步,进入事件循环:

    root.mainloop()

    mainloop方法一定要放在最后执行。如果我们把tkinter程序看成一本连环画的话,那么mainloop方法就是翻阅连环画的动作,没有它是无法实现连环画效果的。也就是说,如果你想要设计并布局一个界面,其内容应该放在创建控件实例和进入事件循环之间

    from tkinter import *
    
    root = Tk()
    '''
    在这里实现界面
    '''
    root.mainloop()

    e8a5f73fdedffe6939132755d757fc54.png
    图1.2 空白界面

    如图1.2就是我们创建的一个空白界面,它没有任何的功能。tkinter默认的窗口大小是200x200,默认标题是tk。我们可以用下面的方法获取它的大小:

    from tkinter import *
    
    root = Tk()
    root.update()  #一定要刷新界面,否则打印出的值是1
    print("当前窗口的宽度为",root.winfo_width())
    print("当前窗口的高度为",root.winfo_height())
    root.mainloop()

    在上面这段代码中,我们用update方法刷新了界面,这又是为什么呢?

    其实,利用winfo_width和winfo_height获得的宽高其实是tkinter初始化时的值,因此在创建实例后,必须刷新界面,才能得到它当前正确的宽和高。

    既然能够获取窗口大小,就一定有办法自定义。这次我们要用到geometry方法:

    root.geometry("100x100") #“宽度x高度”

    奇怪的事情发生了,创建的窗口宽度不是100,而是120,这是咋回事呢?

    192b4f442185e02abcd2ccbd28ee7dff.png
    图1.3 奇怪的现象

    原来啊,tkinter帮我们创建了窗口装饰器,装饰器有以下几个部分:图标、标题、最大化、最小化和关闭按钮。在win10系统下,这些装饰器的最小宽度就是120,高度则不受影响。也就是说,图中灰色部分,才是我们创建的界面,最上方的装饰器是自带的

    接下来,我们再用title方法为界面取一个名字吧:

    from tkinter import *
    
    root = Tk()
    root.geometry("300x300") 
    root.title("林四儿的tkinter教程")  #设置标题
    root.mainloop()

    678e87b7efbc53a2b2697014d08d879b.png
    图1.4 给程序命名

    但是这自带的图标也太丑了,有没有办法换成自己的图片呢?办法当然有,不过一定要事先准备好.ico文件,然后输入正确的路径:

    from tkinter import *
    
    root = Tk()
    root.geometry("300x300") 
    root.title("林四儿的tkinter教程")
    root.iconbitmap('icon.ico')  #设置图标,仅支持.ico文件
    root.mainloop()

    到这里,第一个tkinter程序总算完成了:

    60be8acbc147c6717bf72c5ceece3ed6.png
    展开全文
  • 原文来自FishC。pack,grid,place均用于管理在一个父组件下的所有组件的布局,其中:1)pack是按添加...如需创建相对复杂布局结构,则建议使用多个框架(frame)构成,或者使用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...
  • 参考下下面的实例:测试开发实战:python GUI作业:tkinter控件改变背景色​zhuanlan.zhihu.com测试开发实战:python GUI作业:tkinter grid布局​zhuanlan.zhihu.com使用tkinter生成如下窗口:参考资料参考代码#!...
  • pack布局管理器是早期Tkinter中常用的一种布局方式。这种方式应对简单的情况很容易,但是随着要求越来越复杂布局的难度会迅速提高。本文介绍另外一种方式:grid布局管理器。grid这个英文单词是格子,网格的意思。...
  • pack布局管理器是早期Tkinter中常用的一种布局方式。这种方式应对简单的情况很容易,但是随着要求越来越复杂布局的难度会迅速提高。本文介绍另外一种方式:grid布局管理器。 grid这个英文单词是格子,网格的意思...
  • 要是想在图形界面中去找一个非常简单的布局控件,place一定是首当其中,初了解 tkinter模块时候,最先接触的就是这个布局,因为足够的简单还好调用,一般情况下我们会只使用这个做布局,但是有一点是需要大家注意的...
  • 从本章节开始就进入Tkinter 详细学习内容,在对这些复杂问题的讨论和讲解过程中,我这里尽量使用较为简单和通俗的语言进行描述,当然,在理解和概念性上每个人都会有所差异,如果在学习过程中有任何疑问可以留言或者...
  • Tkinter有三个布局管理器,分别是pack、grid和place,其中: pack是按添加顺序排列组件。 grid是按行/列形式排列组件。 place允许程序员指定组件的大小和位置。 pack pack其实之前的例子一直在用,对比grid管理器,...
  • Tkinter LabelFrame

    2019-10-05 07:56:19
    其主要目的是作为一个间隔或复杂的窗口布局容器. 在一个labelframe一个简单的容器构件。其主要目的是作为一个间隔或复杂的窗口布局容器. 该部件有一帧的功能,加上能够显示标签. 语法: 这里是一个简单的语法来...
  • Tkinter 组件

    2018-06-24 21:19:59
    菜单1.Label组件标签组件显示文本和位图2.Button组件按钮组件可与函数关联3.Checkbutton组件多选按钮(常用二选一)可与函数关联4.Radiobutton组件多选按钮(常用多选一)可与函数关联5.Frame框架框架控件在复杂的...
  • Tkinter-Frame

    千次阅读 2018-07-06 16:52:12
    The Tkinter Frame WidgetFrame(框架)组件是... Frame 组件主要用于在复杂布局中将其他组件分组,也用于填充间距和作为实现高级组件的基类。用法 Frame 组件可以用于装饰界面:1. from tkinter import *2. ...
  • Frame框架部件是Tkinter的容器部件,负责安排其它部件的位置,Frame组件采用在屏幕上的矩形区域组织布局,并提供其它部件的填充,也包括Frame框架部件本身,一个框架也可以用来作为一个基础类,以实现复杂的构件。...
  • Tkinter画布-Canvas

    2019-10-05 07:56:03
    Python - Tkinter画布-Canvas: Canvas是一个长方形的面积,图画或其他复杂布局。可以放置在画布上的图形,文字,部件,或是帧 Canvas是一个长方形的面积,图画或其他复杂布局。可以放置在画布上的图形,文字,...
  • 其主要目的是作为一个间隔或复杂的窗口布局容器在一个labelframe一个简单的容器构件。其主要目的是作为一个间隔或复杂的窗口布局容器.该部件有一帧的功能,加上能够显示标签.语法:这里是一个简单的语法来创建这个...
  • python_tkinter画布

    千次阅读 2017-10-26 18:54:02
    Canvas是一个长方形的面积,图画或其他复杂布局。可以放置在画布上的图形,文字,部件,或是帧. 语法: 这里是一个简单的语法来创建这个widget: w = Canvas ( master, option=value, ... )参数: master: 这代表...
  • Canvas是一个长方形的面积,图画或其他复杂布局。可以放置在画布上的图形,文字,部件,或是帧.语法:这里是一个简单的语法来创建这个widget:w = Canvas ( master, option=value, ... )参数:master:这代表了父窗口....
  • Python GUI - Tkinter LabelFrame

    千次阅读 2017-02-13 17:22:21
    其主要目的是作为一个间隔或复杂的窗口布局容器 在一个labelframe一个简单的容器构件。其主要目的是作为一个间隔或复杂的窗口布局容器. 该部件有一帧的功能,加上能够显示标签. 语法: 这里是...
  • python tkinter 计算器V1.0

    2020-12-30 17:53:44
    python tkinter 系列,实现计算器基本加减乘除的运算 一、最终成果物 二、代码详解 1.基本框架 参考电脑自带的计算机,除去一些复杂的符号,只考虑简单的加减乘除,设计整体的框架如下: 1.1 主窗口整体布局 1)...
  • Tkinter 组件详解(五):Frame

    万次阅读 多人点赞 2018-12-20 10:04:03
    Tkinter 组件详解之Frame ...Frame 组件主要用于在复杂布局中将其他组件分组,也用于填充间距和作为实现高级组件的基类。 用法 Frame 组件可以用于装饰界面: import tkinter as tk master = ...
  • Canvas,是TKinter中用于图形绘制或复杂的图形界面布局。其中文翻译为:画布。可以简单理解为,canvas就是图画的载体。创建Canvas对象,并显示在窗口中Canvas是属于tkinter中的一个类,所以在使用是,我们应先导入...
  • 一、 引言 老猿最开始是准备就tkinter单独开一个...二是tkinter模块老猿认为还不成熟,具体来说,老猿遇到了一个问题,这个问题至今没有解决,这个问题老猿并不认为是单一的问题,而是对于复杂的需求tkinter的响应...
  • Canvas,是TKinter中用于图形绘制或复杂的图形界面布局。其中文翻译为:画布。可以简单理解为,canvas就是图画的载体。 创建Canvas对象,并显示在窗口中 Canvas是属于tkinter中的一个类,所以在使用是,我们应先导入...
  • 图文摘要伴随着期刊网络化的进程,纸版的销量越来越少,目录页码查找文章的功能显得越来越不重要,但在目录中恰当的使用图片会让复杂抽象的科学内容更容易理解并具有传播力,成为编辑和审稿人迅速了解论文基本内容的...
  • tkinter.pack设计复杂界面布局 生成canvas def showCanvas(self): #显示画布 self.canvas_1 = tkinter.Canvas(width=500,height=50,bg="red") self.canvas_1.pack(side='top',expand='no',fill='x')

空空如也

空空如也

1 2 3
收藏数 50
精华内容 20
关键字:

tkinter复杂布局