我有一个工作脚本,我试图移植到GUI。我是编程新手,因此很多代码可能都是hack-ish。我对一般做法和方法的建议持开放态度!下面是我工作的基于文本的函数我想要移植:
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_main和resize_file,因为调用resize_file的不同区域的输入/输出是不同的。
感谢您的帮助!我知道这很复杂!
编辑:谢谢!我相信我有足够的信息可以继续前进。我很感激帮助。答案 0 :(得分:0)
#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())
可能?
不确定你要求说实话......
答案 1 :(得分:0)
回答这个具体问题:
如何获取基于对象的输入并将其转换为可通过的输入 变量
您可以访问控件并调用相应的方法:
self.resize_txt.GetValue()
self.file_input.GetPath()
self.outfile_input.GetPath()
要将它们传递给resize,function,只需将这些值传递给resize_file函数。
resize_file(self.file_input.GetPath(),
self.outfile_input.GetPath())
你在TBH问了太多问题。你应该从一开始,然后在你进步时创建其他人。
到底是什么,我有时间在午餐前杀人!我会给你一些指示。
让我们来看看这个函数:
def resize_file(filename, filename2 = None)
看看这个函数,我真的不知道函数的输入是什么。它说文件名和可选的filename2。哪些正在调整大小?我怎么知道每个参数的作用?你没有记录这个函数,这让我深入研究你的代码,试图确定它的作用。
所以,我挖掘了你的代码...而且看起来这个特定的函数调整大小并可能附加pdfs。请注意在代码中,如何执行两次相同的代码?
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)
不要这样做。使用DRY原则。你应该有一个循环,因为算法基本相同。 (无法说明循环atm,午餐前时间不多了,也许是我回来的时候: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()
好的,我说谎了,我试着在午餐前挤进去。上面的代码可能无法开箱即用,但它应该指向大致方向。您应该添加错误捕获以检查何时没有传递参数(等等)。
希望它有所帮助!