【问题标题】:Manipulating ComboBoxes in wxPython在 wxPython 中操作组合框
【发布时间】:2017-06-28 03:05:54
【问题描述】:

我正在使用 Python 和 wxPython 创建一个 UI,允许用户在第一个组合框中选择 XML 文件,并且 XML 中的所有组件(即按钮)显示为下面另一个组合框的选择。当我浏览所有 XML 时,它在控制台中打印出正确的内容,显然读取正确,但我似乎无法将它链接回我正在寻找的组合框。

代码如下:

import wx
import os
import xml.dom.minidom
from xml.dom.minidom import parse


# get all xmls
path = "C:\Users\William\Desktop\RES\Param"
files = os.listdir(path)

class Panel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.xmlList = files
        self.xmlPickerTitle = wx.StaticText(self, label="XML Picker", pos=(20, 30))
        self.xmlPicker = wx.ComboBox(self, pos=(100, 30), size=(500, -1), choices=self.xmlList, style=wx.CB_DROPDOWN)

        self.elementsTitle = wx.StaticText(self, label="Elements Found", pos=(20, 100))
        # labels
        self.buttonsPickerTitle = wx.StaticText(self, pos=(20,120), label="Buttons")

        self.buttonList = []

        self.buttonsPicker = wx.ComboBox(self, pos=(100, 120), size=(250, -1), choices=buttonList, style=wx.CB_DROPDOWN)

        self.Bind(wx.EVT_COMBOBOX, self.XMLSelect,)


    def XMLSelect(self, event):
        xmlPicked = self.xmlList[event.GetSelection()]
        DOMTree = xml.dom.minidom.parse(xmlPicked)
        collection = DOMTree.documentElement

        buttons = DOMTree.getElementsByTagName("Button")

        for button in buttons:
            if button.hasAttribute("name"):
                buttonList.append(button.getAttribute("name"))
                print button.getAttribute("name")
app = wx.App(False)
frame = wx.Frame(None, title = "Auto", size = (800, 600))
panel = Panel(frame)
frame.Show()
app.MainLoop()

有什么想法吗?

提前致谢!

【问题讨论】:

  • 发布您的 xml 文件之一的示例
  • 刚做的,请检查一下,看看能不能帮到你:)

标签: python user-interface combobox wxpython


【解决方案1】:

我遇到了文件名不包含路径的问题,所以我必须加入它们才能传递到 xmlPicked 但这可能是 linux 和 Windows 之间的差异。
关键是Clear()Append()ComboBox
另外,Bind 到特定的ComboBox,因为您有 2 个。
最后,为ComboBox 设置选择,这样您就有了可用的数据。

import wx
import os
import xml.dom.minidom
from xml.dom.minidom import parse


# get all xmls
path = "/home/whatever"
files = os.listdir(path)

class Panel(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)
        self.xmlList = files
        self.xmlPickerTitle = wx.StaticText(self, label="XML Picker", pos=(20, 30))
        self.xmlPicker = wx.ComboBox(self, pos=(100, 30), size=(500, -1), choices=self.xmlList, style=wx.CB_DROPDOWN)

        self.elementsTitle = wx.StaticText(self, label="Elements Found", pos=(20, 100))
        # labels
        self.buttonsPickerTitle = wx.StaticText(self, pos=(20,120), label="Buttons")

        self.buttonList = []

        self.buttonsPicker = wx.ComboBox(self, pos=(100, 120), size=(250, -1), choices=self.buttonList, style=wx.CB_DROPDOWN)

        self.xmlPicker.Bind(wx.EVT_COMBOBOX, self.XMLSelect,)



    def XMLSelect(self, event):
        self.buttonsPicker.Clear()
        xmlPicked = self.xmlList[event.GetSelection()]
        xmlPicked = os.path.join(path,xmlPicked)
        DOMTree = xml.dom.minidom.parse(xmlPicked)
        collection = DOMTree.documentElement
        buttons = DOMTree.getElementsByTagName("Button")
        for button in buttons:
            if button.hasAttribute("name"):
                button_name = str(button.getAttribute("name"))
                self.buttonsPicker.Append(button_name)
                print button_name
        self.buttonsPicker.SetSelection(0)

app = wx.App(False)
frame = wx.Frame(None, title = "Auto", size = (800, 600))
panel = Panel(frame)
frame.Show()
app.MainLoop()

【讨论】:

  • 我也遇到了无法解析没有目录的文件的问题,后来在这里发帖后我自己发现了。否则,您的代码非常适合我的需要,谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2011-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多