如何从打开的wxpython文件中获取变量

how to get a variable out of wxpython file open

我正在尝试从 wxPython 文件打开对话框中获取一个变量。我有 2 个按钮,它使用 .GetPath() ?

获取 2 个文件的路径

这是我目前的代码

'def onclk1(event):
with  wx.FileDialog(panel, "OPEN EMG FILE", wildcard="TXT Files(*.txt)|*.txt",
                    style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as EmgFile:
    if EmgFile.ShowModal() == wx.ID_CANCEL:
        return "cancelled"
    emg = EmgFile.GetPath()

e1.Bind(wx.EVT_BUTTON, onclk1)

现在我需要将 def 外部的路径传递给另一个变量。

提前致谢

将来最好提供代码的最小工作示例。

不要忘记 GUI 是事件驱动的,您必须使用事件将对话框的 return 值分配给您想要的变量。

您没有说明要对文件路径做什么,但此代码显示了如何将其分配给标签。

"""Main Frame module for basic wxPython App."""
import wx


class MainFrame(wx.Frame):
    """Create MainFrame class."""
    def __init__(self, *args, **kwargs):
        super().__init__(None, *args, **kwargs)
        self.size = (400, 1000)
        self.Title = 'wx App'
        self.Bind(wx.EVT_CLOSE, self.on_quit_click)

        self.panel = MainPanel(self)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(self.panel)
        self.SetSizer(sizer)
        self.Center()
        self.Show()

    def onclk1(self, event):
        with  wx.FileDialog(self.panel, "OPEN EMG FILE", wildcard="TXT Files(*.txt)|*.txt",
                    style=wx.FD_OPEN | wx.FD_FILE_MUST_EXIST) as EmgFile:
            if EmgFile.ShowModal() == wx.ID_CANCEL:
                return "cancelled"
            emg = EmgFile.GetPath()
            self.panel.lbl_file1.SetLabel(emg)

    def on_quit_click(self, event):
        """Handle close event."""
        del event
        wx.CallAfter(self.Destroy)


class MainPanel(wx.Panel):
    """Create a panel class to contain screen widgets."""
    def __init__(self, parent, *args, **kwargs):
        super().__init__(parent, *args, **kwargs)

        e1 = wx.Button(self, label='File1')
        e1.Bind(wx.EVT_BUTTON, parent.onclk1)

        self.lbl_file1 = wx.StaticText(self, label=' '*100)
        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(e1)
        sizer.Add(self.lbl_file1)
        self.SetSizer(sizer)

if __name__ == '__main__':
        wx_app = wx.App()
        MainFrame()
        wx_app.MainLoop()

只是为了提供另一种选择,还有一个wx.FilePickerCtrl

import wx
import os

wildcard = "All files (*.*)|*.*"


class MainWindow(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, title='File Selector')
        self.currentDirectory = os.getcwd()

        self.panel = wx.Panel(self)
        vbox = wx.BoxSizer(wx.VERTICAL)

        ie_box = wx.StaticBox(self.panel, -1, 'Please select the input file')
        ie_sizer = wx.StaticBoxSizer(ie_box, wx.VERTICAL)

        fl_box = wx.BoxSizer(wx.HORIZONTAL)
        self.fl_ctrl = wx.FilePickerCtrl(self.panel, message="Choose a file")
        fl_box.Add(self.fl_ctrl, 1, wx.ALL | wx.CENTER | wx.EXPAND, 5)
        ie_sizer.Add(fl_box, 1, wx.ALL | wx.CENTER | wx.EXPAND, 10)
        self.fl_ctrl.Bind(wx.EVT_FILEPICKER_CHANGED, self.on_open_file)

        vbox.Add(ie_sizer, 0, wx.ALL | wx.CENTER | wx.EXPAND, 5)
        self.panel.SetSizer(vbox)
        self.Center()
        self.panel.Fit()
        self.Show()

    def on_open_file(self, event):
        self.fl_ctrl.GetPath()


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