社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

如何打开wxpython文件中的变量

Rams • 3 年前 • 1034 次点击  

我试图从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
 
1034 次点击  
文章 [ 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()