Python中的tkinter怎么做?

这是一个VB6的ADDIN(外接程序),用于使用VB6开发工具直接拖放控件,直接可视化完成Python的TKinter的GUI布局和设计,可以在VB界面上设置控件的一些属性,最终自动生成必要的代码(包括回调函数框架),代码生成后仅需要在对应的回调函数中增加相应的逻辑功能代码即可。

这个工具支持绝大部分TKiner控件,可应付一般GUI的需求。 (列表参见下面的控件说明)。

  • 适用于学习了TKinter并不想太麻烦手写GUI生成和排版代码,也不想用其他第三方工具和框架比如wxPython/PyQt的同学。
  • 适用于界面不太复杂的小程序开发,界面复杂的还是适用wxPython/PyQt等框架吧。
  • 如果软件逻辑不是很复杂,通常一个*.py搞定,不像其他一些辅助框架,需要几个文件。

    (如果不希望py直接解释运行时弹出黑漆漆的命令行窗口,后缀名请改为pyw)

  1. 首先注册此插件,可以使用自带的安装程序,或自己手动完成。

  • 打开VB6,新建一个标准EXE工程,在窗体上设计自己的GUI布局,这个工作估计没有VB基础的同学都可以完成,同时可以设置相应的控件属性。

  • 如果使用自带安装程序安装了插件,现在VB的工具条上应该有一个新图标(一片橙红色羽毛),如果没有,到菜单"外接程序"|"外接程序管理器"里面启动Tkinter Designer,Tkinter Designer图标和菜单应该会出现。

  • 启动Tkinter Designer后,先按“刷新窗体列表”按钮,列出当前工程的所有窗体和控件列表。

  • 逐个确认各控件的输出属性,在要输出的选项前打钩,如果必要,可以在属性列表中双击修改属性的值。(一般情况不需要再修改控件属性)。 Tkinter Designer尽量的将VB控件属性翻译成Tkinter控件属性,比如字体、颜色、初始值、外观、状态等,甚至包括按钮类和菜单的快捷键设置等等。当然了,如果部分属性没有对应关系的,需要在TkinterDesigner界面上设置。

  • 按“生成代码”按钮则在代码预览窗口生成代码,可以双击代码预览窗口放大阅读,也可以直接修改代码。

  • 确认完成后可以将代码拷贝到剪贴板或保存到文件。 布局可以使用百分比定位(相对定位)或绝对坐标定位(按像素定位),百分比定位为有一个好处,主界面大小变化后,控件也可以相对变化大小。如果不希望主界面大小变化后控件跟随变化,可以选择绝对坐标定位。 注:如果修改了以前设计的界面,可以选择仅输出main函数或界面生成类。不影响外部已经实现的逻辑代码。

  • 如果程序有多个GUI界面,可以在VB工程中添加窗体,就可以选择产生哪个窗体的对应代码。

  • 针对结构化代码,如果要在Python代码中引用和修改其他控件的值,可以使用全局字典gComps,这个字典保存了所有的GUI元素和一些对应的控件变量,可以直接使用形如gComps["Text1Var"].set("new Text")的代码来访问对应控件。 如果输出的是面向对象代码,则可以在界面派生类Application中使用self.widgetName方式直接访问对应的控件。

  • 一般的GUI框架都会将UI部分和逻辑代码部分分别放在不同的文件中,在逻辑代码文件中导入UI文件,实现修改UI不影响逻辑代码。因为对于实现简单的程序来说,我偏爱单文件,所以我将UI类和逻辑代码类都放在同一个文件中,在修改界面后,你可以直接覆盖对应的Application_ui类即可实现界面的变更,不过如果增加了新的事件回调函数,需要在子类Application中增加才行。

    1. 标签条在VB和Python中基本一样。可以在文本中插入\n来换行,如果启用ttk,还可以设置wraplength属性。

    2. 对应Python的LabelFrame控件,做为其他控件的容器,或做为界面元素视觉分类。

    3. 对应Python的Button,没有太多区别。 为了代码简洁,窗体的退出按钮可以设置Cancel属性为True,然后程序自动生成 对应Tkinter的destroy回调,这样就不需要再实现一个回调函数。 在VB里面字母前增加一个"&"符号可以直接绑定一个快捷键 'Alt+对应字母', TkinterDesigner也支持此设置,自动生成对应的事件绑定代码。 其他控件比如CheckBox等有"标题"属性的控件一样如此处理。

    4. TkinterDesigner也支持这样的操作,同一父控件的Radiobutton自动成为一组。 如果需要手动处理,你要将需要分成一组的Radiobutton的variable属性设置为同一个变量, 然后各个Radiobutton的value值要不一样(默认为控件名),具体是什么值你可以随便设置, 反正不一样就行,最简单的就是1/2/3等,或者一个设置为man,另一个设置为woman, 在对应的Radiobutton被选择后,variable变量自动设置为对应的value值,读取即可 知道哪个Radiobutton被选中了,反之设置variable变量会导致对应的Radiobutton 被选中。

    5. 组合框在Tkinter中没有对应的控件,比较类似的只有OptionMenu,类似ComboBox 的Style=2 (Dropdown List)时的表现,一个下拉列表,只能在列表中选择一个值, 不能直接输入。所以建议在VB的ComboBox中写下所有的下拉列表值。 如果启用了TTK主题扩展库支持,则直接对应到TTK的Combobox,外形和行为基本 一致。

    6. 列表框对应Python的Listbox,行为也类似,可以在设计阶段设置初始列表。 如果需要滚动,则在适当位置创建滚动条,如果滚动条紧靠着列表框的右边或下边, 并且长度(水平滚动条)或高度(垂直滚动条)差不多,则滚动条和列表框自动绑定, 如果没有自动绑定,则可以在Addin界面选择其xscrollcommand或yscrollcommand 属性为对应滚动条的.set方法。

    7. 简单对应到Python中的Canvas,用做其他控件的容器或画图容器使用。 如果需要滚动,则在适当位置创建滚动条,如果滚动条紧靠着图像框的右边或下边, 并且长度(水平滚动条)或高度(垂直滚动条)差不多,则滚动条和图像框自动绑定, 如果没有自动绑定,可以在Addin界面选择其xscrollcommand和yscrollcommand 属性为对应滚动条的.set方法。

    8. 可以使用VB的菜单编辑器来设计Python的菜单。 在VB中的菜单标题设置为"-"则创建分隔条。 也可以在正常的菜单标题中增加(&+字母)的方式添加 'Alt快捷键'。 除 'Alt快捷键' 外,在VB菜单编辑器中选择菜单对应的快捷键则会直接显示快捷键 信息在菜单标题后面,并自动注册对应的bind命令。

    9. 可以用于组织复杂界面,仅支持水平或垂直线。

    10. 对应到Python的Treeview,树形显示控件,可以选择是否显示标题行, 需要启用TTK主题扩展(默认) 如果需要滚动,则在适当位置创建滚动条,如果滚动条紧靠着TreeView的右边或下边, 并且长度(水平滚动条)或高度(垂直滚动条)差不多,则滚动条和TreeView自动绑定,

    11. 选项卡控件,对应到Python的Notebook,需要启用TTK主题扩展(默认)。 如果要布局各个页面内的控件,按以下步骤:

    12. 然后在PictureBox/Frame内摆放你需要的其他控件,生成代码后此容器内自动添加 到对应的选项页,TkinterDesigner会在后台为您做这一切。 标签页对应的PictureBox/Frame可以放置在窗体的可视范围外,也就是说设计好 对应的选项页后,缩小IDE中的窗体为你需要的大小。
    • 如果使用相对坐标,PictureBox或Frame容器的大小请和TabStrip内部大小一致或 接近,否则选项页内的控件将会通过拉伸或收缩来适配可伸缩来适配可用空间,这样有些 控件看起来会比较怪。如果使用绝对坐标,则PictureBox/Frame可以不用和TabStrip 一样大,PictureBox/Frame内的控件将以TabStrip的左上角为原点放置,大小和长宽比例 会和设计时一致。 所以还是建议如果有TabStrip控件的话,使用绝对坐标。
    • Frame和PictureBox均可作为容器,如果使用Frame作为容器,则其标题可以作为选项页 标题,如果你没有设置选项页标题的话。(选项卡控件的标题设置优先)
    1. tkinter控件没有Tooltip(鼠标悬停提示)属性,所以我实现了一个简单的Tooltip类给tkinter控件加上Tooltip功能,设置VB控件的 ToolTipText属性即自动给对应的控件创建一个Tooltip类。ToolTipText支持自动换行,如果要手动控制换行,也可以使用 '\n'。
    1. 不支持使用控件数组,界面可以显示,但是后面的同名控件名会覆盖前面定义的,导致在代码中无法再和此控件互动。
    2. 窗体的ScaleMode建议保持默认值(vbTwips),如果要设置为其他值,则Frame控件内就不要再放Frame控件了,否则其内部的控件布局错误。

    ttk主题扩展看起来很漂亮,在不同操作系统下界面呈现为本地化风格,建议使用,
    只是要注意以下几个ttk的BUG:

    1. TTK的Entry和Combobox控件背景色设置无效(可以设置,不报错,但是界面不变)。
      1. 支持设计时在窗体上设置分组中其中一个Radiobutton的选中状态。
      1. 支持ToolTipText属性,实现鼠标悬停弹出提示框功能,tkiner没有Tooltip功能,自己实现了一个Tooltip类来支持。
      1. 简单扩展tkinter,隐藏控件的textvariable操作,给控件动态添加setText()/text()函数用于设置和获取对应的字符串。
      1. bugfix:修正在特定条件下因控件创建顺序问题导致Python变量在定义前引用的错误。
      2. 保存代码文件的格式从带BOM的utf-8修改为不带BOM的utf-8。
      1. 添加一个功能:可以将一个磁盘文件编码为Base64字符串,可以用于将一些资源文件保存到python源文件中。
      1. 改变判断python版本的代码,增强兼容性。
      1. 增加窗体的Tag标签处理。
      1. 修正拉丁语系环境下控件小数点变成逗号的问题。
      1. 可以在VB中设置窗体初始坐标。
      2. bugfix:修正LabelFrame的标题字体和颜色设置无效的问题。
      1. bugfix:在窗体目录下同时放置一个ico和一个gif文件时窗体图标文件设置错误。
      1. 增加一个方便一段时间后再次修改GUI的特性:使用控件的Tag属性来保存修改的值。 方法是如果有一些属性不采用默认值,则在Tag属性中采用如下格式填写: p@属性1@属性2@属性n 或 p@属性1=值1@属性2=值2@属性n=值n 每个属性的值是可以忽略的,忽略了值的属性则自动选中对应属性,不修改值。
      2. 增加窗体启动位置属性,可选择启动时在屏幕上居中。
      1. bugfix:修正在配置列表框中选择下列列表时未更新就切换控件导致错误的问题。
      1. 支持自动绑定滚动条到对应控件,只需要在需要滚动的控件右边或下边紧靠着放置合适 长度的滚动条,则滚动条自动绑定之对应控件,不需要再手工选择配置。
      1. 如果VB窗体目录下有一个ico/gif文件,则自动将其作为窗体图标。 (注意:如果目录有多个图标文件,则你要自己在下拉列表中选择一个。)
      2. 支持没有后缀名的主窗体图标(需要手动填写图标文件名)。
      3. 增加cursor属性,用于设置控件的鼠标指针。
      4. 按钮类控件的下划线回调函数使用tk内置的invoke()代替外部实现的xxx_Cmd(), 使用invoke()为模拟用户点击,有更好的视觉反馈效果。
      5. bugfix: 修改Scale的digits等几个属性在ttk样式和创建函数中重复出现的问题。
      1. 增加对VB代码的简单分析,代码中有对应控件的一些事件处理函数则自动生成 tkinter对应的事件注册和回调框架,比如如果VB代码存在Text1_Change函数,则 自动注册和生成控件Text1的Change事件处理回调函数。
      2. 增加对OptionMenu控件的属性设置,适当的参数调整可以让OptionMenu更美观。
      1. 增加对Line控件的支持,可用于组织界面,内部实现为Separator控件,仅支持 水平或垂直样式,如果在VB窗体上画了斜线,则使用其在水平方向或垂直方向的 投影。需要启用TTK主题库。
      2. 增加一个重要特性:可以拖放设计Notebook(选项卡控件)的各选项页内控件。 方法和步骤参加上面的TabStrip控件说明,简单来说就是使用PictureBox或 Frame控件来作为各选项页的容器设计,命名类似:TabStrip1__Tab1等。 这个特性让此ADDIN设计复杂界面成为可能,因为很多复杂的GUI用到选项卡 控件来整理其他小控件,特别是各种配置页面。
      3. 控件的命令回调函数可以直接使用匿名函数lambda。
      4. 完善控件的字体处理,现在除ttk.LabelFrame和Notebook控件因ttk库的BUG外, 其余控件均已实现字体的完美处理。
      5. 增加Treeview的滚动条绑定处理。
      6. 增加代码处理Frame控件的ScaleMode一直保持为vbTwips的BUG,现在可以允许 窗体存在Frame的情况下设置窗体ScaleMode和使用绝对坐标定位。
      7. 增加系统颜色翻译成tkinter颜色的处理,现在控件颜色可以选择各种系统颜色, 或在调色板内直接选择。
      8. bugfix:解决自定义列表框中'第一次'显示下拉组合框时数据显示不全的问题。
      1. 增加滚动条和列表框/多行文本框/图片框的绑定处理,方法是在窗体上对应 控件的旁边放上滚动条,然后在ADDIN界面的控件属性xscrollcommand和 yscrollcommand中选择对应滚动条的set方法即可。
      1. 控件选项增加'字体名'属性处理(之前的版本仅处理大小粗体斜体属性)。
      2. 完善XP风格按钮外观,增加键盘操作。
      1. 卸载程序一并删除注册表中保存的配置项,保证完全卸载。
      2. 换了一个清爽一点的XP风格按钮。
      1. 界面美化:渐变按钮,窗体大小可改变。
      1. 增加窗体消息拦截属性,可以拦截窗体消息,比如可以禁止窗体关闭按钮等。
      2. 删除安装程序中设置VB的IDE为XP样式的代码,以避免360误报有病毒,如果 需要VB的IDE为XP样式,可以自己在网上找一个manifest文件改名为 VB6.EXE.manifest,放到VB6目录下。
      1. 对应一些属性值,如果只有有限的可选值,则可以在下列列表中选择。
      1. 增加多语种支持,语言文件为TkinterDesigner.dll目录下的language.lng, 版本发布时支持简体中文、繁体中文、英文。 如果没有语言文件,显示软件内置的简体中文。
      2. 增加状态栏控件支持,因为TK和TTK都不支持Statusbar,就自己使用Label 简单模拟了一个,支持多窗格,控件类定义直接添加到Python源码。
      3. 支持主窗口的属性设置,比如图标等。
      1. 增加TTK主题扩展库支持,代码不变,界面更漂亮,更Native
      2. 更新安装程序,可以完整卸载此ADDIN了。

