在wxPython中操作组合框

2024-03-29 14:27:16 发布

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

我使用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()

有什么想法吗?在

提前谢谢!在


Tags: posimportselfsizebuttonxmllabeldom
1条回答
网友
1楼 · 发布于 2024-03-29 14:27:16

我有一个问题,文件名不包含路径,所以我不得不将它们连接起来传递到xmlspick,但这可能是linux和Windows之间的区别。
关键点是Clear()和{}到{}
另外,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()

相关问题 更多 >