首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PopupWindow内部的CheckListBox

PopupWindow内部的CheckListBox
EN

Stack Overflow用户
提问于 2021-07-13 15:13:53
回答 1查看 31关注 0票数 0

我试图弄清楚为什么wx.CheckListBox在弹出窗口中不能正常工作。滚动条可以工作,但我无法选择任何内容。我尝试了多种类型的弹出窗口,但仍然获得相同的行为。

除了使用框架之外,还有什么解决方法的想法吗?

代码语言:javascript
复制
import wx

class MyFrame(wx.Frame):    
    def __init__(self):
        super().__init__(parent=None, title='Hello World')
        panel = wx.Panel(self)

        

        
        #self.text_ctrl = wx.TextCtrl(panel, pos=(5, 5))
        my_btn = wx.Button(panel, label='Press Me', pos=(5, 55))
        my_btn.Bind(wx.EVT_BUTTON, self.OnShowPopupTransient)

        self.Show()


    def OnShowPopupTransient(self, evt):
        sampleList = ['zero', 'one', 'two', 'three', 'four', 'five',
                      'six', 'seven', 'eight', 'nine', 'ten', 'eleven',
                      'twelve', 'thirteen', 'fourteen']
        win = TestTransientPopup(self,
                                    wx.SIMPLE_BORDER,
                                    sampleList)

        
        # Show the popup right below or above the button
        # depending on available screen space...
        btn = evt.GetEventObject()
        pos = btn.ClientToScreen( (0,0) )
        sz =  btn.GetSize()
        win.Position(pos, (0, sz[1]))

        win.Popup()

class TestTransientPopup(wx.PopupTransientWindow):
    """Adds a bit of text and mouse movement to the wx.PopupWindow"""
    def __init__(self, parent, style, sampleList):
        wx.PopupTransientWindow.__init__(self, parent, style)
    
        panel = wx.Panel(self)
        panel.SetBackgroundColour("#FFB6C1")
        
        lb = wx.CheckListBox(panel, -1, (80, 50), wx.DefaultSize, sampleList)
        
        btn = wx.Button(panel, -1, "Press Me")
        spin = wx.SpinCtrl(panel, -1, "Hello", size=(100,-1))
        #btn.Bind(wx.EVT_BUTTON, self.OnButton)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(lb, 0, wx.ALL, 5)
        sizer.Add(btn, 0, wx.ALL, 5)
        sizer.Add(spin, 0, wx.ALL, 5)
        panel.SetSizer(sizer)

        sizer.Fit(panel)
        sizer.Fit(self)
        self.Layout()

if __name__ == '__main__':
    app = wx.App()
    frame = MyFrame()
    app.MainLoop()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-14 15:29:34

您没有指定您的平台或wxPython版本,但是在Linux wxPython '4.1.1 gtk3 (phoenix) wxWidgets 3.1.5‘上,以下代码似乎可以正常工作。(除非你期待其他的东西)

代码语言:javascript
复制
import wx

class MyFrame(wx.Frame):    
    def __init__(self):
        super().__init__(parent=None, title='Hello World')
        panel = wx.Panel(self)
        my_btn = wx.Button(panel, label='Press Me', pos=(5, 55))
        my_btn.Bind(wx.EVT_BUTTON, self.OnShowPopupTransient)
        self.Show()

    def OnShowPopupTransient(self, evt):
        sampleList = ['zero', 'one', 'two', 'three', 'four', 'five',
                      'six', 'seven', 'eight', 'nine', 'ten', 'eleven',
                      'twelve', 'thirteen', 'fourteen']
        win = TestTransientPopup(self, wx.BORDER_SIMPLE, sampleList)
        # Show the popup right below or above the button
        # depending on available screen space...
        btn = evt.GetEventObject()
        pos = btn.ClientToScreen( (0, 0) )
        sz =  btn.GetSize()
        win.Position(pos, (0, sz[1]))
        win.Popup(focus=self)


class TestTransientPopup(wx.PopupTransientWindow):
    """Adds a bit of text and mouse movement to the wx.PopupWindow"""
    def __init__(self, parent, style, sampleList):
        wx.PopupTransientWindow.__init__(self, parent, style)
        self.SetSize((150, 300))    
        panel = wx.Panel(self, size=(150, 300))
        panel.SetBackgroundColour("dark grey")
        
        self.lb = wx.CheckListBox(panel, -1, choices=sampleList)
        
        btn = wx.Button(panel, -1, "Press Me")
        self.spin = wx.SpinCtrl(panel, -1, "10")
        btn.Bind(wx.EVT_BUTTON, self.OnButton)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.lb, 1, wx.ALL, 5)
        sizer.Add(btn, 0, wx.ALL, 5)
        sizer.Add(self.spin, 0, wx.ALL, 5)
        panel.SetSizer(sizer)
        self.Layout()

    def OnButton(self, event):
        checked_items = self.lb.GetCheckedStrings()
        spin_value = self.spin.GetValue()
        print("Selected items", checked_items)
        print("Spin value", spin_value)
        self.Dismiss()

if __name__ == '__main__':
    app = wx.App()
    frame = MyFrame()
    app.MainLoop()

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68358027

复制
相关文章

相似问题

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