Tkinter库的学习记录-4
2026/6/17 18:10:47 网站建设 项目流程

9、与数字有关的Wiget

介绍两个可以使用图形接口选取数值的Widget控件:Scale和Spinbox

9-1 Scale的数值输入控制

9-1-1 Scale的基本概念

Scale可以翻译为尺度。Python的tkinter模块中有Widget控件Scale,这是一种图形接口输入功能,

我们可以移动尺度条产生某一范围的数字。

建立尺度条的方法是Scale(),它的构造方法如下。

Scale(父对象, option, ...)

参数一:同上

options参数:

(1) activebackground:鼠标光标在尺度条上时的背景颜色。

(2) bg或background:背景色彩。

(3) borderwidth或bd:边界宽度默认是2像素。

(4) command:当使用者更改数值时,会自动执行此函数。

(5) cursor:当鼠标光标在复选框上时的光标形状、

(6) digits:尺度数值,读取时需使用IntVar、DoubleVar或StringVar变量类型读取。

(7) fg:文字色彩。

(8) font:字形

(9) from_:尺度条范围值的初值。

(10) highlightbackground:当尺度条取得焦点时背景颜色。

(11) highlightcolor:当尺度条取得焦点时的颜色。

(11) justify:当含多行文字时,最后一行的对齐方式。

(12) label:默认是没有标签文字,如果尺度条是水平的则此标签出现在左上角,如果尺度条是垂直的则此标签出现在右上角。

(13) length:默认是100像素。

(14) orient:默认是水平,可以设置水平HORIZONTAL或垂直VERTICAL。

(15) relief:默认是relief=FLAT,可由此更改边界外观。

(16) repeatdelay:可设置需要按住尺度条多久后才可移动此尺度条,单位是ms,默认是300。

(17) resolution:每次更改的数值,例如,from_2.0,to=4.0,如果将resolution设为0.5,则尺度可能数值是2.0、2.5、3.0、3.5、4.0.

(18) showvalue:正常会显示尺度条的目前值,如果设为0则不显示。

(19) state:输入状态,DISABLE则暂时无法使用此Scale。

(20) takefocus:正常时此尺度条可以循环取得焦点,如果设为0则无法取得焦点。

(21) tickinterval:尺度条的标记刻度,例如,from_=2.0, to=3.0,tickinterval=0.25,则刻度是2.0、2.25、2.50、2.75和3.0。

(22) to:尺度条范围值的末端值。

(23) troughcolor:槽(trough)的颜色。

(24) variable:设置或取得目前选取的尺度值,它的值类型通常是IntVar或StringVar。

(25) width:对于垂直尺度条这是槽的宽度,对于水平尺度条这是槽的高度。

下面程序实例:一个产生水平尺度条与垂直尺度条的应用。尺度值的范围在0~10,垂直尺度条使用默认长度,水平尺度条则设为300。

from tkinter import * window = Tk() window.title("ch9_1") slider1 = Scale(window, from_=0, to=10).pack() slider2 = Scale(window, from_=0, to=10, length=300, orient='horizontal').pack() window.mainloop()

执行结果

下面程序实例:设置Scale()构造方法中的多个参数。

