Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
wx.python将事件绑定到editableListBox列表项';s_Python_Python 2.7_Wxpython_Wxwidgets - Fatal编程技术网

wx.python将事件绑定到editableListBox列表项';s

wx.python将事件绑定到editableListBox列表项';s,python,python-2.7,wxpython,wxwidgets,Python,Python 2.7,Wxpython,Wxwidgets,我正在寻找一种方法,将函数绑定到从wx.gizmos editableListBox中选择列表项触发的事件。我希望选择使用用户可以编辑的字符串填充richTextCtrl1 下面是一个没有事件绑定或函数的UI设计的快速模型,因为我的实际应用程序要大得多 import wx import wx.richtext import wx.gizmos def create(parent): return myFrame(parent) [wxID_MYFRAME, wxID_MYFR

我正在寻找一种方法,将函数绑定到从wx.gizmos editableListBox中选择列表项触发的事件。我希望选择使用用户可以编辑的字符串填充richTextCtrl1

下面是一个没有事件绑定或函数的UI设计的快速模型,因为我的实际应用程序要大得多

import wx
import wx.richtext
import wx.gizmos

def create(parent):
        return myFrame(parent)

[wxID_MYFRAME, wxID_MYFRAMEMYEITABLELISTBOX, wxID_MYFRAMEMYFRAME_PANEL, 
 wxID_MYFRAMERICHTEXTCTRL1, 
] = [wx.NewId() for _init_ctrls in range(4)]

class myFrame(wx.Frame):
    def _init_ctrls(self, prnt):

        wx.Frame.__init__(self, id=wxID_MYFRAME, name=u'myFrame', parent=prnt,
          pos=wx.Point(551, 188), size=wx.Size(500, 500),
          style=wx.DEFAULT_FRAME_STYLE, title=u'myPanel')
        self.SetClientSize(wx.Size(498, 466))
        self.SetInitialSize(wx.Size(500, 500))

        self.myFrame_panel = wx.Panel(id=wxID_MYFRAMEMYFRAME_PANEL,
              name=u'myFrame_panel', parent=self, pos=wx.Point(0, 0),
              size=wx.Size(498, 466), style=wx.TAB_TRAVERSAL)

        self.myEitableListBox = wx.gizmos.EditableListBox(id=wxID_MYFRAMEMYEITABLELISTBOX,
              label=u'myEitableListBox', name=u'myEitableListBox',
              parent=self.myFrame_panel, pos=wx.Point(8, 56), size=wx.Size(200,
          248))
        self.myEitableListBox.SetStrings(['this', 'that', 'other'])

        self.richTextCtrl1 =    wx.richtext.RichTextCtrl(id=wxID_MYFRAMERICHTEXTCTRL1,
              parent=self.myFrame_panel, pos=wx.Point(224, 64),
              size=wx.Size(248, 240), style=wx.richtext.RE_MULTILINE,
              value=u'')
        self.richTextCtrl1.SetLabel(u'')

    def __init__(self, parent):
        self._init_ctrls(parent)

if __name__ == '__main__':
    app = wx.PySimpleApp()
    frame = create(None)
    frame.Show()

    app.MainLoop()
查看wx.python演示示例,我找不到解决方案。谷歌也帮不了多少忙。我尝试了Boa构造函数,并将一些事件绑定到可编辑列表框。以下是我尝试过的绑定,但没有一个有效:

self.myEitableListBox.Bind(wx.EVT_SYS_COLOUR_CHANGED,
          self.OnmyEitableListBoxSysColourChanged)
self.myEitableListBox.Bind(wx.EVT_SET_FOCUS, self.OnmyEitableListBoxSetFocus)
self.myEitableListBox.Bind(wx.EVT_LEFT_DOWN, self.OnmyEitableListBoxLeftDown)

def OnmyEitableListBoxSysColourChanged(self, event):
    print self.myEitableListBox.GetSelection()
    print "fired"
    event.Skip()

def OnmyEitableListBoxSetFocus(self, event):
    print self.myEitableListBox.GetSelection(self)
    print "fired"
    event.Skip()

def OnmyEitableListBoxLeftDown(self, event):
    print self.myEitableListBox.GetSelection()
    lb = event.GetEventObject()
    data = lb.GetClientData(lb.GetSelection())
    print "fired", data
    event.Skip()
我一直在阅读文档,试图找到wx.python的tut。我还没有发现任何东西可以帮助我理解如何获取所选列表项。如果我可以得到所选的列表项,我想我可以创建填充ritchTextFeild的函数。我不应该认为GetSelection()和其他东西是我试图理解和失败的原因。此外,在运行时控制台中没有生成错误,因此我真的不知道从这里可以走到哪里


感谢

EditableListBox实际上包含一个ListCtrl,要访问该控件,请使用self.myEitableListBox.ListCtrl,通过使用返回的对象可以绑定事件

下面添加了几行代码的示例将在选择EditableListBox中的项目时,将其添加到richtext控件

import wx
import wx.richtext
import wx.gizmos

def create(parent):
        return myFrame(parent)

[wxID_MYFRAME, wxID_MYFRAMEMYEITABLELISTBOX, wxID_MYFRAMEMYFRAME_PANEL, 
 wxID_MYFRAMERICHTEXTCTRL1, 
] = [wx.NewId() for _init_ctrls in range(4)]