大多数程序员在已经准备好分析基础示例之后,都会开始为程序构建一个图形用户界面。

三大Python GUI开源框架,谁才是你的最爱?

在Python中,开始使用GUI编程的步骤并不复杂,但是它们要求用户开始做出一些选择。作为通用编程语言,每个常见操作系统都有可用的解释器,所以创建图形用户界面对于Python来说并不是难事。因为程序员有很多的选择,真正困难的是如何为用户创建一个简单的方式来与程序互动。

在各种各样的平台上都有相应的UI框架,它们可能分别可以在Windows,Mac和Linux平台上运行,也可能可以同时在这三个平台上运行。

“你的应用程序是否有一个传统的图形用户界面?”对于某些应用程序来说,这个答案是肯定的,如果这个应用程序本质上是图形化的,且在本地机器上做了优化或者是在本地运行,那么就要考虑构建一个桌面图形用户界面。如果是更为通用的程序,那么最好添加命令行或者Web界面。

命令行拥有很多优势,例如速度、远程访问、可重用性,可脚本化和控制等等。这对用户来说往往会比图形用户界面更为重要。当然,现在有很多库可以支持设计很好的命令行程序,如Click,Cement和Cliff。

同样的,对于本地运行的程序来说,Web界面也是十分值得考虑的。尤其是当你觉得用户可能希望应用程序能够像Django,Flask或Pyramid这样的项目可以直接远程托管。甚至你可以使用类似pywebview这样的库将Web应用程序包裹在native GUI window。

