Py学习  »  Python

如何打开wxpython文件中的变量

Rams • 3 年前 • 1026 次点击  

我试图从wxPython文件打开对话框中获取一个变量。我有2个按钮,它可以获取2个文件的路径。GetPath()?

这是我目前掌握的代码

'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社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/130582
 
1026 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Rolf of Saxony
Reply   •   1 楼
Rolf of Saxony    4 年前

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

enter image description here

Psionman
Reply   •   2 楼
Psionman    4 年前

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

不要忘记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()