Откройте файл .py в новой (IDLE) оболочке (из родительского файла) и уничтожьте родительский файл - PullRequest
0 голосов
/ 15 апреля 2020

Я понимаю, что есть много похожих вопросов, но я не смог получить ответы, которые бы отвечали моей проблеме.

Tl; dr - я хочу открыть файл .py, используя мой родительский файл в new (IDLE) shell и kill мой родительский файл, так как мне больше не нужно использовать родительский файл. Также я использую tkinter GUI python в моей программе, на случай, если это важная информация (я хочу сделать это, потому что я думаю открытие и закрытие большого количества модулей в родительском (IDLE) ) Оболочка заставляет мою программу обрабатывать sh)

Я кодирую интерфейс банковских платежей с использованием tkinter, поэтому я сохраняю разные страницы в виде модулей, а кнопки вызывают другие модули с использованием операторов импорта. (Кроме того, если это полезная информация, программа, по сути, запускается в al oop. Поэтому вполне возможно, что родительский файл вызывает сам себя где-то внизу.)

#homepage.py
import tkinter
w=Tk()
#lots of code here
if condition:
     w.destroy()
     import newpage.py
else:
     w.destroy()
     import differentpage.py

Проблема I ' Я сталкиваюсь с тем, что после того, как многие страницы были открыты (и закрыты с помощью w.destroy ()), программа вылетает. Я сталкивался с этой проблемой и в изобретателе приложений MIT и мог ее исправить, закрыв старые страницы, которые больше не нужны, и здесь я был уверен, что предыдущие страницы были убиты (не уверен, что это правильная терминология). Я лично думаю, что это происходит потому, что запускаемый родительский файл открывает все дочерние файлы в его (IDLE) оболочке. Поэтому я думаю, что если я смогу заставить каждую страницу открывать для себя новую оболочку, программа не взломает sh. Конечно, я могу ошибаться, если это так, пожалуйста, предложите, что может быть другими причинами сбоя моей программы. Кроме того, сообщений об ошибках нет, я просто нажимаю кнопку, и предыдущее окно уничтожает (как и должно быть), но не открывает новое окно.

На данный момент я использую импорт для вызова других модулей. , Я пробовал использовать модули os и subprocess run, popen, call et c. функции, но если я не ошибаюсь, я не думаю, что они открывают новые оболочки для детской программы, хотя я не понимал их. Также аргумент shell = True в subprocess.run () действительно заинтриговал меня. Может ли это помочь моему делу?

Не думаю, что мне нужно много кода, чтобы объяснить мою проблему. Пожалуйста, скажите мне, если мой вопрос отсутствует каким-либо образом и как я могу сделать его лучше. Я старался изо всех сил. Спасибо:)

...