那么如果来创建一个GUI呢?这里有三个梦幻般的开源库可以推荐给你!

PyQt实现了流行的Qt库,它开辟了在Python中开发应用程序的可能性,而且开发出的应用程序在其他平台上拥有熟悉的外观和感觉。

PyQt可以利用社区中强大的工具和资源,其拥有 commercial和GPL的双重许可,与Qt项目不同,支持PyQt的主要公司都会提供license FAQ,有助于帮助程序员了解这对应用程序意味着什么。

如果有一个包可以被称为“Python的标准GUI工具包”,那么它一定就是Tkinter。Tkinter是Tcl / Tk的封装,是90年代初推出的流行图形界面。选择Tkinter的优势是它拥有大量的资源,包括书籍和代码示例,以及活跃的用户社区,如果您有任何疑问,社区成员都可能会帮助到你。除此之外,还有很多简单的入门示例,而且可读性非常好。

WxPython带来了wxWidgets 跨平台GUI库,支持将本机C++引入到Python中。WxPython是一种稍微更现代化的方法,它看起来比不同操作系统上的Tkinter更加接近原生,因为它不会尝试创建自己的一组小部件。它的入门使用也比较容易,社区中的开发人员也在不断增长,但是需要注意的是,可能需要将wxPython与应用程序捆绑在一起,因为它不会随Python自动安装。

