如何在Python/wxPython中将文件输入作为变量处理?
我有一个正在尝试移植到GUI的工作脚本。我是编程新手,所以很多代码可能是黑客的。我愿意接受关于一般做法和方法的建议!下面是我想要移植的函数的基于文本的工作版本:如何在Python/wxPython中将文件输入作为变量处理?,python,python-2.7,wxpython,wxwidgets,Python,Python 2.7,Wxpython,Wxwidgets,我有一个正在尝试移植到GUI的工作脚本。我是编程新手,所以很多代码可能是黑客的。我愿意接受关于一般做法和方法的建议!下面是我想要移植的函数的基于文本的工作版本: def InitUI(self): self.pdf = None sizer = wx.BoxSizer(wx.VERTICAL) btnSizer = wx.BoxSizer(wx.HORIZONTAL) self.pdf = PDFWindow(self, style=wx.SUNKEN_BORDE
def InitUI(self):
self.pdf = None
sizer = wx.BoxSizer(wx.VERTICAL)
btnSizer = wx.BoxSizer(wx.HORIZONTAL)
self.pdf = PDFWindow(self, style=wx.SUNKEN_BORDER)
panel = wx.Panel(self)
sizer.Add(self.pdf, proportion=1, flag=wx.EXPAND)
pdfPicker = wx.FilePickerCtrl(self, wx.ID_ANY,message='Please select the PDF to resize.', wildcard='*.pdf', size=(500,20))
btnSizer.Add(pdfPicker, proportion=1, flag=wx.EXPAND|wx.ALL, border=5)
btnSizer.AddStretchSpacer(3)
self.label = wx.StaticText(self, label='Enter Scale (decimal percent):')
self.field = wx.TextCtrl(self, value="0.5", size=(50,20))
btnSizer.Add(self.label, 0, wx.ALL, 8)
btnSizer.Add(self.field, 0, wx.ALL, 8)
# .... more GUI code (buttons, etc.)
def resize_file_main(resize, fileout, self, e=None)
file1 = ask_file_name('resize1', 'input', '', inputDir)
fileout = ask_file_name('resize1', 'output')
input1 = str(file1) + '.pdf'
dir1 = os.path.join(inputDir, input1)
backup1 = os.path.join(backupDir, str(file1) + '.pdf')
resize_file(input1)
try:
shutil.move(dir1, backup1)
print input1, "has been successfully moved to the backup folder.\n"
except:
print_error('\nThe PDF you entered is opened elsewhere. The file was not backed up.')
print "Please move your scanned PDF from /input to /backup or run the backup utility.\n\n Press enter to continue .... "
print raw_input('')
continue
def resize_file(filename, filename2 = None):
output = PdfFileWriter()
fIn1 = file(os.path.join(inputDir,filename), 'rb')
inp1 = PdfFileReader(fIn1)
p1 = inp1.getPage(0)
p1.scale(.5,.5)
output.addPage(p1)
if filename2 is not None:
fIn2 = file(os.path.join(inputDir,filename2), 'rb')
inp2 = PdfFileReader(fIn2)
p2 = inp2.getPage(0)
p2.scale(.50,.50)
output.addPage(p2)
outputStream = file(os.path.join(validateDir,str(fileout) + '.pdf'),"wb")
output.write(outputStream)
outputStream.close()
fIn1.close()
这是我的问题。我想摆脱所有基于文本的用户交互。如何将基于对象的输入转化为可接受的变量?我已经能够实现wx.TextCtrl来输入用户输入,wx.FilePickerCtrl来为输入选择PDF。现在我该如何:
- 将这些作为变量传递给我的resize_file函数李>
- 设置输出位置
- 设置备份位置+输入PDF名称
- 是否将wx.TextCtrl值(用于缩放)传递给我的resize_文件函数
#initGUIStuff
....
self.resize_btn.Bind(wx.EVT_BUTTON,self.OnResize)
def OnResize(self,evt):
resize(self.resize_txt.GetValue(),self.file_input.GetPath(),self.outfile_input.GetPath())
也许吧
老实说,不确定你在问什么…要回答这个具体问题: 如何将基于对象的输入转化为可接受的输入 变量 您可以访问控件并调用适当的方法:
self.resize_txt.GetValue()
self.file_input.GetPath()
self.outfile_input.GetPath()
要将它们传递给resize函数,只需将这些值传递给resize_file函数即可
resize_file(self.file_input.GetPath(),
self.outfile_input.GetPath())
你问的问题太多了。你应该从一个开始,在你前进的过程中创造其他人
见鬼,午饭前我有时间消磨时间!我会给你一些建议
让我们看看这个函数:
def resize_file(filename, filename2 = None)
看看这个函数,我真的不知道函数的输入是什么。它显示文件名和可选文件名2。其中哪一个正在调整大小?如何知道每个参数的作用?您没有记录此函数,这使我深入研究了您的代码,试图确定它的功能
所以,我深入研究了你的代码。。。这个特殊的函数可能会调整大小并附加PDF。注意,在您的代码中,如何执行相同的代码两次
fIn1 = file(os.path.join(inputDir,filename), 'rb')
inp1 = PdfFileReader(fIn1)
p1 = inp1.getPage(0)
p1.scale(.5,.5)
output.addPage(p1)
if filename2 is not None:
fIn2 = file(os.path.join(inputDir,filename2), 'rb')
inp2 = PdfFileReader(fIn2)
p2 = inp2.getPage(0)
p2.scale(.50,.50)
output.addPage(p2)
不要这样做。使用原则。您应该有一个循环,因为算法基本相同。(无法演示循环自动取款机,午餐前时间不足,可能等我回来时:P)
你甚至可以想入非非,让你的函数接受无限量的PDF文件。请查看此代码段:
def resize_file(*args):
output = PdfFileWriter()
for filename in args:
fIn1 = file(os.path.join(inputDir, filename), 'rb')
inp1 = PdfFileReader(fIn1)
p1 = inp1.getPage(0)
p1.scale(.5,.5)
output.addPage(p1)
outputStream = file(os.path.join(validateDir,str(fileout) + '.pdf'),"wb")
output.write(outputStream)
outputStream.close()
好吧,我撒谎了,我试着在午饭前把这个挤进去。上面的代码可能不是开箱即用的,但它应该为您指明大致的方向。您应该添加错误捕获,以在未传递任何参数时进行检查(以及其他事项)
希望有帮助