2008-09-05 35 views
7

Tôi đã viết một tập lệnh python nhỏ chỉ bật lên một hộp thông báo chứa văn bản được truyền trên dòng lệnh. Tôi muốn bật nó lên chỉ khi cửa sổ —chuyển từ cuộc gọi trước— không mở.Làm thế nào để biết liệu một cửa sổ có tiêu đề đã cho đã được mở trong Tk chưa?

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

Bất kỳ ý tưởng nào để kiểm tra điều đó?

Trả lời

2

Tôi tin rằng bạn muốn:

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

Tôi đã thử điều này, nó không hoạt động, cửa sổ mới sẽ mở ra. Có thể tôi chưa đủ rõ ràng: Hai trình thông dịch python đang chạy cùng một lúc. Tôi muốn quá trình thứ hai thoát ra khi người kia đang chạy, tức là khi cửa sổ —hoặc bất kỳ cửa sổ nào có tiêu đề đó— đã được mở. – Tibi

0

Câu trả lời trước đó làm việc phù hợp để mã bạn đã cung cấp. Bạn nói nó không hoạt động vì người trả lời tuân thủ quy tắc "sois bête et discipliné" ở chỗ anh ta không thêm root.mainloop() vào mã của mình vì câu hỏi của bạn cũng không.

Bằng cách thêm vào các dòng sau, vì một lý do gây ra bởi sự lặp sự kiện, bạn nên kiểm tra chuỗi chính xác "rút" như sau:

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

Lưu ý: không chạy mã này khác phiên Terminal của bạn sẽ treo lên. Để tránh sự khó chịu này, bạn sẽ phải đặt lại trạng thái cửa sổ bằng cách sử dụng root.state("normal") sẽ dẫn đến hộp thông báo biến mất như thể một lần nhấp vào nút Ok xảy ra hoặc root.iconify() thông qua đó bạn có thể dừng phiên Terminal để gác máy nhấp vào biểu tượng tkinter xuất hiện trên thanh tác vụ OS của bạn.

Các vấn đề liên quan