2015-12-03 3 views
1

Я пишу код для открытия PDF-файла, выберите количество страниц для обрезки, а затем создайте новый обрезанный файл.Python: EasyGui зависает с fileopenbox()

Вот код:

from easygui import * 
from pyPdf import PdfFileReader, PdfFileWriter 

# 1 select a inputfile 
inputFileName = fileopenbox('Please choose a PDF file','', '*.pdf') 

#2 total pages 
inputFile = PdfFileReader(file(inputFileName, 'rb')) 
totalPages = inputFile.getNumPages() 

#3 Enter beginning Page 
begPage = enterbox('Please choose the Beginning Page','it must a number') 
while not begPage.isdigit() or begPage ==0 or int(begPage) > totalPages: 
    msgbox('Please enter a valid digit', '', 'ok') 
    begPage = enterbox('Please choose the Beginning Page','it must a number') 

Дела в том, во время тестирования этих первых шагов. Когда я выбираю файл и нажимаю OK, fileopenbox зависает, и я не могу перейти к следующему шагу.

Если я изолирую первый шаг или шаги 1 и 2, он работает нормально, но я не могу заставить его работать с остальной частью скрипта (шаг 3).

Я использую Python 2.7.10 на моем MacBookPro OSX 10.9.2 и easygui 0,97

+0

Ваш код работает отлично для меня. Возможно, ваш файл неверен - вы пробовали несколько файлов? Постскриптум 'begPage == 0' должен быть' int (begPage) == 0' Python 2.7.10, easygui 0.97, Win7 – SiHa

+0

Может быть проблемой пути - это 'inputFileName', возвращающий полный путь к документу? Он работает в моей системе, но OSX может отличаться. – SiHa

+0

Я пробовал с разными файлами, но он все еще зависает. 'InputFileName' возвращает полный путь. Я «нажимал» на разные вещи, пытаясь исправить эту проблему, и выяснил, что если я нажму на значок питона в своей панели инструментов, сценарий разморозит и перейдет к следующему шагу (2 и 3) .... но это происходит только с 'fileopenbox', остальные поля запрашивают автоматически ... PS Спасибо за исправление 'begPage == 0'. – Ruseiro

ответ

1

Easygui использует Tkinter для его графического интерфейса бит.

This page говорит, что (курсив мой):

Если вы используете Python из python.org 64-бит/32-бит Python инсталлятор для Mac OS X 10.6 и более поздних версий, вы должны использовать только IDLE или tkinter с обновленным сторонним Tcl/Tk 8.5, как установлено ActiveTcl 8.5 .

Если вы используете OS X 10.9 или более поздней версии и Python из Python.org 64-бит/32-разрядная программа установки, окна приложений могут не обновлять должным образом из-за проблемы Tk. Установите последнюю версию ActiveTcl 8.5.18.0, если возможно . (Кроме того, критическая OS X 10.9 проблема, которая может привести Python к сбою при использовании в интерактивном режиме было исправлено в 3.4.0, 3.3.3 и 2.7.6 монтажников.)

Если вы используете Mac OS X 10.6, не используйте IDLE или Tkinter из поставляемого Apple Python 2.6.1 в Mac OS X 10.6. Если возможно, установите и используйте более новую версию Python и Tcl/Tk.

Это звучит как проблема, так это выглядит как ActiveTcl то, что вам требуется, чтобы исправить tk проблемы.

+0

Извините, но по-прежнему та же проблема ... Я закончил весь код и, кроме 'fileopenbox'box, остальные поля выскочат, как и должны ... даже« filesavebox »(в отличие от первого один). Скрипт отлично работает и делает то, что он должен делать, за исключением этой проблемы с замораживанием в начале. – Ruseiro

+0

Установили ли вы ActiveTcl? Факт остается фактом: ваш код работает на моей системе Windows, но не на вашем OSX.Я не говорю, что это определенно ответ, но упустить его из рук кажется плохой идеей. – SiHa

+0

Да, я установил ActiveTcl. Я также пытался запустить код на Windows, и он работает ... это должно быть связано с OSX или, что еще хуже, особенно с моим компьютером, что затрудняет его решение ... Я попытался запустить различные комбинации элементов EasyGui, и все они работают нормально, кроме 'fileopenbox' ... Я пытался запустить его на IDLE и Terminal, и на обоих я получаю ту же ошибку. – Ruseiro