当然,上面这三种开源库并不是唯一的选择,在Python的官方页面上,,你可以找到数十种工具。如果你有其它很好的推荐,欢迎在下方留言评论,同时想更好的学习python可以关注我们!

大多数情况下,Tkinter模块都是您真正需要的,但也有一些额外的模块可供选择。Tk接口位于名为的二进制模块中_tkinter。该模块包含Tk的底层接口,不应直接由应用程序员使用。它通常是共享库(或DLL),但在某些情况下可能会与Python解释器静态链接。

除了Tk接口模块外,Tkinter还包括许多Python模块。两个最重要的模块是Tkinter模块本身,还有一个模块叫做Tkconstants。前者自动导入后者,所以要使用Tkinter,你只需要导入一个模块:

Tk类实例化没有参数。这会创建一个Tk的顶层小部件,它通常是应用程序的主窗口。每个实例都有自己关联的Tcl解释器。

在版本2.4中更改:添加了useTk参数。

Tcl()函数是一个工厂函数Tk,除了不初始化Tk子系统外,它创建的对象非常类似于该类创建的对象。在不希望创建无关的顶层窗口的环境中,或者在无法(如没有X服务器的Unix / Linux系统)环境中驱动Tcl解释器时,这通常很有用。由对象创建的Tcl()对象可以通过调用其loadtk()方法创建Toplevel窗口(并初始化Tk子系统)。

