【问题标题】:how to get a variable out of wxpython file open如何从打开的wxpython文件中获取变量
【发布时间】:2021-07-17 12:01:17
【问题描述】:

我试图从 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 之外的路径传递给另一个变量。

提前致谢

【问题讨论】:

    标签: python wxpython


    【解决方案1】:

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

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

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

    """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()
    

    【讨论】:

    • 感谢您的回答,@Psionman 'emg' 变量被传递给用于打开、绘图、创建新文件并保存附加文件名的图形的其他函数
    【解决方案2】:

    只是为了提供另一种选择,还有一个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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      • 2012-02-06
      • 2013-05-08
      • 2021-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多