Хобрук: Ваш путь к мастерству в программировании

pyttsx3 конфликтует с tkinter

Мое приложение tkinter будет работать без консоли (.pyw), пока я не импортирую pyttsx3. Как только pyttsx3 будет импортирован, приложение будет работать только из редактора (в режиме ожидания).

Это приложение tkinter, которое отлично работает при запуске из режима ожидания. Я импортирую pyttsx3, инициализирую его, говорю с помощью голосов Windows Sapi, все хорошо, все функции tkinter работают как положено от начала до конца. Но вне режима ожидания приложение не будет работать в режиме .pyw. Он показывает черный экран консоли на короткое время и закрывается. Я очень тщательно проверил - удалив весь код pyttsx3 из приложения - кроме оператора импорта, и, буквально, одного оператора импорта достаточно, чтобы приложение больше не работало в режиме .pyw.

import tkinter as tk

(отлично работает в режиме .pyw)

import tkinter as tk
import pyttsx3 as speak

(не будет работать в режиме .pyw)

Вопрос: как может простой импорт библиотеки (даже не инициализация или использование ее ... просто импорт) привести к тому, что приложение tkinter больше не будет работать как .pyw? Может ли импорт библиотеки как-то мешать основному циклу tkinter?

06.08.2019

  • Можно ли импортировать и использовать pyttsx3 из интерактивного сеанса Python? 07.08.2019
  • Я написал более раннюю интерактивную версию приложения без tkinter. Вернулся, чтобы проверить, и на самом деле проблема такая же, так что это может быть проблема с python, а не с tkinter. Что я обнаружил: Без pyttsx3: - нормально работает в простое (в оболочке) - нормально работает из файла .py (в консоли) - не запускается из файла .pyw С pyttsx3: - отлично работает в режиме ожидания - не будет работать как файл . py или .pyw Опять же, все, что требуется для отключения приложения, — это сам оператор импорта. 07.08.2019
  • Вероятно, вам следует добавить эту информацию к вашему вопросу. 07.08.2019
  • Запускаются ли другие программы Tkinter из .pyw файлов без проблем? 07.08.2019
  • Да, другие программы tkinter нормально запускаются из .pyw, включая это приложение, если не импортирован pyttsx3. 07.08.2019

Ответы:


1

Хороший вопрос. Если бы мне пришлось угадать, что-то в библиотеке pyttsx3 вызывает процесс, не связанный с Python, для преобразования текста в речь. В таком случае Windows, вероятно, открывает окно командной строки, поскольку этот процесс выполняется независимо.

Если в библиотеке pyttsx3 нет документации о том, как подавить это — после беглого взгляда я не вижу такого — тогда я бы рекомендовал открытие новой проблемы с сопровождающим пакета. Я считаю, что необходимо установить флаг CREATE_NO_WINDOW при запуске в Windows.

06.08.2019
  • Согласно функции поиска github, subprocess не используется в pyttsx3... 07.08.2019
  • @RolandSmith, это интересно. Я изучил это подробнее, и оказалось, что pyttsx3 использует SAPI 5 в Windows через пакет pywin32. Я не знаком с этим пакетом, но сопровождающий пакета pyttsx3, кажется, знаком с ним, поэтому я все же рекомендую OP открыть с ними новую проблему. Я предполагаю, что желаемое изменение все еще возможно с пакетом pywin32. Я удалил последнее предложение своего комментария, чтобы показать, что модуль subprocess не используется. 07.08.2019
  • Большое спасибо - открыли новый выпуск. Доложу о том, что найду. 07.08.2019
  • Новые материалы

    Введение в контекст React
    В этом посте мы поговорим о Context API, который был представлен в React 16, и о том, как вы можете их использовать. Что такое контекст? Глядя на определение из react docs , оно..

    Шлюз с лицензией OSS, совместимый с Apollo Federation v2, появится в WunderGraph
    Сегодня мы рады сообщить, что мы сотрудничаем с поддерживаемой YC Tailor Technologies, Inc. для внедрения Apollo Federation v2. Реализация будет лицензирована MIT (Engine) и Apache 2.0..

    Это оно
    Ну, я официально уволился с работы! На этой неделе я буду лихорадочно выполнять последние требования Думающего , чтобы я мог сосредоточиться на поиске работы. Что именно это значит?..

    7 полезных библиотек JavaScript, которые вы должны использовать в своем следующем проекте
    Усильте свою разработку JavaScript Есть поговорка «Не нужно изобретать велосипед». Библиотеки — лучший тому пример. Это поможет вам написать сложные и трудоемкие функции простым способом...

    Базовое руководство по переносу концепций обучения в глубокое обучение
    Обзор По мере того, как машинное обучение становится все более мощным и продвинутым, модели, обеспечивающие эту расширенную возможность, становятся все больше и начинают требовать огромного..

    C в C.R.U.D с использованием React-Redux
    Если вы использовали React, возможно, вы знакомы с головной болью, связанной с обратным потоком данных. Передача состояния реквизитам от родительских компонентов к дочерним компонентам может..

    5 обязательных элементов современного инструмента конвейера данных
    В цифровом мире предприятия используют конвейеры данных для перемещения, преобразования и хранения огромных объемов данных. Эти конвейеры составляют основу бизнес-аналитики и играют..