【问题标题】:wxPython how to put a text in TextCtrl with a button inserted by "Add" ButtonwxPython如何使用“添加”按钮插入的按钮将文本放入TextCtrl
【发布时间】:2015-09-10 22:04:18
【问题描述】:

我正在使用 wxPython 构建一些 GUI...确实它不是一个简单的程序...
要生成许多用户输入和输出...

我在程序的一部分中放置了一个“添加”按钮,该按钮将动态添加一个 TextCtrl 字段和一个“打开”按钮来打开文件。单击“打开”后,用户可以选择一个文件,因此文件路径显示在 TextCtrl 字段中。

确实,使用一个简单的示例(一个 TextCtrl 一个按钮)我可以处理它...
但是以动态的方式,放几个TextCtrl和几个Button我不知道怎么处理...

在下面的代码中(只是一小部分,有些东西不应该在那里),我在“打开”按钮单击后放了一个“def OpenReadFile”,如您所见,它会将文本放在最后TextCtrl 不在相应的字段中...有什么想法吗?

换句话说...想象一下: 添加(用户可以添加“n”个样本)

"TEXT-1" 'BUTTON-1'
"TEXT-2" 'BUTTON-2'
"TEXT-3" 'BUTTON-3'

例如,如果用户单击 button-3,它将把文本放在 Text-3 字段中(如预期的那样)
如果用户点击 button-2,它会将文本放入 Text-3...

到目前为止我的代码(我确实知道错误在哪里,我只是不知道要做什么)=[

self.addButton = wx.Button(self, label="Add Sample")
self.Bind(wx.EVT_BUTTON, self.OnAddWidget, self.addButton)
def OnAddWidget(self, event):
    self.samplenumber += 1
    self.sampleTextCtrl = wx.TextCtrl(self, wx.NewId(), "", size = (200,-1))
    self.buttonF = wx.Button(self, buttonId, label = "Select File") #Add Open File Button
    self.Bind(wx.EVT_BUTTON, self.OpenReadFile, self.buttonF) #Add click event
    self.fgs4.Add(self.buttonF, proportion = 1, flag = wx.CENTER, border = -1)
def OpenReadFile(self,event):
    dlg = wx.FileDialog(self, "Open File",
                os.getcwd(), style = wx.OPEN)

    if dlg.ShowModal() == wx.ID_OK:
        self.filename = dlg.GetPath()
        self.sampleTextCtrl.SetValue(self.filename)

我很确定我必须在 OpenReadFile 中做一些事情 =]

已编辑

我之前已经放了一个字典,得到了按钮 ID,然后 TextCtrl 把它放在了字典中并完成了。

my_dict = {}
self.sampleTextCtrl = wx.TextCtrl(self, wx.NewId(), "", size = (200,-1))
value = self.sampleTextCtrl
buttonId = wx.NewId()
self.buttonF = wx.Button(self, buttonId, label = "Select File")

mydict[buttonId] = value

完成

【问题讨论】:

  • 要为您自己的问题提供解决方案,请将其作为答案发布。

标签: python button wxpython


【解决方案1】:

使用字典当然是一种方法。另一种方法是使用 Python 的 lambda 语句将配对的文本控件传递给打开文件对话框的函数。通过这样做,您可以使用文本控件实例来设置对话框中的值。下面是一些演示该概念的代码:

import wx

########################################################################
class MyPanel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)

        self.mainsizer = wx.BoxSizer(wx.VERTICAL)

        add_btn = wx.Button(self, label="Add")
        add_btn.Bind(wx.EVT_BUTTON, self.onAdd)
        self.mainsizer.Add(add_btn, 0, wx.ALL, 5)

    #----------------------------------------------------------------------
    def onAdd(self, event):
        """"""
        gen_sizer = wx.BoxSizer(wx.HORIZONTAL)

        txt = wx.TextCtrl(self, size=(600, -1))
        gen_sizer.Add(txt, 0, wx.ALL, 5)

        browse_btn = wx.Button(self, label='Browse')
        browse_evt = lambda evt, ctrl=txt: self.onBrowse(evt, ctrl)
        browse_btn.Bind(wx.EVT_BUTTON, browse_evt)
        gen_sizer.Add(browse_btn, 0, wx.ALL, 5)
        self.mainsizer.Prepend(gen_sizer, 0, wx.ALL, 5)
        self.mainsizer.Layout()


    #----------------------------------------------------------------------
    def onBrowse(self, event, ctrl):
        """"""
        wildcard = "Python source (*.py)|*.py|" \
            "All files (*.*)|*.*"
        dlg = wx.FileDialog(self, message="Choose a file",
                            defaultFile="", wildcard=wildcard,
                            style=wx.OPEN | wx.CHANGE_DIR)
        if dlg.ShowModal() == wx.ID_OK:
            path = dlg.GetPath()
            ctrl.SetValue(path)
        dlg.Destroy()


########################################################################
class MainFrame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title='Dynamic file browser',
                          size=(1024,768))
        panel = MyPanel(self)
        self.Show()

if __name__ == '__main__':
    app = wx.App(False)
    frame = MainFrame()
    app.MainLoop()

您可能还想查看以下链接以获取更多信息:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-06
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多