2.4版本中的新功能。

其他提供Tk支持的模块包括:

这些已经在Python 3中重新命名了; 他们都是新tkinter包装的子模块。

本节不是为Tk或Tkinter的详尽教程而设计的。相反,它旨在作为一个制止差距,为系统提供一些入门指导。

  • 这个Life Preserver 是由弗吉尼亚大学的马特康威编写的。
  • Fredrik Lundh详细阐述并修改了类接口描述,以使它们与Tk 4.2一致。
  • Mike Clarkson将文档转换为LaTeX,并编译了参考手册的用户界面章节。

本部分分为两部分:前半部分(大致)包含背景材料,后半部分可作为便于参考的键盘。

当试图回答“我该怎么做”这个形式的问题时,通常最好找出如何在直接Tk中做“无用”,然后将其转换回相应的Tkinter呼叫。Python程序员通常可以通过查看Tk文档来猜测正确的Python命令。这意味着为了使用Tkinter,你必须知道一些关于Tk的知识。这个文件不能完成这个角色,所以我们能做的最好的事情就是向您提供最好的文档。以下是一些提示:

  • 作者强烈建议获取Tk手册页的副本。具体来说,mann目录中的手册页是最有用的。该man3手册页介绍了C接口Tk库,因此不为脚本编写者特别有用。
  • Tkinter.py 对大多数人来说是最后的选择,但如果没有其他任何意义的话,它可能是一个很好的去处。

类层次结构看起来很复杂,但实际上,应用程序员几乎总是引用层次结构底部的类。

  • 提供这些类是为了在一个命名空间下组织某些功能。它们不是要独立实例化的。
  • Tk类,就是要在应用程序中只有一次实例化。应用程序员不需要明确地实例化一个实例,只要有任何其他类实例化,系统就会创建一个。
  • 这个Widget类不意味着被实例化,它只是意味着子类化才能生成“真实”的小部件(在C ++中,这被称为“抽象类”)。

为了使用这个参考资料,有时候您需要知道如何阅读Tk的简短段落以及如何识别Tk命令的各个部分。(请参阅将Tk的基本Tk映射到Tkinter中,Tkinter以了解下面的内容。)