class myFrame(wx.Frame):
    def _init_ctrls(self, prnt):

        wx.Frame.__init__(self, id=wxID_MYFRAME, name=u'myFrame', parent=prnt,
          pos=wx.Point(551, 188), size=wx.Size(500, 500),
          style=wx.DEFAULT_FRAME_STYLE, title=u'myPanel')
        self.SetClientSize(wx.Size(498, 466))
        self.SetInitialSize(wx.Size(500, 500))

        self.myFrame_panel = wx.Panel(id=wxID_MYFRAMEMYFRAME_PANEL,
              name=u'myFrame_panel', parent=self, pos=wx.Point(0, 0),
              size=wx.Size(498, 466), style=wx.TAB_TRAVERSAL)

        self.myEitableListBox = wx.gizmos.EditableListBox(id=wxID_MYFRAMEMYEITABLELISTBOX,
              label=u'myEitableListBox', name=u'myEitableListBox',
              parent=self.myFrame_panel, pos=wx.Point(8, 56), size=wx.Size(200,
          248))
        self.myEitableListBox.SetStrings(['this', 'that', 'other'])

        self.richTextCtrl1 =    wx.richtext.RichTextCtrl(id=wxID_MYFRAMERICHTEXTCTRL1,
              parent=self.myFrame_panel, pos=wx.Point(224, 64),
              size=wx.Size(248, 240), style=wx.richtext.RE_MULTILINE,
              value=u'')
        self.richTextCtrl1.SetLabel(u'')

        self.myEitableListBox.ListCtrl.Bind(
            wx.EVT_LIST_ITEM_SELECTED, self.on_listbox)

    def __init__(self, parent):
        self._init_ctrls(parent)

    def on_listbox(self, event):
        text = '{}\n'.format(event.Text)
        self.richTextCtrl1.AppendText(text)


if __name__ == '__main__':
    app = wx.App()
    frame = create(None)
    frame.Show()

    app.MainLoop()

出现错误,因为使用了折旧后的PySimpleApp,请改用App,我在上面的代码中也对其进行了更改。

EditableListBox实际上包含一个ListCtrl,若要访问控件,请使用self.myEitableListBox.ListCtrl,通过使用返回的对象可以绑定事件

下面添加了几行代码的示例将在选择EditableListBox中的项目时,将其添加到richtext控件

import wx
import wx.richtext
import wx.gizmos

def create(parent):
        return myFrame(parent)

[wxID_MYFRAME, wxID_MYFRAMEMYEITABLELISTBOX, wxID_MYFRAMEMYFRAME_PANEL, 
 wxID_MYFRAMERICHTEXTCTRL1, 
] = [wx.NewId() for _init_ctrls in range(4)]

class myFrame(wx.Frame):
    def _init_ctrls(self, prnt):

        wx.Frame.__init__(self, id=wxID_MYFRAME, name=u'myFrame', parent=prnt,
          pos=wx.Point(551, 188), size=wx.Size(500, 500),
          style=wx.DEFAULT_FRAME_STYLE, title=u'myPanel')
        self.SetClientSize(wx.Size(498, 466))
        self.SetInitialSize(wx.Size(500, 500))

        self.myFrame_panel = wx.Panel(id=wxID_MYFRAMEMYFRAME_PANEL,
              name=u'myFrame_panel', parent=self, pos=wx.Point(0, 0),
              size=wx.Size(498, 466), style=wx.TAB_TRAVERSAL)

        self.myEitableListBox = wx.gizmos.EditableListBox(id=wxID_MYFRAMEMYEITABLELISTBOX,
              label=u'myEitableListBox', name=u'myEitableListBox',
              parent=self.myFrame_panel, pos=wx.Point(8, 56), size=wx.Size(200,
          248))
        self.myEitableListBox.SetStrings(['this', 'that', 'other'])

        self.richTextCtrl1 =    wx.richtext.RichTextCtrl(id=wxID_MYFRAMERICHTEXTCTRL1,
              parent=self.myFrame_panel, pos=wx.Point(224, 64),
              size=wx.Size(248, 240), style=wx.richtext.RE_MULTILINE,
              value=u'')
        self.richTextCtrl1.SetLabel(u'')

        self.myEitableListBox.ListCtrl.Bind(
            wx.EVT_LIST_ITEM_SELECTED, self.on_listbox)

    def __init__(self, parent):
        self._init_ctrls(parent)

    def on_listbox(self, event):
        text = '{}\n'.format(event.Text)
        self.richTextCtrl1.AppendText(text)


if __name__ == '__main__':
    app = wx.App()
    frame = create(None)
    frame.Show()

    app.MainLoop()

出现错误,因为使用了折旧后的PySimpleApp,请改用App,我在上面的代码中也对其进行了更改。

您收到了事件。选中wx.EVT_LIST_ITEM_,我需要找到更多事件的事件属性,如EVT_LIST_INSERT_ITEM(等),在哪里可以找到其他事件的文档。[属性]?我从文档中尝试了event.GetItemText和许多其他方法和事件(wx.EVT),希望通过尝试和错误,一些无法编程的东西能够工作。我想我正在寻找有代码示例的文档来理解wxPython的文档。或者至少每个wx.EVT都有什么event.attr可用?如果您从wx.EVT_列表_项_收到event.Text,我需要找到更多事件的事件属性,如EVT_列表_插入_项(等等),在哪里可以找到其他事件的文档。[属性]?我从文档中尝试了event.GetItemText和许多其他方法和事件(wx.EVT),希望通过尝试和错误,一些无法编程的东西能够工作。我想我正在寻找有代码示例的文档来理解wxPython的文档。或者每个wx.EVT至少有什么event.attr可用?