问题描述
我试图从 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 是事件驱动的,您必须使用事件将对话框的返回值分配给您想要的变量。
您还没有说明要对文件路径做什么,但此代码显示了如何将其分配给标签。
"""Main Frame module for basic wxPython App."""
import wx
class MainFrame(wx.Frame):
"""Create MainFrame class."""
def __init__(self,*args,**kwargs):
super().__init__(None,**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,**kwargs):
super().__init__(parent,**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,10)
self.fl_ctrl.Bind(wx.EVT_FILEPICKER_CHANGED,self.on_open_file)
vbox.Add(ie_sizer,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()