wxpython核心部件wx.listbox用法示例

发布时间:2020-08-09编辑:脚本学堂
有关wxpython核心部件wx.listbox的用法,wx.listbox 部件有着一个滚动框以及一个项目清单,用户能够从清单中选取一个或多个项目,需要的朋友参考下。

专题教程:wxpython中文教程

wx.ListBox 部件有着一个滚动框以及一个项目清单。
用户能够从清单中选取一个或多个项目,取决于该部件被创建为单选择框还是多选框,选中的项目会被标记出来。

例子:
 

复制代码 代码示例:

#!/usr/bin/python
#coding=utf-8

#listbox.py

import wx
from time import *

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title):
        wx.Frame.__init__(self, parent, id, title,
                          wx.DefaultPosition, (550, 350))

        zone_list = ['CET', 'GMT', 'MSK', 'EST', 'PST', 'EDT']

        self.full_list = {
                          'CET': '中欧时间',
                          'GMT': '格林威治标准时间',
                          'MSK': '莫斯科时间',
                          'EST': '东部标准时间',
                          'PST': '太平洋标准时间',
                          'EDT': '东部日间时间'
                          }
        self.time_diff = {
                          'CET': 1,
                          'GMT': 0,
                          'MSK': 3,
                          'EST': -5,
                          'PST': -8,
                          'EDT': -4
                          }
       
        vbox = wx.BoxSizer(wx.VERTICAL)
        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        hbox2 = wx.BoxSizer(wx.HORIZONTAL)
        hbox3 = wx.BoxSizer(wx.HORIZONTAL)
       
        self.timer = wx.Timer(self, 1)
        self.diff = 0
        panel = wx.Panel(self, -1)
        self.time_zones = wx.ListBox(panel, 26, wx.DefaultPosition,
                                     (170, 130), zone_list, wx.LB_SINGLE)
        self.time_zones.SetSelection(0)
        self.text = wx.TextCtrl(panel, -1, '中欧时间', size=(200, 130),
                                style=wx.TE_MULTILINE)
        self.time = wx.StaticText(panel, -1, '')
        btn = wx.Button(panel, wx.ID_CLOSE, '关 闭')
        hbox1.Add(self.time_zones, 0, wx.TOP, 40)
        hbox1.Add(self.text, 1, wx.LEFT | wx.TOP, 40)
        hbox2.Add(self.time, 1, wx.ALIGN_CENTER)
        hbox3.Add(btn, 0, wx.ALIGN_CENTER)
        vbox.Add(hbox1, 0, wx.ALIGN_CENTER)
        vbox.Add(hbox2, 1, wx.ALIGN_CENTER)
        vbox.Add(hbox3, 1, wx.ALIGN_CENTER)

        panel.SetSizer(vbox)
        self.timer.Start(100)
       
        self.Bind(wx.EVT_BUTTON, self.OnClose, id=wx.ID_CLOSE)
        self.Bind(wx.EVT_LISTBOX, self.OnSelect, id=26)
        self.Bind(wx.EVT_TIMER, self.OnTimer, id=1)
       
    def OnClose(self, event):
        self.Close()
       
    def OnSelect(self, event):
        index = event.GetSelection()
        time_zone = self.time_zones.GetString(index)
        self.diff = self.time_diff[time_zone]
        self.text.SetValue(self.full_list[time_zone])
       
    def OnTimer(self, event):
        ct = gmtime()
        print_time = (ct[0], ct[1], ct[2], ct[3]+self.diff,
                      ct[4], ct[5], ct[6], ct[7], -1)
        self.time.SetLabel(strftime("%H:%M:%S, %D", print_time))     
     
class MyApp(wx.App):
    def OnInit(self):
        frame = MyFrame(None, -1, 'listbox.py')
        frame.Center()
        frame.Show(True)
        return True
   
app = MyApp(0)
app.MainLoop()
 

程序 listbox.py 共有 4 个部件,分别是:
wx.ListBox, wx.TextCtrl, wx.StaticText 以及 wx.Button. 部件通过 wx.BoxSizer 组织起来. wx.ListBox 有一个包含了 6 个不同世界时间的清单.

这些缩写在 wx.TextCtrl 中进行了解释。
当前时间在 wx.StaticText 中显示出来。
wx.Timer 部件用于每 100 毫秒更新一次当前时间。

如图:

<a href=http://www.jb200.com/python/wxpythonhexinbujian/ target=_blank class=infotextkey>wxpython核心部件</a>wx.listbox