python tkinter与ttk

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python tkinter与ttk相关的知识,希望对你有一定的参考价值。

class MyFrame(ttk.Frame):
def __init__(self,parent):
ttk.Frame.__init__(self,parent)
self.parent = parent
self.initUI()
def initUI(self):
self.parent.title('Spectrum Music Box Beta1.0')
self.style = ttk.Style()
self.style.theme_use('default')
frame = ttk.Frame(self, relief=Tkinter.RAISED, borderwidth=1)
frame.pack(fill=Tkinter.BOTH, expand = 1)
self.pack(fill=Tkinter.BOTH,expand = 1)

前面ttk.Frame.__init__(self,parent)初始化了frame,后面frame = ttk.Frame(self,relief=Tkinter.RAISED,borderwidth=1)又是干啥的?

参考技术A 就是自己(MyFrame)里面又嵌入一个Frame本回答被提问者采纳

tkinter.ttk — Tk themed widgets

tkinter.ttk模块提供对Tk 8.5中引入的Tk主题小部件集的访问。如果没有针对Tk 8.5编译Python,如果已经安装了Tile,仍然可以访问此模块使用Tk 8.5的前一种方法提供了额外的好处,包括在X11下的抗锯齿字体渲染和窗口透明度(在X11上需要合成窗口管理器)。

其基本思想tkinter.ttk是尽可能地将实现窗口小部件行为的代码与实现其外观的代码分开。

使用TTK 

要开始使用Ttk,请导入其模块:

from tkinter import ttk

要覆盖基本的Tk小部件,导入应遵循Tk导入:

from tkinter import *
from tkinter.ttk import *

该代码将导致几个tkinter.ttk小部件(Button, CheckbuttonEntryFrameLabel, LabelFrameMenubuttonPanedWindow, RadiobuttonScaleScrollbar)来自动替换Tk部件

Ttk小部件

TTK包含18个小部件,其中12个在Tkinter的已经存在: ButtonCheckbuttonEntryFrame, LabelLabelFrameMenubuttonPanedWindow, RadiobuttonScaleScrollbar,和Spinbox其他六个都是新的ComboboxNotebook, ProgressbarSeparatorSizegrip和 Treeview而且它们都是子类Widget

使用Ttk小部件为应用程序提供了改进的外观和感觉。如上所述,样式的编码方式存在差异。

 

Tk中代码:

l1 = tkinter.Label(text="Test", fg="black", bg="white")
l2 = tkinter.Label(text="Test", fg="black", bg="white")

Ttk中代码:

style = ttk.Style()
style.configure("BW.TLabel", foreground="black", background="white")

l1 = ttk.Label(text="Test", style="BW.TLabel")
l2 = ttk.Label(text="Test", style="BW.TLabel")

Widget

ttk.Widget 定义Tk主题小部件支持的标准选项和方法,不应该直接实例化。

所有ttk小部件都接受以下options:

OptionDescription
class 指定窗口类。在查询选项数据中窗口的其他选项时,使用该类,确定窗口的默认绑定标签,以及选择窗口小部件的默认布局和样式。此选项是只读的,只能在创建窗口时指定。
cursor 指定要用于窗口小部件的鼠标光标。如果设置为空字符串(默认值),则继承父窗口小部件游标。
takefocus 确定窗口是否在键盘遍历期间接受焦点。返回0,1或空字符串。如果返回0,则表示在键盘遍历期间应完全跳过该窗口。如果为1,则表示只要可以查看窗口就应该接收输入焦点。空字符串表示遍历脚本决定是否关注窗口。
style 可用于指定自定义窗口小部件样式

Scrollable Widget Options(可滚动窗口小部件选项):

由滚动条控制的窗口小部件支持以下选项。

选项描述
xscrollcommand

用于与水平滚动条进行通信。当窗口小部件窗口中的视图发生更改时,窗口小部件将基于scroll命令生成Tcl命令。通常此选项包含Scrollbar.set()某些滚动条的方法 。这将导致只要窗口中的视图发生更改,就会更新滚动条。

yscrollcommand 用于与垂直滚动条进行通信。有关更多信息,请参见上文。

Label Option

标签,按钮和其他类似按钮的小部件支持以下选项。

OptionDescription
text 指定要在窗口小部件中显示的文本字符串。
textvariable 指定将使用其值代替文本选项资源的名称。
underline 如果设置,则指定要在文本字符串中加下划线的字符的索引(从0开始)。下划线字符用于助记符激活。
image 指定要显示的图像。这是一个或多个元素的列表。第一个元素是默认图像名称。列表的其余部分,如果由一系列statepec / value对定义Style.map(),指定在窗口小部件处于特定状态或状态组合时使用的不同图像。列表中的所有图像应具有相同的大小。
compound

指定在存在文本和图像选项的情况下如何显示相对于文本的图像。有效值为:

  • 文字:仅显示文字
  • 图像:仅显示图像
  • 顶部,底部,左侧,右侧:分别显示文本上方,下方,左侧或右侧的图像。
  • none:默认值。显示图像(如果存在),否则显示文本。