Tk脚本是Tcl程序。像所有的Tcl程序一样,Tk脚本只是由空格分隔的令牌列表。传统知识小部件就是它的选项,帮助配置,和行动,使人们做有用的事情。

要在Tk中创建一个小部件,该命令始终是以下形式:

classCommand_表示要制作哪种小部件(按钮,标签,菜单...)_ newPathname_是此小部件的新名称。 Tk中的所有名称都必须是唯一的。 为了帮助执行此操作,Tk中的窗口小部件以_pathnames命名,就像文件系统中的文件一样。 调用顶级小部件root。 (期间)和孩子被更多的时期划定界限。 例如,.myApp.controlPanel.okButton可能是一个窗口小部件的名称._options_configure窗口小部件的外观,在某些情况下,它的行为。 选项以标志和值列表的形式出现。 标志前面有一个' - ',就像Unix shell命令标志一样,并且如果值超过一个单词,则会将值放在引号中。

一旦创建,小部件的路径名变成新命令。这个新的Widget命令是程序员获取新Widget执行某些操作的句柄。在C语言中,你可以用C ++表示它为someAction(fred,someOptions),你可以将它表示为fred.someAction(someOptions),在Tk中,你会说:

请注意,对象名称.fred以点开头。

正如你所期望的那样,someAction的合法值将取决于窗口部件的类:.fred禁用如果fred是一个按钮(fred变灰),但不起作用,但如果fred是标签,则不起作用(不支持禁用标签 在Tk)。

someOptions的合法价值取决于行动。 某些操作(如disable)不需要参数,其他操作(如文本输入框的delete命令)需要参数来指定要删除的文本范围。

Tk中的类命令对应于Tkinter中的类构造函数。

对象的主对象隐含在创建时给它的新名称中。在Tkinter中,明确指定了主人。

Tk中的配置选项在带有数值的紧跟标签列表中给出。在Tkinter中,选项在实例构造函数中被指定为关键字参数,在配置调用中被指定为keyword-args,或者在字典样式中被指定为已建立实例的实例索引。请参见设置选项中的设置选项部分。

在Tk中,要在小部件上执行操作,请使用小部件名称作为命令,然后使用操作名称,可能带有参数(选项)。在Tkinter中,您可以调用类实例上的方法来调用窗口小部件上的操作。Tkinter.py模块中列出了给定小部件可以执行的动作(方法)。

要给封装器(几何管理器)提供一个小部件,可以使用可选参数调用封装。在Tkinter中,Pack类拥有所有这些功能,并且各种形式的pack命令都作为方法实现。所有的小部件Tkinter都是从Packer中分类出来的,因此继承了所有的打包方法。有关Tix表格几何管理器的其他信息,请参阅模块文档。

你的应用程序在这里(Python)一个Python应用程序进行Tkinter调用.Tkinter(Python模块)这个调用(例如,创建一个按钮控件)在Tkinter模块中实现,该模块是用Python编写的。这个Python函数将解析命令和参数并将它们转换为一种形式,使它们看起来好像它们来自Tk脚本而不是Python脚本.tkinter(C)这些命令及其参数将传递给C在tkinter中的功能 - 注意小写 - 扩展模块.Tk Widgets(C和Tcl)这个C函数可以调用其他C模块,包括组成Tk库的C函数。Tk在C和一些Tcl中实现。Tk小部件的Tcl部分用于将某些默认行为绑定到小部件,并且在Tkinter导入Python 模块的位置执行一次。(用户从不会看到这个阶段).Tk(C)Tk Widgets的Tk部分实现了最终映射到... Xlib(C)Xlib库在屏幕上绘制图形。

选项控制一些东西,比如一个小部件的颜色和边框宽度。选项可以通过三种方式设置:

在创建对象时,使用关键字参数

创建对象后,将选项名称视为字典索引

使用config()方法更新对象创建后的多个attrs

有关给定选项及其行为的完整说明,请参阅相关Widget的Tk手册页。

请注意,手册页列出了每个窗口小部件的“标准选项”和“小部件特定选项”。前者是许多小部件通用的选项列表,后者是特定小部件特有的选项。标准选项记录在选项(3)手册页上。

