Πώς να ξέρω αν ένα παράθυρο με ένα συγκεκριμένο τίτλο είναι ήδη ανοιχτή σε Tk;

ψήφοι
7

Έχω γράψει ένα μικρό σενάριο python που μόλις αναδύεται ένα πλαίσιο μηνύματος που περιέχει το κείμενο πέρασε στη γραμμή εντολών. Θέλω να αναδυθεί μόνο όταν το παράθυρο -resulting από προηγούμενη call-δεν είναι ανοιχτή.

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

Οποιαδήποτε ιδέα για το πώς να ελέγξει αυτό;

Δημοσιεύθηκε 05/09/2008 στις 12:07
πηγή χρήστη
Σε άλλες γλώσσες...                            


2 απαντήσεις

ψήφοι
2

Πιστεύω ότι θέλετε:

if 'normal' != root.state():
    tkMessageBox.showinfo("Key you!", " ".join(sys.argv[1:]))
Απαντήθηκε 05/09/2008 στις 17:19
πηγή χρήστη

ψήφοι
0

Η προηγούμενη απάντηση εργάζεται ανάλογα με το κωδικό που έχετε δώσει. Λέτε ότι δεν λειτουργεί επειδή η answerer είναι σύμφωνη με τον κανόνα «sois bête et πειθαρχία» από το γεγονός ότι δεν είχε προσθέσει root.mainloop()στον κώδικα του από την ερώτησή σας δεν ούτε.

Με την προσθήκη του αργότερα γραμμή, για κάποιο λόγο που προκαλείται από το βρόχο περίπτωση, θα πρέπει να δοκιμάσετε την ακριβή σειρά «αποσύρεται», ως εξής:

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

Σημείωση: δεν τρέχει αυτόν τον κώδικα διαφορετικά Terminal συνεδρία σας θα κλείσεις. Για να παρακαμφθεί αυτή η ταλαιπωρία, θα πρέπει να επαναφέρετε την κατάσταση παραθύρου είτε με root.state("normal")το οποίο θα οδηγήσει σε πλαίσιο μηνύματος για να εξαφανιστεί σαν να συνέβη ένα κλικ στο κουμπί ΟΚ, ή root.iconify()μέσω του οποίου μπορείτε να σταματήσετε την περίοδο λειτουργίας Terminal να κλείσεις κάνοντας δεξί κλικ στο το εικονίδιο TkInter που εμφανίζονται στο OS γραμμή εργασιών σας.

Απαντήθηκε 19/11/2017 στις 08:21
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more