width 如果大于零,则指定为文本标签分配多少空格(字符宽度),如果小于零,则指定最小宽度。如果为零或未指定,则使用文本标签的自然宽度。

Compatibility Options(兼容性选项)

OptionDescription
state 可以设置为“normal”或“disabled” 以控制“disabled” 状态位。这是一个只写选项:设置它会更改窗口小部件状态,但Widget.state()方法不会影响此选项。

Widget States

窗口小部件状态是独立状态标志的位图

FlagDescription
active 鼠标光标位于窗口小部件上,按下鼠标按钮将导致某些操作发生
disabled 在程序控制下禁用小组件
focus 小工具有键盘焦点
pressed 小工具被按下了
selected 对于像Checkbuttons和radiobutton这样的东西,“On”,“true”或“current”
background Windows和Mac具有“活动”或前景窗口的概念。background将小部件设置后台状态,并清除了那些在前台的窗口
readonly 小部件不应允许用户修改
alternate 特定于小部件的备用显示格式
invalid 小部件的值无效

状态规范是一系列状态名称,可选地带有一个感叹号,表示该位已关闭。

ttk.Widget 

除了下面描述的方法,ttk.Widget支持方法tkinter.Widget.cget()tkinter.Widget.configure()

 

class tkinter.ttk.Widget

identify(xy)

返回位置y处元素的名称,如果该点不位于任何元素内,则返回空字符串。xy是相对于小部件的像素坐标。

instate(statespeccallback=None*args**kw)

测试小部件的状态。如果未指定callbackTrue 则在窗口小部件状态与statespec匹配时返回False否则返回。如果指定了callback,那么如果widget状态与statespec匹配,则使用args调用它 

state(statespec=None)

修改或查询小部件状态。如果指定了statespec,则根据它设置窗口小部件状态并返回指示哪些标志已更改的新状态规范如果未指定statespec,则返回当前启用的状态标志。

statespec通常是列表或元组。

Combobox

ttk.Combobox控件结合了文本字段值的弹出的下拉列表。这个小部件是Entry的子类

除了继承Widget中的Widget.cget(), Widget.configure()Widget.identify()Widget.instate() 和Widget.state(),以下的继承Entry: Entry.bbox()Entry.delete()Entry.icursor(), Entry.index()Entry.insert()Entry.selection(), Entry.xview(),它有一些其它方法在 ttk.Combobox中描述

Options

此小部件接受以下特定选项:

OptionDescription
exportselection 布尔值。如果设置,则窗口小部件选择链接到窗口管理器选择(例如,可以通过调用Misc.selection_get返回)。
justify 指定文本在窗口小部件中的对齐方式。“左”,“中”或“右”之一。
height 以行为单位指定弹出列表框的高度。
postcommand 在显示值之前立即调用的脚本(可能已在Misc.register中注册)。它可以指定要显示的值
state  “normal”, “readonly”, 或 “disabled”之一. In the “readonly” state,在“只读”状态下,可能无法直接编辑该值,并且用户只能从下拉列表中选择值。在“正常”状态下,文本字段可直接编辑。在“禁用”状态下,不可能进行交互。
textvariable 指定名称的值链接到窗口小部件的值。只要与该名称关联的值发生更改,窗口小部件值就会更新,反之亦然。tkinter.StringVar
values 指定要在下拉列表框中显示的值列表。
width 指定一个整数值,指示输入窗口的所需宽度,以小部件字体的平均大小字符表示。

虚拟事件

当用户从值列表中选择元素时,组合框小部件生成<< ComboboxSelected >>虚拟事件。

 

ttk.Combobox

class tkinter.ttk.Combobox

currentnewindex =None

如果指定了newindex,则将组合框值设置为元素位置newindex否则,返回当前值的索引,如果当前值不在值列表中,则返回-1。

get

返回组合框的当前值。

setvalue
  Sets the value of the combobox to value.

Spinbox

ttk.Spinbox窗口小部件是一个ttk.Entry增强版,用箭头增大或减小值。它可以用于数字或字符串值列表。这个小部件是Entry的子类

除了从继承与Widget的方法Widget.cget(), Widget.configure()Widget.identify()Widget.instate() 和Widget.state(),还有继承Entry的方法: Entry.bbox()Entry.delete()Entry.icursor(), Entry.index()Entry.insert()Entry.xview(),它有一些其他的方法,描述在ttk.Spinbox

Options

OptionDescription
from Float 类型值. 如果设置,则这是递减按钮可递减的最小值。用作参数时必须拼写为from_,因为 from它是Python关键字。
to Float 类型值. 如果设置,则这是递增按钮可递增的最大值。
increment Float 类型值.指定递增或递减按钮每次改变的值. 默认 1.0.
values 字符串或浮点值的序列。如果指定,递增/递减按钮将按此顺序循环显示项目,而不是递增或递减数字。
wrap 布尔值。如果True,递增和递减按钮将分别从to循环到 from值或from循环to 值。
format 指定由递增/递减按钮设置的数字格式,它的格式必须为“%W.P f”,其中W是值的填充宽度,P是精度
command python可调用方法。无论何时按下递增或递减按钮,都将不带参数调用