本文档没有区分标准和特定于窗口小部件的选项。有些选项不适用于某些类型的小部件。给定小部件是否响应特定选项取决于小部件的类别; 按钮有一个command选项,标签没有。

给定小部件支持的选项列在该小部件的手册页中,或者可以在运行时通过调用config()没有参数的方法或通过调用该keys()小部件上的方法来查询。这些调用的返回值是一个字典,其中的键是作为字符串(例如,'relief')的选项的名称,其值是5元组。

一些选项,如bg是长名称的常见选项的同义词(bg是“背景”的简写)。 传递config()方法的简写选项的名称将返回一个2元组,而不是5元组。 传回的2元组将包含同义词的名称和“真实”选项(例如('bg','background'))。

当然,打印的字典将包括所有可用选项及其值。这只是作为一个例子。

封隔器是Tk的几何管理机制之一。几何管理器用于指定小部件在其容器中的定位的相对位置 - 它们是相互的主人。相较于较为繁琐placer(用于不常用,我们在这里不介绍),封隔器采用定性关系规范- above, to the left of, filling等等-和工作的一切,以确定确切位置坐标为你。

任何控件的大小由内部“从控件”的大小决定。打包器用于控制从站窗口小部件在其打包的主站内出现的位置。您可以将窗口小部件封装到框架中,并将框架封装到其他框架中,以实现您所需的布局。此外,这种安排是动态调整的,以适应配置的增量变化,一旦打包完成。

请注意,窗口小部件在用几何管理器指定几何图形之前不会显示。忽略几何规格是一个常见的早期错误,然后在创建小部件时会感到惊讶,但没有任何内容出现。例如,小部件只有在pack()应用打包器的方法后才会出现。

可以使用关键字选项/值对调用pack()方法,该对控制了窗口小部件出现在其容器中的位置,以及在主应用程序窗口调整大小时的行为方式。这里有些例子:

有关打包机的更多信息及其可以选择的选项,请参阅John Ousterhout书中的手册页和第183页。

6.4 耦合小部件变量

某些小部件(如文本输入小部件)的当前值设置可以通过使用特殊选项直接连接到应用程序变量。 这些选项是可变的,文本变量,onvalue,offvalue和值。 这种连接可以两种方式工作:如果变量因任何原因而变化,它所连接的小部件将被更新以反映新值。

不幸的是,在Tkinter的当前实现中,不可能通过变量或文本变量选项将任意Python变量移交给小部件。 这个变量的唯一类型是从Tkinter模块中定义的类变量中分类的变量。

已经定义了许多有用的变量的子类:StringVar,IntVar,DoubleVar和BooleanVar。 要读取此变量的当前值,请调用get()方法,并更改其值,您可以调用set()方法。 如果你遵循这个协议,那么这个小部件将总是跟踪这个变量的值,而不需要你做进一步的干预。

在Tk中,有一个实用程序命令wm用于与窗口管理器交互。 wm命令的选项允许您控制标题,位置,图标位图等。 在Tkinter中,这些命令已经作为Wm类的方法实现。 Toplevel小部件从Wm类中继承,因此可以直接调用Wm方法。

要查看包含给定窗口小部件的顶层窗口,通常可以引用窗口小部件的主窗口。当然,如果这个小部件已经被封装在一个框架内,那么这个主框架将不会代表一个顶层窗口。要访问包含任意小部件的顶级窗口,可以调用该_root()方法。该方法以下划线开头,表示这个函数是实现的一部分,而不是Tk功能的接口。

以下是一些典型用法的例子:

这是任何不带参数的Python函数。例如:

colorColors可以作为rgb.txt文件中X颜色的名称,或以4位表示RGB值的字符串形式给出:“#RGB”,8位:“#RRGGBB”,12位“#RRRGGGBBB”或16位位“#RRRRGGGGBBBB”范围,其中R,G,B在这里表示任何合法的十六进制数字。有关详细信息,请参阅Ousterhout书籍的第160页.cursor可以使用cursorfont.h中的标准X光标名称,而不使用XC_前缀。例如,要获得手形光标(XC_hand2),请使用字符串“hand2”。你也可以指定你自己的位图和掩码文件。请参阅Ousterhout书的第179页。距离可以在像素或绝对距离中指定屏幕距离。像素以数字和绝对距离作为字符串给出,尾部字符表示单位:c表示厘米,i表示英寸,m表示毫米,p表示打印机的点数。例如,3.5英寸表示为“3.5i”.fontTk使用列表字体名称格式,例如{courier 10 bold}。正数的字体大小以点为单位;尺寸为负数的尺寸以pixels.geometry度量。这是一个widthxheight形式的字符串,其中宽度和高度以像素为单位测量大多数小部件(显示文本的小部件的字符数)。例如:fred [“geometry”] =“200x100”.justifyLegal 值是字符串:“left”,“center”,“right”和“fill”.region这是一个带有四个空格分隔元素的字符串,这是一个合法的距离(见上文)。例如:“2 3 4 5”和“3i 2i 4.5i 2i”和“3c 2c 4c 10.4c”都是合法的区域.relief确定小部件的边框样式。合法值是:"raised",

