【问题标题】:Unable to add checkbox to wxpython GUI during runtime在运行时无法将复选框添加到 wxpython GUI
【发布时间】:2015-01-06 21:30:34
【问题描述】:

我试图在运行时向 wxpython gui 添加复选框,但它似乎没有出现。我的代码如下。

我已尝试关注帖子 Add checkbox in wxPython in runtime>,但无法使其正常工作。我还使用 wxFormBuilder 来查看它是如何在初始化期间添加复选框的;我能够验证 self.mainWindow.p_SelectionPanel 是我要添加复选框的位置。我还检查了调试器,以确保每一行代码至少运行一次。

有关该应用程序的更多背景信息:它是一个 wxPython GUI,其中嵌入了 matplotlib 图。我正在尝试从传入的串行端口流中生成复选框,以便用户可以在运行时显示/隐藏系列。 point 是一个字典,键为系列名称,系列值为字典值。

如果您需要更多上下文,请告诉我。

提前感谢您的帮助。

 def addNewCheckBoxes(self,point):
        sizer = self.mainWindow.p_SelectionPanel.GetSizer()
        addedCheckBox = False

        for key in point.keys():
            if key not in self.cbList.keys():
                self.cbList[key] = wx.CheckBox(self.mainWindow.p_SelectionPanel)
                sizer.Add(self.cbList[key])
                addedCheckBox = True

        if addedCheckBox:
            self.mainWindow.p_SelectionPanel.SetSizer(sizer)
            self.mainWindow.p_SelectionPanel.Layout()

【问题讨论】:

  • 在主窗口上调用布局,因为它的大小可能已经改变
  • 非常感谢您的建议!我试过这个,但复选框没有出现在 GUI 上。我认为问题可能是我使用了两个线程:主线程和一个线程来管理串行数据检索/绘图更新。我会进一步调查...
  • 不确定 wx,但在 tk 中,所有 GUI 操作都必须在一个线程上。一般没有理由让 GUI 多线程。

标签: python python-2.7 checkbox wxpython runtime


【解决方案1】:

这个问题是由于使用了多个线程造成的;见上面的 cmets。通过使用此处介绍的技术,我已经能够将复选框添加到主线程:Sharing data between threads in Python>。

不过,这里建议使用一种更好的、线程安全的方式来构建我的程序:WxPython: Periodically set value in TextCtrl not working>。还有一种方法可以避免使用多线程。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-01-07
    • 1970-01-01
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多