虚拟事件

当用户按下<Up>时,spinbox小部件会生成<< Increment >>虚拟事件,当用户按下<Down>时,会生成<< Decrement >>虚拟事件。

 

ttk.Spinbox

class tkinter.ttk.Spinbox

 

  get

  返回spinbox的当前值。

  setvalue
    将spinbox的值设置为value

Notebook

  Ttk Notebook小部件管理一组窗口并一次显示一个窗口。每个子窗口与选项卡相关联,用户可以选择该选项卡以更改当前显示的窗口。

Options

  此小部件接受以下特定Options:

OptionDescription
height 如果存在且大于零,则指定窗格区域的所需高度(不包括内部填充或制表符)。否则,使用所有窗格的最大高度。
padding 指定要在netbook外部添加的额外空间量。填充是一个列表,最多四个长度规格 left top right bottom.。如果指定的元素少于四个,bottom defaults to top, right defaults to left, and top defaults to left。
width 如果存在且大于零,则指定窗格区域的所需宽度(不包括内部填充)。否则,使用所有窗格的最大宽度

Tab Options

标签还有特定选项:

OptionDescription
state Either “normal”, “disabled” or “hidden”.如果 “disabled”,则选项卡不可选. 如果 “hidden”, 则不显示选项卡。
sticky 指定子窗口在窗格区域中的定位方式。值是包含零个或多个字符“n”,“s”,“e”或“w”的字符串。根据grid()几何管理器,每个字母指的是子窗口将坚持的一侧(北,南,东或西)
padding 指定要在netbook和此 pane之间添加的额外空间量。语法与此小部件使用的选项填充相同。
text 指定要在选项卡中显示的文本。
image 指定要在选项卡中显示的图像。请参阅中描述的选项图像Widget
compound 指定如何在文本和图像都存在的情况下显示相对于文本的图像。有关合法值,请参阅标签选项
underline 指定要在文本字符串中加下划线的字符的索引(从0开始)。如果Notebook.enable_traversal()被调用,带下划线的字符用于助记符激活

Tab Identifiers

ttk.Notebook的tab_id ,可以采用以下任何一种形式:

  • 零和标签数之间的整数
  • 子窗口的名称
  • 形式为“@ x,y”的位置规范,用于标识选项卡
  • 文字字符串“current”,用于标识当前选定的选项卡
  • 文字字符串“end”,返回选项卡的数量(仅对其有效 Notebook.index()

Virtual Events

选中新选项卡后,此小组件将生成<< NotebookTabChanged >>虚拟事件。

ttk.Notebook

class tkinter.ttk.Notebook

add(child**kw)

在 notebook中添加新选项卡

如果窗口当前被 notebook 管理但被影藏,则会恢复到之前的位置。

有关可用选项列表,请参阅选项卡选项

forget(tab_id)

删除tab_id指定的选项卡,取消映射并取消管理关联的窗口。

hide(tab_id)

隐藏tab_id指定的选项卡

该选项卡不会显示,但关联的窗口仍由notebook 管理并记住其配置。可以使用该add()命令恢复隐藏的选项卡

identify(xy)

返回位置xy处的Tab的名称,如果没有,则返回空字符串。

index(tab_id)

返回tab_id指定的选项卡的数字索引,如果tab_id是字符串“end” ,则返回选项卡的总数

insert(poschild**kw)

在指定位置插入 pane

pos是字符串“end”,整数索引或托管子项的名称。如果child已经由netbook管理,则将其移动到指定位置。

有关可用选项列表,请参阅选项卡选项

select(tab_id=None)

选择指定的tab_id

将显示关联的子窗口,并且取消映射先前选择的窗口(如果不同)。如果省略tab_id,则返回当前所选窗格的窗口小部件名称。

tab(tab_idoption=None**kw)

查询或修改特定tab_id的选项

如果未给出kw,则返回选项卡选项值的字典。如果 指定了option,则返回该选项的值否则,将选项设置为相应的值。

tabs()

返回 notebook管理的窗口列表。

enable_traversal()

为包含此notebook的顶层窗口启用键盘遍历。

这将扩展包含notebook的顶层窗口的绑定,如下所示:

    • Control-Tab:选择当前所选选项卡后面的选项卡。
    • Shift-Control-Tab:选择当前所选选项卡之前的选项卡。
    • Alt-K:其中K是任何选项卡的助记符(带下划线)字符,将选择该选项卡。

可以为单个顶层中的多个notebook启用遍历,包括嵌套notebook。但是,如果所有窗格都具有作为主窗口的notebook,notebook遍历才能正常工作。

 




以上是关于python tkinter与ttk的主要内容,如果未能解决你的问题,请参考以下文章

python2.#与python3.#下tkinter 的simpledialog,messagebox

python tkinter 基本操作与事件

Python tkinter 学习记录 --label 与 button

解决python tkinter 与 sleep 延迟问题

Python Tkinter Checkbutton 与其他小部件对齐

python tkinter 控件与布局 项目实战