wx.python公司将事件绑定到editableListBox列表项的

2024-10-02 20:35:28 发布

您现在位置:Python中文网/ 问答频道 /正文

Im正在寻找一种方法,将函数绑定到一个事件,该事件是由在wx.小发明可编辑列表框。我希望所选内容用用户可以编辑的字符串填充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构造函数,并将一些事件绑定到可编辑列表框。以下是我尝试过的绑定,但都不起作用:

^{pr2}$

我一直在看医生,并试图找到wx.python公司. 我还没有找到任何东西可以帮助我理解如何获得所选的列表项。如果我能得到选中的列表项,我想我可以创建一个填充ritchtextfield的函数。我不应该认为GetSelection()和其他东西都是我在尝试而未能理解正在发生的事情。也没有在控制台运行时产生的错误,所以我真的不知道从这里去哪里。在

谢谢


Tags: nameposselfidsizeinit事件parent
1条回答
网友
1楼 · 发布于 2024-10-02 20:35:28

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,我在上面的代码中也做了更改。在

相关问题 更多 >