python - 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()
在代码中,主框架中的组合框运行良好。但是,在单击“选择组合”按钮时显示的弹出窗口中,组合框不起作用。
这有什么问题?
它运作良好。
它不起作用。
解决方案
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()
推荐阅读
- coq - 是否可以将上下文模式转换为 Gallina 函数?
- python - 隔离林大数据集
- vue.js - 为什么 Flask 不与 VueJS `npm run serve` 前端保持会话?
- c# - 为什么 SQL Server 2017 CU18 在更新和插入命令(C# 应用程序、docker、debian 9/10)上比 CU3 慢得多?
- assembly - 示例:如何在组装中打开 STM32 上的 LED2?
- batch-file - 使用基本命令时批处理文件运行速度极慢
- python - Python如何检查除某些值外是否为字母数字
- google-compute-engine - 重启后无法连接到实例
- go - 在给定范围内生成随机 128 位小数
- javascript - 如何将字符串中被误解的 UTF-8 实例(例如 ’)转换为正确的字符?