首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ComboCtrl与CheckListBox弹出- EVT_CHECKLISTBOX不工作

ComboCtrl与CheckListBox弹出- EVT_CHECKLISTBOX不工作
EN

Stack Overflow用户
提问于 2019-03-09 21:36:07
回答 1查看 433关注 0票数 2

在上一篇文章之后,我发现我可以将ComboCtrl和Checklistbox弹出结合起来。到目前一切尚好。现在,我试图找出为什么EVT_CHECKLISTBOX不能正常工作。我把它绑错了吗?

self.lc.Bind(wx.EVT_CHECKLISTBOX, self.OnSelect)

另外:

  • 如何使弹出窗口符合内容?目前它是相当巨大的
  • 如何更改组合框,使其不再填充整个窗口?

到目前为止,我的代码如下:

代码语言:javascript
复制
import wx
import wx.stc
from wx.lib.mixins.listctrl import CheckListCtrlMixin, ListCtrlAutoWidthMixin

class CheckListCtrl(wx.ListCtrl, CheckListCtrlMixin, ListCtrlAutoWidthMixin):
    def __init__(self, parent):
        wx.ListCtrl.__init__(self, parent, wx.ID_ANY, style=wx.LC_REPORT |
                wx.SUNKEN_BORDER)
        CheckListCtrlMixin.__init__(self)
        ListCtrlAutoWidthMixin.__init__(self)  

class ListViewComboPopup(wx.ComboPopup):
    def __init__(self):
        wx.ComboPopup.__init__(self)
        self.lc = None

    def AddItem(self, txt):
        self.lc.InsertItem(0, txt)

    def OnSelect(self, event):
        print("Working fine!")

    def Init(self):
        self.value = -1
        self.curitem = -1

    def Create(self, parent):
        self.lc = CheckListCtrl(parent)
        self.lc.InsertColumn(0, '', width=90)

        self.lc.Bind(wx.EVT_CHECKLISTBOX, self.OnSelect)
        return True

    def GetControl(self):
        return self.lc

    def OnPopup(self):
        wx.ComboPopup.OnPopup(self)

class MyForm(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, title="Popup Menu Tutorial")

        comboCtrl = wx.ComboCtrl(self, wx.ID_ANY, "")        
        popupCtrl = ListViewComboPopup()
        comboCtrl.SetPopupControl(popupCtrl)

        popupCtrl.AddItem("Test 1")
        popupCtrl.AddItem("Test 2")
        popupCtrl.AddItem("Test 3") 

if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm().Show()
    app.MainLoop()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-09 23:29:57

OnCheckItem由CheckListCtrlMixin调用。

将面板添加到框架中,并将ComboCtrl的父面板设置为面板

更改ComboPopup的方法GetAdjustedSize返回值以更改大小

代码语言:javascript
复制
import wx
import wx.stc
from wx.lib.mixins.listctrl import CheckListCtrlMixin, ListCtrlAutoWidthMixin


class CheckListCtrl(wx.ListCtrl, CheckListCtrlMixin, ListCtrlAutoWidthMixin):

    def __init__(self, parent):
        wx.ListCtrl.__init__(self, parent, wx.ID_ANY, style=wx.LC_REPORT | 
                wx.SUNKEN_BORDER)
        CheckListCtrlMixin.__init__(self)
        ListCtrlAutoWidthMixin.__init__(self)
        self.SetSize(-1, -1, -1, 50)

    def OnCheckItem(self, index, flag):
        item = self.GetItem(index)
        if flag:
            what = "checked"
        else:
            what = "unchecked"

        print(f'{item.GetText()} - {what}')


class ListViewComboPopup(wx.ComboPopup):

    def __init__(self):
        wx.ComboPopup.__init__(self)
        self.lc = None

    def AddItem(self, txt):
        self.lc.InsertItem(0, txt)


    def Init(self):
        self.value = -1
        self.curitem = -1

    def Create(self, parent):
        self.lc = CheckListCtrl(parent)
        self.lc.InsertColumn(0, '', width=90)
        return True

    def GetControl(self):
        return self.lc

    def OnPopup(self):
        wx.ComboPopup.OnPopup(self)

    def GetAdjustedSize(self, minWidth, prefHeight, maxHeight):
        return wx.ComboPopup.GetAdjustedSize(
            self, minWidth, 110, maxHeight)


class MyForm(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, title="Popup Menu Tutorial")
        panel = wx.Panel(self)

        comboCtrl = wx.ComboCtrl(panel, wx.ID_ANY, "Select filter")    
        popupCtrl = ListViewComboPopup()
        comboCtrl.SetPopupControl(popupCtrl)

        popupCtrl.AddItem("Test 1")
        popupCtrl.AddItem("Test 2")
        popupCtrl.AddItem("Test 3") 


if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm().Show()
    app.MainLoop()
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55082189

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档