软件测试|超好用超简单的Python GUI库——tkinter(八)

前言

我们在日常使用各种桌面软件时,当我们想要搜索一个内容时,都会出现一个列表框,供我们选择,如下图:

在这里插入图片描述

Tkinter提供了列表框(Listbox)控件来实现类似的功能。

Listbox控件

列表框,即 Listbox。在使用 Tkinter 进行 GUI 编程的过程中,如果需要用户自己进行选择时就可以使用列表框控件。列表框中的选项可以是多个条目,也可以是单个唯一条目,但常用于多个条目。

列表框控件(Listbox)常用方法

方法说明
activate(index)将给定索引号对应的选项激活,即文本下方画一条下划线
bbox(index)返回给定索引号对应的选项的边框,返回值是一个以像素为单位的 4 元祖表示边框:(xoffset, yoffset, width, height), xoffset 和 yoffset 表示距离左上角的偏移位置
curselection()返回一个元组,包含被选中的选项序号(从 0 开始)
delete(first, last=None)删除参数 first 到 last 范围内(包含 first 和 last)的所有选项
get(first, last=None)返回一个元组,包含参数 first 到 last 范围内(包含 first 和 last)的所有选项的文本
index(index)返回与 index 参数相应选项的序号
itemcget(index, option)获得 index 参数指定的项目对应的选项(由 option 参数指定)
itemconfig(index, **options)设置 index 参数指定的项目对应的选项(由可变参数 **option 指定)
nearest(y)返回与给定参数 y 在垂直坐标上最接近的项目的序号
selection_set(first, last=None)设置参数 first 到 last 范围内(包含 first 和 last)选项为选中状态,使用 selection_includes(序号) 可以判断选项是否被选中。
size()返回 Listbox 组件中选项的数量
xview(*args)该方法用于在水平方向上滚动 Listbox 组件的内容,一般通过绑定 Scollbar 组件的 command 选项来实现。 如果第一个参数是 “moveto”,则第二个参数表示滚动到指定的位置:0.0 表示最左端,1.0 表示最右端;如果第一个参数是 “scroll”,则第二个参数表示滚动的数量,第三个参数表示滚动的单位(可以是 “units” 或 “pages”),例如:xview(“scroll”, 2, “pages”)表示向右滚动二行。
yview(*args)该方法用于在垂直方向上滚动 Listbox 组件的内容,一般通过绑定 Scollbar 组件的 command 选项来实现

Listbox控件特有属性

属性说明
listvariable1.指向一个 StringVar 类型的变量,该变量存放 Listbox 中所有的项目
2.在 StringVar 类型的变量中,用空格分隔每个项目,例如 var.set(“c c++ java python”)
selectbackground指定当某个项目被选中的时候背景颜色,默认值由系统指定
selectborderwidth1.指定当某个项目被选中的时候边框的宽度
2.默认是由 selectbackground 指定的颜色填充,没有边框
3.如果设置了此选项,Listbox 的每一项会相应变大,被选中项为 “raised” 样式
selectforeground指定当某个项目被选中的时候文本颜色,默认值由系统指定
selectmode决定选择的模式,tk 提供了四种不同的选择模式,分别是:“single”(单选)、“browse”(也是单选,但拖动鼠标或通过方向键可以直接改变选项)、“multiple”(多选)和 “extended”(也是多选,但需要同时按住 Shift 键或 Ctrl 键或拖拽鼠标实现),默认是 “browse”
setgrid指定一个布尔类型的值,决定是否启用网格控制,默认值是 False
takefocus指定该组件是否接受输入焦点(用户可以通过 tab 键将焦点转移上来),默认值是 True
xscrollcommand为 Listbox 组件添加一条水平滚动条,将此选项与 Scrollbar 组件相关联即可
yscrollcommand为 Listbox 组件添加一条垂直滚动条,将此选项与 Scrollbar 组件相关联即可

创建列表框控件

创建列表框,代码如下:

# 创建一个列表控件,并增加相应的选项
from tkinter import *
# 创建主窗口
win = Tk()
win.title("拜仁慕尼黑")
win.geometry('400x200')

# 创建列表选项
listbox1 =Listbox(win)
listbox1.pack()
# i表示索引值,item 表示值,根据索引值的位置依次插入
for i,item in enumerate(["穆勒","穆西亚拉","萨内","马内","德里赫特"]):
    listbox1.insert(i,item)
# 显示窗口
win.mainloop()

生成的窗口如下:

