GUI로 이식하려는 작업 스크립트가 있습니다. 나는 프로그래밍에 익숙하지 않기 때문에이 코드의 대부분은 해킹이 될 수 있습니다. 나는 일반적인 관행과 방법에 대한 제안에 열려 있습니다! 다음은 이식하려는 함수의 작업 텍스트 기반 버전입니다.
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을 구현하고 입력을 위해 PDF를 선택하기 위해 wx.FilePickerCtrl을 구현할 수있었습니다. 이제 어떻게 :
이것은 또한 내 문제 일 수 있습니다.
이것은 나쁜 흐름입니까? resize_file을 호출하는 다른 영역의 입력 / 출력이 다르기 때문에 resize_file_main 및 resize_file을 결합하는 방법을 잘 모르겠습니다.
도와 주셔서 감사합니다! 나는 그것이 복잡하다는 것을 압니다!
편집 : 감사합니다! 앞으로 나아가기에 충분한 정보가 있다고 생각합니다. 도움을 주셔서 감사합니다.
이 특정 질문에 대답하려면 :
객체 기반 입력을 어떻게 통과 가능한 변수로 바꾸나요?
컨트롤에 액세스하고 적절한 메서드를 호출합니다.
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())
여기 TBH에 너무 많은 질문을하고 계십니다. 하나부터 시작하고 진행하면서 다른 것을 만들어야합니다.
도대체 점심 전에 죽일 시간이 있어요! 몇 가지 조언을 드리겠습니다.
이 함수를 살펴 보겠습니다.
def resize_file(filename, filename2 = None)
이 함수를 보면 함수에 대한 입력이 무엇인지 전혀 모릅니다. 파일 이름과 선택적 filename2가 표시됩니다. 다음 중 크기가 조정되는 것은 무엇입니까? 각 매개 변수의 기능을 어떻게 알 수 있습니까? 이 함수를 문서화하지 않았기 때문에 코드가 무엇을하는지 확인하기 위해 코드를 파헤 쳤습니다.
그래서, 나는 당신의 코드를 파헤 쳤습니다. 그리고이 특정 함수가 크기를 조정하고 아마도 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)
이러지마 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()
알았어, 거짓말을 했어. 점심 전에 이걸 짜내려고 했어. 위의 코드는 기본적으로 작동하지 않을 수 있지만 일반적인 방향을 가리켜 야합니다. 인수가 전달되지 않았는지 확인하기 위해 오류 포착을 추가해야합니다.
도움이 되었기를 바랍니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다