2008-09-05 7 views
7

필자는 명령 줄에서 전달 된 텍스트가 포함 된 메시지 상자를 팝업하는 작은 파이썬 스크립트를 작성했습니다. 나는 이전 호출에서 창문이 열렸을 때만 팝업을하고 싶다.주어진 제목의 창이 Tk에서 이미 열려 있는지 확인하는 방법?

from Tkinter import * 
import tkMessageBox 

root = Tk() 
root.withdraw() 

# TODO not if a window with this title exists 
tkMessageBox.showinfo("Key you!", " ".join(sys.argv[1:])) 

어떻게 확인할 수 있습니까? 내가 당신을 믿지

답변

2

원하는 :

if 'normal' != root.state(): 
    tkMessageBox.showinfo("Key you!", " ".join(sys.argv[1:])) 
+0

시도해 보았지만 작동하지 않습니다. 어쨌든 새 창이 열립니다. 어쩌면 나는 아직 명확하지 않다. 두 개의 파이썬 인터프리터가 동시에 실행 중이다. 두 번째 프로세스가 다른 프로세스가 종료 될 때, 즉 창 또는 그 제목이있는 창이 이미 열려있을 때 두 번째 프로세스를 종료하고 싶습니다. – Tibi

0

이전의 대답은 당신이 제공 한 코드에 따라 작동합니다. 당신은 질문이 없기 때문에 응답자가 그의 코드에 root.mainloop()을 추가하지 않았다는 점에서 "sois bête et discipliné"규칙을 따르기 때문에 효과가 없다고 말합니다. 이벤트 루프에 의해 발생하는 몇 가지 이유를 들어, 다음과 같이 "철회"정확한 문자열을 테스트해야, 나중에 줄을 추가하여

:

import tkinter as tk 
from tkinter import messagebox 
import sys 


root = tk.Tk() 
root.withdraw() 

if 'withdrawn' != root.state(): 
    messagebox.showinfo("Key you!", sys.argv[1:]) 


root.mainloop() 

참고 : 그렇지 않으면 터미널 세션 것이 코드를 실행하지 마십시오 끊어. 이러한 불편 함을 피하기 위해 root.state("normal")을 사용하여 창 상태를 다시 설정해야합니다. 그러면 확인 버튼을 클릭 한 것처럼 사라질 메시지 상자가 나타나거나 root.iconify()을 통해 터미널 세션을 중단하여 오른쪽에서 끊을 수 있습니다 OS 작업 표시 줄에 나타나는 tkinter 아이콘을 클릭하십시오.

관련 문제