通过widget命令的绑定方法,您可以监视某些事件并在发生该事件类型时触发回调函数。绑定方法的形式是:

sequence是一个表示事件目标类型的字符串。 (有关详细信息,请参阅John Ousterhout书中的绑定手册页和第201页)。当事件发生时,调用一个带有一个参数的Python函数。 一个Event实例将作为参数传递。 (以这种方式部署的函数通常称为回调。)addis可选,可以是''或'+'。 传递一个空字符串表示这个绑定是要替换这个事件关联的任何其他绑定。 传递'+'意味着此函数将被添加到绑定到此事件类型的函数列表中。

注意事件的widget字段在turnRed()回调中被访问。 该字段包含捕获X事件的小部件。 下表列出了您可以访问的其他事件字段以及它们在Tk中的表示方式,这在引用Tk手册页时非常有用。

许多小部件需要传递“索引”参数。它们用于指向Text小部件中的特定位置,或指向Entry小部件中的特定字符或指向Menu小部件中的特定菜单项。

条目窗口小部件具有涉及正在显示的文本中的字符位置的选项。您可以使用这些Tkinter函数来访问文本小部件中的这些特殊点:

AtEnd()指的是textAtInsert()中的最后一个位置,指的是文本光标isAtSelFirst()指示选定文本的开始点的点.AtSelLast()表示所选文本的最后一个点,finallyAt(x,y)指向到像素位置xy处的字符(对于包含单行文本的文本输入小部件,y不使用y)。文本小部件索引文本小部件的索引符号非常丰富,最好在Tk中进行描述man

一些菜单选项和方法可以操作特定的菜单条目。无论何时,对于选项或参数都需要菜单索引,您可以通过:

  • 一个整数,它指向窗口小部件中的条目的数字位置,从顶部开始计数,从0开始;
  • 字符串'active',它是指当前在光标下的菜单位置;
  • "last"引用最后一个菜单项的字符串;
  • 通过前面的整数@,如在@6,其中整数被解释为y像素菜单的坐标系统中的坐标;
  • 该字符串"none"表示根本没有菜单条目,通常与menu.activate()一起使用来停用所有条目,最后,
  • 一个与菜单条目标签相匹配的文本字符串,从菜单顶部扫描到底部。 请注意,此索引类型在所有其他索引类型之后被考虑,这意味着标记为last,active或none的菜单项的匹配可能会被解释为上述文字。

位图/像素图像可以通过以下子类创建Tkinter.Image

任何类型的图像都是通过filedata选项创建的(其他选项也可用)。

这个图像对象可以用于任何一个image小部件支持的选项(例如标签,按钮,菜单)。在这些情况下,Tk将不会保留对图像的引用。当删除对图像对象的最后一个Python引用时,图像数据也会被删除,并且无论图像在哪里使用,Tk都会显示一个空框。

Tk允许你注册和取消注册一个回调函数,当一个文件描述符可能有I / O时,这个回调函数将从Tk mainloop调用。每个文件描述符只能注册一个处理程序。示例代码:

此功能在Windows上不可用。

由于您不知道有多少字节可供读取,因此您可能不想使用BufferedIOBaseor TextIOBase read()readline()方法,因为这些字节会坚持读取预定义的字节数。对于套接字,recv()or

注册文件处理程序回调函数func。该文件的参数可以是与一个对象fileno()的方法(例如,文件或套接字对象),或一个整数文件描述符。的掩模参数是任何以下三个常量的或运算组合。回调被调用如下:

取消注册文件处理程序。

掩码参数中使用的常量。

我要回帖

更多关于 python中结构体 的文章

 

随机推荐