在这里插入图片描述

除了上述使用 enumerate() 来实现选项插入的方法外,我们还可以使用 “end” 实现,它表示将选项插入到最后一个位置,所以“Java”一定会被插入到最后一个位置上,而之前的选项会依次向前排列,如下所示:

from tkinter import *
# 创建主窗口
win = Tk()
win.title("拜仁慕尼黑")
win.geometry('400x200')

# 创建列表选项
listbox1 =Listbox(win)
listbox1.pack()
# i表示索引值,item 表示值,根据索引值的位置依次插入
for item in ["穆勒","穆西亚拉","萨内","马内","德里赫特"]:
    listbox1.insert("end",item)
# 显示窗口
win.mainloop()

程序运行结果:

在这里插入图片描述

增加滚动条和删除功能

为上述示例增加一个滚动条和选项的删除功能,如下所示:

from tkinter import *
# 创建主窗口
win = Tk()
win.title("拜仁慕尼黑")
win.geometry('400x180')
# 创建滚动条
s = Scrollbar(win)
# 设置垂直滚动条显示的位置,使得滚动条,靠右侧;通过 fill 沿着 Y 轴填充
s.pack(side = RIGHT,fill = Y)
# 将 selectmode 设置为多选模式,并为Listbox控件添加滚动条
listbox1 =Listbox(win,selectmode = MULTIPLE,height =5, yscrollcommand = s.set)
# i 表示索引值,item 表示值,根据索引值的位置依次插入
for i,item in enumerate(range(1,50)):
    listbox1.insert(i,item)
listbox1.pack()
# 设置滚动条,使用 yview使其在垂直方向上滚动 Listbox 组件的内容,通过绑定 Scollbar 组件的 command 参数实现
s.config(command = listbox1.yview)
# 使用匿名函数,创建删除函数,点击删除按钮,会删除选项
bt = Button(win,text='删除',command = lambda x = listbox1:x.delete(ACTIVE))
# 将按钮放置在底部
bt.pack(side = BOTTOM)
# 显示窗口
win.mainloop()

程序运行结果,如下所示:

在这里插入图片描述

StringVar() 添加列表选项

通过 StringVar() 方法动态地获取列表框中的选项,示例代码如下:

import tkinter as tk
from tkinter import messagebox
window = tk.Tk()
window.title("拜仁慕尼黑")
window.geometry('400x180')

# 创建变量,用var1用来接收鼠标点击的具体选项内容
var1 = tk.StringVar()
l = tk.Label(window, bg='#B0B0B0', font=('微软雅黑', 15), width=20, textvariable=var1)
l.pack()
# 创建一个按钮的点击事件
def click_button():
    # 使用 curselection来选中文本
    try:
        val = lb.get(lb.curselection())
    # 设置label值
        var1.set(val)
    except Exception as e:
        e = '发现一个错误'
        messagebox.showwarning(e,'没有选择任何条目')
# 创建一个按钮并放置,点击按钮调用print_selection函数
b1 = tk.Button(window, text='获取当前选项', command=click_button)
b1.pack()
# 创建Listbox并为其添加内容
var2 = tk.StringVar()
var2.set(("格雷茨卡", "科曼", "戴维斯", "帕瓦尔"))
# 创建Listbox,通过 listvariable来传递变量
lb = tk.Listbox(window, listvariable=var2)
# 新建一个序列,然后将值循环添加到Listbox控件中
items = ["穆勒", "穆西亚拉", "马内", "萨内", "基米希", "德里赫特"]
for i in items:
    lb.insert('end', i)  # 从最后一个位置开始加入值
lb.insert(0, '诺伊尔')  # 在第一个位置插入一段字符串
lb.delete(4)  # 删除第2个位置处的索引
lb.pack()
#主窗显示
window.mainloop()

运行脚本结果如下:

在这里插入图片描述

总结

本文主要介绍了tkinter的listbox列表框控件的使用,后续我们将介绍下拉框控件的使用。

