首页 > 解决方案 > wxPython 组合框的下拉菜单在弹出窗口上不起作用

问题描述

当我在 wxPython 弹出窗口上放置一个组合框时,下拉功能不起作用。

我的示例代码是这样的。

import wx

class TestPopup(wx.PopupWindow):

    def __init__(self, parent):
        """Constructor"""
        wx.PopupWindow.__init__(self, parent = parent)

        self.popUp = wx.Panel(self, size = (200,200))
        self.popUp.SetBackgroundColour("white")

        self.st = wx.StaticText(self.popUp, -1, " Select Comport", pos=(10,10))
        self.selCom = wx.ComboBox(self.popUp, -1, pos=(85, 50), choices=["Com1", "Com2"])

        self.mySizer = wx.BoxSizer(wx.VERTICAL)
        self.mySizer.Add(self.popUp)
        self.SetSizerAndFit(self.mySizer)


class MainFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, parent = None, title= "ComboBox Test", size = (300,200))
        self.panel = wx.Panel(self)
        self.selComButton = wx.Button(self.panel, -1, "Select Comport")
        self.selComButton.Bind(wx.EVT_BUTTON, self.selectPopUp)
        self.selCom = wx.ComboBox(self.panel, -1, pos = (85, 50),choices=["Com1", "Com2"])


    def selectPopUp(self, event):

        win = TestPopup(self.GetTopLevelParent())
        btn = event.GetEventObject()
        pos = btn.ClientToScreen((0, 0))
        sz = btn.GetSize()
        win.Position(pos, (0, sz[1]))

        win.Show(True)


if __name__ == "__main__":
    app = wx.App()
    frame = MainFrame()
    frame.Show()
    app.MainLoop()

在代码中,主框架中的组合框运行良好。但是,在单击“选择组合”按钮时显示的弹出窗口中,组合框不起作用。

这有什么问题?

在此处输入图像描述

它运作良好。

在此处输入图像描述

它不起作用。

标签: pythonwxpython

解决方案


ComboBox 在 Linux 下当然可以在弹出窗口中使用,因此很难直接解决您的问题。但是,我建议在这种情况下,如果您使用 aDialog而不是 a ,您可能会得到更好的服务,PopUpWindow因为它会为您完成繁重的工作。
例如:

import wx

class MainFrame(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, parent = None, title= "Communication Port", size = (300,200))
        self.panel = wx.Panel(self)
        self.selComButton = wx.Button(self.panel, -1, "Select Comport")
        self.selComButton.SetToolTip("Select Comport")
        self.selComButton.Bind(wx.EVT_BUTTON, self.selectPopUp)

    def selectPopUp(self, event):
        dlg = wx.SingleChoiceDialog(None,"Pick a com port", "Com ports",["Com1","Com2","Com3","Com4"],wx.CHOICEDLG_STYLE)
        if dlg.ShowModal() == wx.ID_OK:
            res = dlg.GetStringSelection()
            self.selComButton.SetLabel(res)
        dlg.Destroy()

if __name__ == "__main__":
    app = wx.App()
    frame = MainFrame()
    frame.Show()
    app.MainLoop()

在此处输入图像描述


推荐阅读