wxPython组合框的下拉列表在弹出窗口上不起作用

2024-04-23 07:09:49 发布

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

当我在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()

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

这个怎么了?你知道吗

enter image description here

效果很好。你知道吗

enter image description here

它不起作用。你知道吗


Tags: 代码posselfinitdefwinclassparent
1条回答
网友
1楼 · 发布于 2024-04-23 07:09:49

在Linux下,ComboBox肯定是在弹出窗口中工作的,因此很难直接解决您的问题。不过,我建议,在这种情况下,如果您使用Dialog而不是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()

enter image description here

相关问题 更多 >