2008-09-05 16 views
7

Komut satırında iletilen metni içeren bir ileti kutusu açan küçük bir python betiği yazdım. Sadece pencere - önceki bir çağrıdan - açık olmadığında açılır.Belirli bir başlığa sahip bir pencerenin Tk'da açık olup olmadığını nasıl anlayabilirim?

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:])) 

herhangi bir fikir bu nasıl kontrol edilir? Sana inanıyorum

cevap

2

istiyorum:

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

Bunu denedim, işe yaramıyor, yeni pencere yine de açılıyor. Belki de yeterince açık değildim: İki python yorumlayıcısı aynı anda çalışıyor. İkinci işlemin, diğeri çalışırken, yani pencere (bu başlığa sahip herhangi bir pencere) zaten açık olduğunda çıkmasını istiyorum. – Tibi

0

önceki cevabı verdiğiniz koda buna göre çalışır. Sorunun işe yaramamış olduğunu söylersiniz çünkü cevaplayan kişi "sois bête et discipliné" kuralı ile uyuşmaktadır, çünkü buradaki soruna da gerek olmadığı için root.mainloop() kodunu eklememiştir. Olay döngü nedeniyle bazı nedenlerden dolayı, aşağıdaki gibi "içine kapanık" sadece tırnak test etmelidir, daha sonra çizgi ekleyerek

:

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() 

Not: aksi takdirde Terminal oturumu olacak bu kodu tüketmemek telefonu kapatmak. Bu rahatsızlıktan kaçınmak için, pencerenin durumunu root.state("normal") kullanarak sıfırlamanız gerekir; bu, Ok düğmesinin tıklanması gibi bir ileti kutusunun kaybolmasına neden olacak şekilde veya root.iconify() aracılığıyla Terminal oturumunu durdurarak sağa sola kapatabilirsiniz. OS görev çubuğunuzda görünen tkinter simgesine tıklayarak.

İlgili konular