正在查找wxPython小部件
我正在wxPython中创建一个对话,需要让我的用户按特定顺序放置数据。它应该是这样的:正在查找wxPython小部件,wxpython,Wxpython,我正在wxPython中创建一个对话,需要让我的用户按特定顺序放置数据。它应该是这样的: 很抱歉,这幅画太粗糙了,就我个人而言,我在任何地方都找不到。wx python有一种叫做items picker的东西。 我不确定它是在哪个版本中引入的,但在wxpython版本2.9.4.0中,您可以在wx.lib.itemspicker中找到它 如果它不在您的版本中,这里是wx.lib中的代码 ''' Created on Oct 3, 2010 @authors: Daphna Rosenbom,
很抱歉,这幅画太粗糙了,就我个人而言,我在任何地方都找不到。wx python有一种叫做items picker的东西。 我不确定它是在哪个版本中引入的,但在wxpython版本2.9.4.0中,您可以在wx.lib.itemspicker中找到它 如果它不在您的版本中,这里是wx.lib中的代码
'''
Created on Oct 3, 2010
@authors: Daphna Rosenbom,Gitty Zinger,Moshe Cohavi and Yoav Glazner
The widget is contributed by NDS ltd under the same license as wxPython
items_picker.ItemsPicker:
- Displays available items to choose from,</LI>
- Selection is done by the Add button or Double Click,</LI>
- De-Selection is done by the Remove button or Double Click,</LI>
Derived from wxPanel
'''
import wx
__version__ = 0.1
IP_DEFAULT_STYLE = 0
IP_SORT_CHOICES = 1
IP_SORT_SELECTED = 2
IP_REMOVE_FROM_CHOICES = 4
wxEVT_IP_SELECTION_CHANGED = wx.NewEventType()
EVT_IP_SELECTION_CHANGED = wx.PyEventBinder(wxEVT_IP_SELECTION_CHANGED, 1)
LB_STYLE = wx.LB_EXTENDED|wx.LB_HSCROLL
class IpSelectionChanged(wx.PyCommandEvent):
def __init__(self, id, items, object = None):
wx.PyCommandEvent.__init__(self, wxEVT_IP_SELECTION_CHANGED, id)
self.__items = items
self.SetEventObject(object)
def GetItems(self):
return self.__items
class ItemsPicker(wx.Panel):
'''
ItemsPicker is a widget that allows the user to form a set of picked
items out of a given list
'''
def __init__(self, parent, id=wx.ID_ANY, choices = [],
label = '', selectedLabel = '',
ipStyle = IP_DEFAULT_STYLE,
*args, **kw):
'''
ItemsPicker(parent, choices = [], label = '', selectedLabel = '',
ipStyle = IP_DEFAULT_STYLE)
'''
wx.Panel.__init__(self, parent, id, *args, **kw)
self._ipStyle = ipStyle
sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(self._CreateSourceList(choices, label), 1,
wx.EXPAND|wx.ALL, 5)
sizer.Add(self._CreateButtons(), 0, wx.ALIGN_CENTER|wx.ALL, 5)
sizer.Add(self._CreateDestList(selectedLabel), 1,
wx.EXPAND|wx.ALL, 5)
self.SetSizer(sizer)
def SetItems(self, items):
'''SetItems(self, items)=> None
items - Sequence of strings that the user can pick from'''
return self._source.SetItems(items)
def GetItems(self):
'''GetItems(self)=> items
returns list of strings that the user can pick from'''
return self._source.GetItems()
Items = property(fget = GetItems,
fset = SetItems,
doc = 'See GetItems/SetItems')
def GetSelections(self):
'''GetSelections(self)=>items
returns list of strings that were selected
'''
return self._dest.GetItems()
def SetSelections(self, items):
'''SetSelections(self, items)=>None
items - Sequence of strings to be selected
The items are displayed in the selection part of the widget'''
assert len(items)==len(set(items)),"duplicate items are not allowed"
if items != self._dest.GetItems():
self._dest.SetItems(items)
self._FireIpSelectionChanged()
Selections = property(fget = GetSelections,
fset = SetSelections,
doc = 'See GetSelections/SetSelections')
def _CreateButtons(self):
sizer = wx.BoxSizer(wx.VERTICAL)
self.bAdd = wx.Button(self, -1, label = 'Add ->')
self.bAdd.Bind(wx.EVT_BUTTON, self._OnAdd)
self.bRemove = wx.Button(self, -1, label = '<- Remove')
self.bRemove.Bind(wx.EVT_BUTTON, self._OnRemove)
sizer.Add(self.bAdd, 0, wx.EXPAND|wx.ALL|wx.ALIGN_CENTER_VERTICAL, 5)
sizer.Add(self.bRemove, 0, wx.EXPAND|wx.ALL, 5)
return sizer
def _set_add_button_label(self, label=None):
if label is None:
return
self.bAdd.SetLabel(label)
add_button_label = property(fset = _set_add_button_label, fget = lambda x:x)
def _set_remove_button_label(self, label=None):
if label is None:
return
self.bRemove.SetLabel(label)
remove_button_label = property(fset = _set_remove_button_label, fget = lambda x:x)
def _OnAdd(self, e):
if self._ipStyle & IP_REMOVE_FROM_CHOICES:
self._MoveItems(self._source,self._dest)
else:
self._AddSelectedItems()
def _MoveItems(self,source,dest):
selections = source.GetSelections()
selectedItems = map(source.GetString, selections)
dest.SetItems(dest.GetItems() + selectedItems)
selections = set(selections)
source.SetItems([item for i, item in enumerate(source.GetItems())\
if i not in selections])
self._FireIpSelectionChanged()
def _AddSelectedItems(self):
newItems = map(self._source.GetString, self._source.GetSelections())
items = self._dest.GetItems()
oldItems = set(items)
for newItem in newItems:
if newItem not in oldItems:
items.append(newItem)
self.SetSelections(items)
def _FireIpSelectionChanged(self):
self.GetEventHandler().ProcessEvent(
IpSelectionChanged(self.GetId(),
self._dest.GetItems(),
self ))
def _OnRemove(self, e):
if self._ipStyle & IP_REMOVE_FROM_CHOICES:
self._MoveItems(self._dest, self._source)
else:
self._RemoveSelected()
def _RemoveSelected(self):
selections = self._dest.GetSelections()
if selections:
allItems = self._dest.GetItems()
items = [item for i, item in enumerate(allItems)\
if i not in selections]
self.SetSelections(items)
self._FireIpSelectionChanged()
def _CreateSourceList(self, items, label):
style = LB_STYLE
if self._ipStyle & IP_SORT_CHOICES:
style |= wx.LB_SORT
sizer = wx.BoxSizer(wx.VERTICAL)
if label:
sizer.Add(wx.StaticText(self, label = label), 0,
wx.ALIGN_LEFT|wx.ALL, 5)
self._source = wx.ListBox(self, -1, style = style)
self._source.Bind(wx.EVT_LISTBOX_DCLICK, self._OnDClick)
self._source.SetItems(items)
sizer.Add(self._source, 1, wx.EXPAND|wx.ALL, 5)
return sizer
def _CreateDestList(self, label):
style = LB_STYLE
if self._ipStyle & IP_SORT_SELECTED:
style |= wx.LB_SORT
sizer = wx.BoxSizer(wx.VERTICAL)
if label:
sizer.Add(wx.StaticText(self, label = label), 0,
wx.ALIGN_LEFT|wx.ALL, 5)
self._dest = wx.ListBox(self, -1, style = style)
self._dest.Bind(wx.EVT_LISTBOX_DCLICK, self._OnDClick)
sizer.Add(self._dest, 1, wx.EXPAND|wx.ALL, 5)
return sizer
def _OnDClick(self, e):
lb = e.GetEventObject()
selections = lb.GetSelections()
if len(selections) != 1:
return #DCLICK only works on one item
if e.GetSelection() != selections[0]:
#this can happen using ^DCLICK when two items are selected
return
if lb == self._source:
self._OnAdd(e)
else:
self._OnRemove(e)
if __name__ == '__main__':
test = wx.PySimpleApp(0)
frame = wx.Frame(None, -1)
d = wx.Dialog(frame, style = wx.RESIZE_BORDER|wx.DEFAULT_DIALOG_STYLE)
d.sizer = wx.BoxSizer(wx.VERTICAL)
d.sizer.Add(wx.StaticText(d, -1, label = 'Example of the ItemsPicker'),
0, wx.ALL, 10)
ip = ItemsPicker(d, -1, ['pop', 'cool', 'lame'],
'Stuff:', 'Selected stuff:',IP_SORT_SELECTED|IP_SORT_CHOICES|IP_REMOVE_FROM_CHOICES)
ip.add_button_label = u'left -> right'
ip.remove_button_label = u'right -> left'
d.sizer.Add(ip, 1, wx.EXPAND, 1)
d.SetSizer(d.sizer)
test.SetTopWindow(frame)
def callback(e):
print 'selected items', e.GetItems()
d.Bind(EVT_IP_SELECTION_CHANGED, callback)
d.ShowModal()
d.Destroy()
frame.Close()
“”
创建于2010年10月3日
@作者:Daphna Rosenbom、Gitty Zinger、Moshe Cohavi和Yoav Glazner
该小部件由NDS有限公司以与wxPython相同的许可证提供
items\u picker.ItemsPicker:
-显示可供选择的项目,
-通过添加按钮或双击来完成选择,
-取消选择通过删除按钮或双击来完成。
源自wxPanel
'''
导入wx
__版本=0.1
IP_默认_样式=0
IP_排序_选项=1
IP_排序_选择=2
IP_从_选项中删除_=4
wxEVT_IP_SELECTION_CHANGED=wx.NewEventType()
EVT_IP_SELECTION_CHANGED=wx.PyEventBinder(wxEVT_IP_SELECTION_CHANGED,1)
LB_样式=wx.LB_扩展型| wx.Lbhscroll
类IpSelectionChanged(wx.PyCommandEvent):
定义初始化(self、id、items、object=None):
PyCommandEvent.\uuuuu init\uuuuuuuuuuuux(self,wxEVT\u IP\u SELECTION\u CHANGED,id)
self.\uu items=项目
self.SetEventObject(对象)
def GetItems(自身):
返回自己的项目
类别ItemsPicker(wx.Panel):
'''
ItemsPicker是一个小部件,允许用户形成一组数据
给定列表中的项目
'''
def uuu init uuuu(self,parent,id=wx.id\u ANY,choices=[],
标签=“”,选择标签=“”,
ipStyle=IP_默认_样式,
*args,**千瓦):
'''
ItemsPicker(父项,选项=[],标签='',selectedLabel='',
ipStyle=IP_默认_样式)
'''
wx.Panel.\uuuuu init\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
self._ipStyle=ipStyle
sizer=wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(self.\u CreateSourceList(选项,标签),1,
wx.展开| wx.ALL,5)
sizer.Add(self._CreateButtons(),0,wx.ALIGN_CENTER | wx.ALL,5)
sizer.Add(self.\u CreateDestList(selectedLabel))1,
wx.展开| wx.ALL,5)
自整定器(施胶器)
def设置项目(自身、项目):
''设置项(自身,项)=>无
items-用户可以从“”中选择的字符串序列
返回self.\u source.SetItems(项目)
def GetItems(自身):
''获取项目(自身)=>项目
返回用户可以从“”中选择的字符串列表
返回self.\u source.GetItems()
Items=属性(fget=GetItems,
fset=设置项,
doc='请参见GetItems/SetItems')
def GetSelections(自):
''GetSelections(self)=>项目
返回所选字符串的列表
'''
返回self.\u dest.GetItems()
def选择(自身、项目):
''设置选择(自身、项目)=>无
项目-要选择的字符串序列
这些项目显示在小部件“”的选择部分中
断言len(项)==len(set(项)),“不允许重复项”
如果是项目!=self.\u dest.GetItems():
自身目的设置项(项)
self.\u FireIpSelectionChanged()
选择=属性(fget=GetSelections,
fset=选举,
doc='请参见GetSelections/SetSelections')
定义创建按钮(自):
sizer=wx.BoxSizer(wx.VERTICAL)
self.bAdd=wx.Button(self,-1,标签='Add->')
自添加绑定(wx.EVT_按钮,自添加)
self.bRemove=wx.Button(self,-1,标签='right'
ip.remove_按钮_标签=u'右->左'
d、 sizer.Add(ip,1,wx.EXPAND,1)
d、 固定器(d.sizer)
测试设置窗口(框架)
def回调(e):
打印“选定项目”,例如GetItems()
d、 绑定(EVT\u IP\u选择更改,回调)
d、 ShowModal()
d、 销毁
frame.Close()