버튼을 클릭하면 다른 파이썬 스크립트가 열리 며 두 번째 스크립트에서 일부 반환 함수가 원래 스크립트로 돌아가는 것이 도움이 될 것이라고 기대하는 파이썬 스크립트를 만들려고합니다. .스크립트를 입력하고 종료하는 스크립트
감사합니다.
첫째, 당신은 정말 모든이 작업을 수행 할 필요가 있는지에 대해 생각 : 귀하의 질문은 매우 모호하기 때문에
버튼을 클릭하면 다른 파이썬 스크립트가 열리 며 두 번째 스크립트에서 일부 반환 함수가 원래 스크립트로 돌아가는 것이 도움이 될 것이라고 기대하는 파이썬 스크립트를 만들려고합니다. .스크립트를 입력하고 종료하는 스크립트
감사합니다.
첫째, 당신은 정말 모든이 작업을 수행 할 필요가 있는지에 대해 생각 : 귀하의 질문은 매우 모호하기 때문에
, 여기에 다소 모호한 대답. 왜 첫 번째 스크립트는 그냥 import
두 번째 스크립트를 모듈로 호출 할 수 없으며 어떤 함수를 호출합니까?
당신이 그것에 대한 좋은 대답을 가지고 있다고 가정 해 보자. 다른 스크립트를 "닫고"실행해야 할 필요가있다. 여기서 "닫기"란 "GUI를 보이지 않게하라"는 의미이다.
def handle_button_click(button):
button.parent_window().hide()
subprocess.call([sys.executable, '/path/to/other/script.py'])
button.parent_window().show()
이렇게하면 창을 숨기고 다른 스크립트를 실행 한 다음 다른 스크립트가 완료되면 다시 표시합니다. 일반적으로 이벤트 핸들러의 중간에서 천천히 그리고 블로킹을하는 것은 대단히 나쁜 생각입니다. 그러나이 경우에는 어쨌든 우리가 전체 UI를 감추고 있기 때문에 그걸 가지고 도망 갈 수 있습니다.
더 똑똑한 솔루션은 두 번째 스크립트가 보내거나 감시자 스레드가 보내는 신호와 관련됩니다. 예를 들어 :
def run_other_script_with_gui_hidden(window):
gui_library.do_on_main_thread(window.hide)
subprocess.call([sys.executable, '/path/to/other/script.py'])
gui_library.do_on_main_thread(window.show)
def handle_button_click(button):
t = threading.Thread(target=run_other_script_with_gui_hidden)
t.daemon = True
t.start()
은 분명히 당신은 당신의 선택 창 라이브러리에 해당하는 코드 button.window()
, window.hide()
, gui_library.do_on_main_thread
등 같은 것들을 교체해야합니다.
첫 번째 스크립트를 실제로 종료하고 두 번째 스크립트를 다시 실행하려는 경우 수는 수 있지만 까다 롭습니다. 두 번째 스크립트를 하위 프로세스로 실행하지 않고 형제로 시작하려고합니다. 이상적으로는 자신의 프로세스를 대신 사용하기를 원합니다. 당신의 OS가 자동적으로 그렇게하지 않는 한 GUI를 종료해야한다는 것을 제외하고는 (기본적으로 Windows는 유닉스는 그렇지 않을 것입니다). os.exec
패밀리를 살펴보십시오.하지만 유닉스에서 어떻게 작동하는지 이해해야합니다. 두 스크립트가 서로 밀접하게 결합되기를 원하지 않는 한, 명령 행에서 첫 번째 스크립트를 다시 시작하기위한 정확한 올바른 인수를 전달할 수 있습니다 (기본적으로 다른 매개 변수 다음에 전체 sys.argv
전달) .
execfile
을 사용하면 기존 인터프리터 인스턴스에서 두 번째 스크립트를 실행 한 다음 두 번째 스크립트 execfile
을 다시 사용할 수 있습니다. 이 솔루션은 exec
솔루션과 비슷하지만 동일하지는 않습니다.
안녕하세요, 답장을 보내 주셔서 감사합니다. 글쎄요, 메인 파이썬 스크립트는 점점 커지는 목록이나 다른 파이썬 스크립트에 대한 경로를 가지고 있습니다. 메뉴 같은 것. 사용자가 예를 들어 다섯 번째 버튼 인 python5.py를 클릭하면 main.py 스크립트를 닫습니다. 그런 다음 python5.py가 python5.py에서 함수를 끝내면 python5.py가 닫히고 main.py가 열립니다. 이것은 어쩌면 당신이 도울 수있는 적합한 해결책이 될 것입니다. 숨기기 창을 사용한 첫 번째 예는 실제로 흥미 롭습니다. 그러나 열리고 닫아야 할 많은 파이썬 스크립트가있는 경우를 생각해보십시오. 감사. –
더 이상 갈 수 없으면 "닫기"로 의미하는 것을 결정해야합니다. 스크립트가 실제로 실행을 멈출 필요가 있습니까? 또는 주 창을 닫으시겠습니까?아니면 그냥 숨길까요? 왜 그게 필요합니까? 80 년대 후반 스위처 (Switcher) 또는 멀티 파인더 (Multifinder) 이후로 런처/메뉴 앱이 계속 실행되는 것은 꽤 정상적인 일이었습니다. 그들이 가진 GUI는 모두 배경에 있으므로 문제가되지 않습니다. 그리고 이것은 단추의 상태를 제어하는 것만으로 여러 스크립트 실행을 동시에 허용하거나 거부 할 것인지 선택할 수 있음을 의미합니다. 그 디자인이 당신에게 잘못된 것 같아? – abarnert
모든 도움을 주셔서 감사합니다. 이것은 올바른 방향으로 나를 인도 해줍니다. –
닫은 프로그램으로 돌아갈 수 없습니다. 두 번째 스크립트가 완료되면 처음부터 다시 시작한다는 의미입니까? 또는 첫 번째 스크립트는 창을 닫지 만 계속 실행됩니까? – abarnert
또한 어떤 GUI 라이브러리를 사용하려고합니까? – abarnert