from tkinter import * window = Tk() window.title("ch9_2") slider = Scale(window, from_=0, # 起点值 to=10, # 终点值 troughcolor="yellow", # 槽的颜色 width="30", # 槽的高度 tickinterval=2, # 刻度 label="My Scale", # Scale标签 length=300, # Scale长度 orient=HORIZONTAL) # 水平 slider.pack() window.mainloop()

执行结果

9-1-2取得与设置Scale的尺度值

设计GUI程序时可以使用set()方法设置尺度的值,可以使用get()方法取得尺度的值。

下面程序实例:使用set()设置尺度初值,使用get()获得尺度值。当单击Print按钮时可以在Python Shell窗口中列出垂直和水平的尺度值。

from tkinter import * def printInfo(): print("垂直:%d,水平:%d" % (sV.get(), sH.get())) window = Tk() window.title("ch9_3") sV = Scale(window, from_=0, to=10, label="垂直") sV.set(5) sV.pack() sH = Scale(window, from_=0, to=10, orient=HORIZONTAL, label="水平", length=300) sH.set(5) sH.pack() Button(window, text="Print", command=printInfo).pack() window.mainloop()

执行结果

9-1-3 使用Scale设置窗口背景颜色

messagebox参数详解

messagebox.showinfo('title', 'message', parent=window名)

监听字符串

self.emp_internation.trace_add('write', self.count_salary)

self.emp_internation为创建的字符串变量,ttk.String()

trace_add('write', 函数名),监听字符串变量写入之后需要干什么。

表头组件

创建表格组件

ttk.Treeview(columns=['', '', ''], show=")

参数

表头标识 columns, 参数后面可以接列表,列表中有几个元素,就增加几个表头

去除默认表头 show="headings"

ttk样式组件

一、基础使用示例

style = ttk.Style() # 查看ttk的组件样式 print(style.theme_names()) # ttk组件主题设置 style.theme_use('') # 设置默认标签样式 style.configure('TLabel', foreground='red', font=('宋体', 16)) # ttk Label组件参数绑定style='login-TLabel',就可以设置下面样式了 style.configure('login-TLabel', foreground='red', font=('宋体', 16)) # 默认按钮样式 style.configure('TButton', font=('宋体', 12)) # 默认单选框样式 style.configure('TRadiobutton', font=('宋体', 12)) # 默认表头标题 style.configure('Treeview.Heading', font=('宋体', 16)) # 默认表内容样式 style.configure('Treeview', font=('宋体', 14))

ttk.Treeview表格组件

一、基础使用示例

先看一个完整的代码示例,可以直接复制运行:

import tkinter as tk from tkinter import ttk root = tk.Tk() root.title("简易表格示例") # 创建表格 table = ttk.Treeview(root) # 定义列(注意:第一列#0是隐藏的树形列,通常留空) table["columns"] = ("姓名", "年龄", "城市") # 设置列属性 table.column("#0", width=0, stretch=tk.NO) # 隐藏第一列 table.column("姓名", width=100, anchor=tk.W) # 列宽度和对齐方式 table.column("年龄", width=60, anchor=tk.CENTER) table.column("城市", width=120, anchor=tk.E) # 设置表头 table.heading("姓名", text="姓名") # 列标题 table.heading("年龄", text="年龄") table.heading("城市", text="城市") # 添加数据 table.insert("", "end", values=("张三", 25, "北京")) # 插入一行数据 table.insert("", "end", values=("李四", 30, "上海")) table.insert("", "end", values=("王五", 28, "广州")) # 显示表格 table.pack(pady=20) root.mainloop()

二、核心参数详解

1. 列配置(column方法)
  • width:列宽度(单位:像素)

  • anchor:对齐方式(tk.W左对齐,tk.CENTER居中,tk.E右对齐)

  • minwidth:最小宽度(可拖动调整列宽时有效)

  • stretch:是否允许拉伸(tk.YES/tk.NO

table.column('姓名', anchor='center', width=90)
2. 表头设置(heading方法)
  • text:显示的表头文字

  • command:点击表头时触发的回调函数(用于排序功能)

table.heading("年龄", text="年龄", command=lambda: sort_by_age())
3. 插入数据(insert方法)
  • parent:父节点(通常用空字符串表示根节点)

  • index:插入位置("end"表示末尾),tk.END也可以,从最后一行开始追加

  • values:数据内容(元组形式,长度需与列数匹配)

  • iid:可选参数,为行指定唯一标识符

table.insert("", "end", iid="row1", values=("张三", 25, "北京"))
4. 其他常用方法
  • 删除行table.delete(iid)

  • 获取选中行table.selection()

  • 获取行数据table.item(iid, "values")

  • 修改数据table.item(iid, values=新数据)

  • 获取选中行的id:table.identify_row(event.y)

  • 获取所有行的id:table.get_children()

  • 查询id的下标:table.get_children().index(id)


三、样式美化

1. 修改字体颜色
style = ttk.Style() style.configure("Treeview", rowheight=25, # 行高 font=("微软雅黑", 11), foreground="#333", background="#fff") # 设置斑马线效果(隔行变色) style.map("Treeview", background=[("selected", "#0078D7"), ("!selected", "#f0f0f0")])
2. 添加滚动条
# 纵向滚动条 y_scroll = ttk.Scrollbar(root, orient="vertical", command=table.yview) table.configure(yscrollcommand=y_scroll.set) y_scroll.pack(side=tk.RIGHT, fill=tk.Y) # 横向滚动条同理(orient="horizontal")

四、常见问题

  1. 为什么表格不显示数据?

    • 检查是否执行了insert插入数据

    • 确认列名与columns定义一致

  2. 如何实现点击排序?
    需要自定义排序函数:

    def sort_by_col(col, reverse): data = [(table.set(child, col), child) for child in table.get_children("")] data.sort(reverse=reverse) for index, (val, child) in enumerate(data): table.move(child, "", index) table.heading(col, command=lambda: sort_by_col(col, not reverse))
  3. 如何获取选中行数据?

    selected = table.selection() if selected: print(table.item(selected[0], "values"))

五、完整功能示例(带编辑功能)

# 点击单元格编辑功能 def edit_cell(event): region = table.identify_region(event.x, event.y) if region == "cell": column = table.identify_column(event.x) iid = table.focus() current_value = table.item(iid, "values")[int(column[1])-1] # 创建编辑框 entry = tk.Entry(root) entry.place(x=event.x, y=event.y) entry.insert(0, current_value) def save_edit(): new_value = entry.get() values = list(table.item(iid, "values")) values[int(column[1])-1] = new_value table.item(iid, values=values) entry.destroy() entry.bind("<Return>", lambda e: save_edit()) table.bind("<Double-1>", edit_cell)
滚动条ttk.Scrollbar

用于滚动一些组件的可见范围,根据方向可分为垂直滚动条和水平滚动条。组件常常被用于实现文本、画布和列表框的滚动。

在名为parent的顶级窗口或框架中创建一个新的滚动条组件:

# 创建滚动条 command=需要绑定的应用组件,yview scroll_bar = ttk.Scrollbar(main_window, command=table.yview) # 表格绑定滚动条 table.config(yscrollcommand=scroll_bar.set) # 滚动条布局 scroll_bar.place(x=1313, y=80, height=645)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询