更多技术文章

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: tkinterPython的内置图形用户界面。以下是一个简单tkinter GUI程序示例,它创建了一个窗口,并在其中添加了一个按钮: ``` import tkinter as tk def on_button_click(): print("Button clicked!") root = tk.Tk() button = tk.Button(root, text="Click me", command=on_button_click) button.pack() root.mainloop() ``` 在这个例子中,我们首先导入了tkinter,然后定义了一个名为on_button_click的函数,它将在按钮被点击时被调用。然后我们创建了一个tkinter的根窗口,并在其中创建了一个按钮,并将其命令设置为我们之前定义的函数。最后,我们运行了root.mainloop()以运行程序并在窗口中显示按钮。 ### 回答2: PythonGUI界面设计可以选择多种,而Tkinter是其中最流行的一种。TkinterPython语言的标准GUI,也是Python内置的一个模块,它可以使用Python语言的函数和方法来进行基本的图形界面设计。它具有简单易学、功能完善、界面美观等特点,使得它成为初学者和专业人士的选择。 Tkinter提供了一组用于创建和管理GUI窗口、标签、按钮、文本框、列表、菜单等控件的类和方法。在使用Tkinter前,需要先导入Tkinter模块,并创建主窗口和其他控件,然后定义控件的参数,完成GUI界面的设计。 下面是一个简单Tkinter实例,创建了一个主窗口,包含一个标签、一个按钮和一个文本框,通过点击按钮将输入的文本显示在标签内。 ```python import tkinter as tk def show_text(): var.set(entry.get()) root = tk.Tk() root.title('Example') root.geometry('300x200') var = tk.StringVar() label = tk.Label(root, textvariable=var, font=('Arial', 14), width=20, height=2) label.pack() entry = tk.Entry(root, show=None, font=('Arial', 14)) entry.pack() button = tk.Button(root, text='Show', width=10, height=1, command=show_text) button.pack() root.mainloop() ``` 在上面的代码中,我们使用了Tkinter中的几个常用控件:Label、Entry和Button。其中,Label用于显示文本,Entry用于输入文本,Button用于触发事件。我们还定义了一个函数show_text(),用于获取文本框中的文本,并将其显示在标签中。 Tkinter的基本控件使用起来非常简单,而且非常适合初学者入门学习。但是,随着GUI界面复杂度的提高,需要使用更高级的控件或结合其他来实现。在实际项目开发中,我们可以结合其它强大如wxPython、PyQt5等来实现更复杂的界面设计。 ### 回答3: Python是一种易于学习、使用和扩展的高级编程语言。其支持面向对象编程、函数式编程和命令式编程等多种编程范式,同时还提供丰富的标准,包含大量实用的工具和模块。Python也是一种可移植的跨平台语言,可以在各种操作系统下运行,如Windows、MacOS和Linux等。其中,GUI(Graphical User Interface)界面是Python的一个重要领域,对于开发桌面应用程序和游戏等具有重要意义。 PythonGUI界面可以使用多种和框架实现,其中,tkinterPython自带的GUI工具包,也是使用最广泛的GUI之一。tkinter提供了多种UI组件,如Button、Label、Entry和Canvas等,还可以用于创建对话框、菜单、工具栏和状态栏等。使用tkinter开发GUI界面需要了解其主要概念和API,如主窗口、布局管理器、事件驱动和消息循环等。 下面给出一个使用tkinter实现GUI界面的示例程序,该程序包含一个简单的计算器,可以进行加、减、乘、除运算: ```python import tkinter as tk class CalculatorApp: def __init__(self, root): self.root = root self.root.title("Calculator") self.create_widgets() def create_widgets(self): self.entry = tk.Entry(self.root, width=30) self.entry.grid(row=0, column=0, columnspan=4, pady=5) buttons = ["7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+"] for i, button_text in enumerate(buttons): button = tk.Button(self.root, text=button_text, width=5, height=2, command=lambda text=button_text: self.button_click(text)) row = i // 4 + 1 column = i % 4 button.grid(row=row, column=column, padx=5, pady=5) def button_click(self, text): if text == "=": result = eval(self.entry.get()) self.entry.delete(0, tk.END) self.entry.insert(0, str(result)) elif text == "C": self.entry.delete(0, tk.END) else: self.entry.insert(tk.END, text) root = tk.Tk() app = CalculatorApp(root) root.mainloop() ``` 该程序实现了一个简单的计算器,使用了tkinter中的Entry和Button组件,其中Button组件设置command参数来响应点击事件。程序中还使用了lambda表达式来传递被点击的按钮文本,以便在button_click函数中处理相应的逻辑。程序运行时,会生成一个计算器界面,用户可以通过点击按钮输入数字和运算符,最终得到运算结果。 总之,PythonGUI界面开发对于开发桌面应用程序、游戏和数据可视化等具有重要作用。使用tkinter可以轻松实现GUI界面,并且可以通过掌握tkinter的API和组件来进行高级UI设计。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值