Python的GUI编程(五)Listbox(列表框)

Listbox:列表框用于显示项目列表

语法:

lb=List(master,option,···)

参数  master:父窗口

         option:常用的选项列表,可以有多个,用逗号隔开

可以通过for循环向Listbox中插入项目列表和索引值向其中添加项目两种方法。

selectmode

确定可以选择多少项,以及鼠标拖动的影响选择:

BROWSE:通常,只能从列表框中选择一行。如果单击一个项目,然后拖动到不同的行,选择将会跟随鼠标,是默认的。

SINGLE:你只能选择一行,不能拖动

MULT IPLE:您可以同时选择任意数量的行。点击在任意直线上,无论它是否被选中。不能拖动

EXTENDED: 您可以一次选择任何相邻的g线。单击第一行并将g拖到最后一行。能拖动

使用selectmode = EXPANDED使用Listbox来支持Shift和Control(如Windows下的快捷键)

from Tkinter import *
root=Tk()

#单选
LB1=Listbox(root)

Label(root,text='单选:选择你的课程').pack()
for item in ['Chinese','English','Math']:
    LB1.insert(END,item)
LB1.pack()

#多选
LB2=Listbox(root,selectmode=MULTIPLE)
Label(root,text='多选:你会几种编程语言').pack()
for item in ['python','C++','C','Java','Php']:
    LB2.insert(END,item)
LB2.pack()

root.mainloop()

insert()也可以选择在已有的item前后插入新的item,只需要指出在第几个。

删除Listbox中的项,使用delete,这个函数也有两个参数,第一个为开始的索引值;第二个为结束的索引值,如果不指定则只删除第一个索引项。

删除全部内容,使用delete指定第一个索引值0和最后一个参数END,即可

selection_set()指定选择的条目

selection_clear()取消选择的条目

size():得到条目个数

get():得到索引的条目

selection_includes()判断一个项是否被选中

示例:

from Tkinter import *
root=Tk()

#单选
LB1=Listbox(root)

Label(root,text='单选:选择你的课程').pack()
for item in ['Chinese','English','Math']:
    LB1.insert(END,item)
LB1.pack()

#多选
LB2=Listbox(root,selectmode=EXTENDED)
Label(root,text='多选:你会几种编程语言').pack()
for item in ['python','C++','C','Java','Php']:
    LB2.insert(END,item)
LB2.insert(1,'JS','Go','R')
LB2.delete(5,6)
LB2.select_set(0,3)
LB2.select_clear(0,1)
print LB2.size()
print LB2.get(3)
print LB2.select_includes(3)
LB2.pack()

root.mainloop()

结果:

6
R
True

Listbox与变量绑定

from Tkinter import *
root = Tk()
v = StringVar()
lb = Listbox(root,listvariable = v)
for i in range(10):
    lb.insert(END,str(i*100))
#打印当前列表中的项值
print v.get()
#输出:('0', '100', '200', '300', '400', '500', '600', '700', '800', '900')
#改变v的值,使用tuple可以与item对应
v.set(('1000','200'))
#结果只有两项了1000和200
lb.pack()
root.mainloop()


Listbox与事件绑定
不支持command属性来设置回调函数了,使用bind来指定回调函数,打印当前选中的值

绑定函数:

def bind(self, sequence=None, func=None, add=None):
    """Bind to this widget at event SEQUENCE a call to function FUNC.

    SEQUENCE is a string of concatenated event
    patterns. An event pattern is of the form
    <MODIFIER-MODIFIER-TYPE-DETAIL> where MODIFIER is one
    of Control, Mod2, M2, Shift, Mod3, M3, Lock, Mod4, M4,
    Button1, B1, Mod5, M5 Button2, B2, Meta, M, Button3,
    B3, Alt, Button4, B4, Double, Button5, B5 Triple,
    Mod1, M1. TYPE is one of Activate, Enter, Map,
    ButtonPress, Button, Expose, Motion, ButtonRelease
    FocusIn, MouseWheel, Circulate, FocusOut, Property,
    Colormap, Gravity Reparent, Configure, KeyPress, Key,
    Unmap, Deactivate, KeyRelease Visibility, Destroy,
    Leave and DETAIL is the button number for ButtonPress,
    ButtonRelease and DETAIL is the Keysym for KeyPress and
    KeyRelease. Examples are
    <Control-Button-1> for pressing Control and mouse button 1 or
    <Alt-A> for pressing A and the Alt key (KeyPress can be omitted).
    An event pattern can also be a virtual event of the form
    <<AString>> where AString can be arbitrary. This
    event can be generated by event_generate.
    If events are concatenated they must appear shortly
    after each other.

    FUNC will be called if the event sequence occurs with an
    instance of Event as argument. If the return value of FUNC is
    "break" no further bound function is invoked.

    An additional boolean parameter ADD specifies whether FUNC will
    be called additionally to the other bound function or whether
    it will replace the previous function.

    Bind will return an identifier to allow deletion of the bound function with
    unbind without memory leak.

    If FUNC or SEQUENCE is omitted the bound function or list
    of bound events are returned."""

    return self._bind(('bind', self._w), sequence, func, add)
from Tkinter import *
root = Tk()
def CallOn(event):
    root1=Tk()
    Label(root1,text='你的选择是'+lb.get(lb.curselection())+"语言!").pack()
    Button(root1,text='退出',command=root1.destroy).pack()
lb = Listbox(root)
#双击命令
lb.bind('<Double-Button-1>',CallOn)
for i in ['python','C++','C','Java','Php']:
    lb.insert(END,i)
lb.insert(END,'JS','Go','R')
lb.pack()
root.mainloop()

参考:http://blog.csdn.net/jcodeer/article/details/1811310
 

代码装饰:通过Button将选中的Listbox中的条目打印在标签Label和Entry中

from Tkinter import *
root = Tk()
root.geometry('100x100')

lb = Listbox(root)
#双击命令
v=StringVar()

#Entry类似文本框,可只读,也可修改,还可通过回调函数获取文本
#Label标签超做不是那么灵活但是也可通过回调函数获取文本
Entry(root,textvariable=v,width=6).pack()
Label(root,textvariable=v,width=6,bg='green').pack()
def Call_Entry():
    val=lb.get(lb.curselection())
    v.set(val)

Button(root,text='press',fg='blue',command=Call_Entry,width=5).pack()

for i in ['python','C++','C','Java','Php']:
    lb.insert(END,i)
lb.insert(END,'JS','Go','R')
lb.pack()
root.mainloop()

  • 26
    点赞
  • 106
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HySmiley

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值