2009-09-04 15 views
5

पीईजीटीके या जीटीके या अन्य प्रोग्रामिंग भाषा में खोले गए विंडोज़ कैसे प्राप्त करें? उबंटू में?उबंटू में पीईजीटीके या जीटीके में खोले गए विंडोज़ कैसे प्राप्त करें?

संपादित करें:

मैं चाहता हूँ डेस्कटॉप पर सूची रास्तों खोला निर्देशिका प्राप्त करें!

+0

का उपयोग करके पढ़ सकते हैं कृपया स्पष्ट करें: क्या आप सभी नॉटिलस विंडो के सभी टैब में दिखाए गए निर्देशिकाओं की सूची प्राप्त करना चाहते हैं? – akaihola

उत्तर

9

आप शायद libwnck उपयोग करना चाहते हैं:

http://library.gnome.org/devel/libwnck/stable/

मेरा मानना ​​है कि अजगर-GNOME या कुछ इसी तरह की पैकेज में अजगर बाइंडिंग देखते हैं।

एक बार जब आप जीटीके + mainloop चल रहा है, तो आप निम्न कर सकते हैं:

 
import wnck 
window_list = wnck.screen_get_default().get_windows() 

कि सूची में से एक खिड़की पर कुछ रोचक तरीके हैं get_name() और सक्रिय()।

यह बटन क्लिक करते समय विंडोज़ के नाम कंसोल पर प्रिंट करेगा। लेकिन किसी कारण से मुझे दो बार बटन क्लिक करना पड़ा। यह मेरा पहला समय libwnck का उपयोग कर रहा है, इसलिए शायद मुझे कुछ याद आ रहा है। :-)

 
import pygtk 
pygtk.require('2.0') 
import gtk, wnck 

class WindowLister: 
    def on_btn_click(self, widget, data=None): 
     window_list = wnck.screen_get_default().get_windows() 
     if len(window_list) == 0: 
      print "No Windows Found" 
     for win in window_list: 
      print win.get_name() 

    def __init__(self): 
     self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) 

     self.button = gtk.Button("List Windows") 
     self.button.connect("clicked", self.on_btn_click, None) 

     self.window.add(self.button) 
     self.window.show_all() 

    def main(self): 
     gtk.main() 

if __name__ == "__main__": 
    lister = WindowLister() 
    lister.main() 
+1

wnck.screen_get_default()। Get_windows() - खाली सूची लौटें :( – john

+0

मेरे त्वरित परीक्षण में, मुझे कॉल करने से पहले मुझे gtk + विंडो (मेरी पायथन प्रक्रिया में) लाना पड़ा। – Sandy

+1

आप एक साधारण उदाहरण कोड दे सकते हैं thx – john

2

the PyGTK reference से:

gtk.gdk.window_get_toplevels()

gtk.gdk.window_get_toplevels() समारोह सभी उच्चस्तरीय डिफ़ॉल्ट स्क्रीन पर PyGTK के लिए जाना जाता खिड़कियों की एक सूची देता है। एक अपूर्ण विंडो रूट विंडो का बच्चा है ( gtk.gdk.get_default_root_window() फ़ंक्शन देखें)।

+0

यह केवल एक विंडो देता है - "('UTF8_STRING', 8, 'wnd.py')", और मेरे पास तीन खुले जीएडिट विंडो हैं – john

+1

मुझे परीक्षण के बाद एक ही समस्या मिल रही है - फ़ंक्शन संदर्भ के रूप में काम नहीं करता था सुझाव दिया कि यह होगा। नवामन द्वारा सुझाए गए अनुसार wmctrl -l को कॉल का उपयोग करने के बजाय अब आपकी सबसे अच्छी शर्त है; इसके अलावा एकमात्र चीज जिसे मैं सोच सकता हूं वह सीधे एक्स 11 मॉड्यूल का उपयोग कर रहा है। –

1

मुझे वास्तव में यह नहीं पता कि एक विंडो एक जीटीके है या नहीं। लेकिन अगर आप यह देखना चाहते हैं कि वर्तमान में कितनी खिड़कियां खुली हैं तो "wmctrl -l" आज़माएं। निश्चित रूप से इसे पहले स्थापित करें।

2

कमांड लाइन उत्पादन पार्स आमतौर पर सबसे अच्छा तरीका नहीं है, तो आप उस कार्यक्रमों उत्पादन नहीं बदल रहा है, जो संस्करण या platfrom से भिन्न हो सकता है पर निर्भर हैं। यहाँ कैसे Xlib का उपयोग कर यह करने के लिए है:

import Xlib.display 

screen = Xlib.display.Display().screen() 
root_win = screen.root 

window_names = [] 
for window in root_win.query_tree()._data['children']: 
    window_name = window.get_wm_name() 
    window_names.append(window_name) 

print window_names 

ध्यान दें कि यह सूची खिड़कियों कि आप सामान्य रूप से 'विंडोज़' के रूप में वर्गीकृत नहीं होता शामिल होंगे, लेकिन है कि आप क्या करने की कोशिश कर रहे हैं के लिए कोई फर्क नहीं पड़ता।

4

किसी भी कारण से, मैं कोई टिप्पणी पोस्ट नहीं कर सकता, लेकिन मैं इसे सैंडी के उत्तर में एक जोड़ के रूप में जोड़ना चाहता हूं।

यहाँ कंसोल पर वर्तमान विंडो को सूचीबद्ध करती है कि कोड का एक हिस्सा है:

import pygtk 
pygtk.require('2.0') 
import gtk, wnck 

if __name__ == "__main__": 
    default = wnck.screen_get_default() 

    while gtk.events_pending(): 
     gtk.main_iteration(False) 

    window_list = default.get_windows() 
    if len(window_list) == 0: 
     print "No Windows Found" 
    for win in window_list: 
     if win.is_active(): 
      print '***' + win.get_name() 
     else: 
      print win.get_name() 

धन्यवाद सैंडी!

9

2013 में आपका स्वागत है! यहां Wnck और अब इसके बहिष्कृत पीईजीटीके विधि के बजाय इसके आधुनिक गोब्जेक्ट इंट्रोसक्शन लाइब्रेरी का उपयोग कर कोड है।तुम भी जाँच कर सकते हैं my other answer about wnck:

from gi.repository import Gtk, Wnck 

Gtk.init([]) # necessary only if not using a Gtk.main() loop 
screen = Wnck.Screen.get_default() 
screen.force_update() # recommended per Wnck documentation 

# loop all windows 
for window in screen.get_windows(): 
    print window.get_name() 
    # ... do whatever you want with this window 

# clean up Wnck (saves resources, check documentation) 
window = None 
screen = None 
Wnck.shutdown() 

प्रलेखन के लिए के रूप में, Libwnck Reference Manual की जाँच करें। यह अजगर के लिए विशिष्ट नहीं है, लेकिन GObject आत्मनिरीक्षण का उपयोग करने का पूरा बिंदु सभी भाषाओं में एक ही एपीआई होना है, gir बाइंडिंग के लिए धन्यवाद।

इसके अलावा, दोनों wnck एवं इससे संबंधित gir बॉक्स से बाहर बंधन के साथ Ubuntu जहाजों, लेकिन यदि आप उन्हें स्थापित करने की आवश्यकता:

sudo apt-get install libwnck-3-* gir1.2-wnck-3.0 

यह भी libwnck-3-dev स्थापित हो जाएगा, जो आवश्यक नहीं है लेकिन उपयोगी स्थापित हो जाएगा प्रलेखन जो आप DevHelp

+0

में सामान्य समस्याएं देखें यह समाधान मेरे लिए काम करता है, जबकि स्वीकृत उत्तर में एक त्रुटि उत्पन्न हुई कि कोई 'wnck.screen_get_default() 'नहीं है। हालांकि यह उत्तर दूसरे की तुलना में नया है, मुझे लगता है कि यह स्वीकार्य उत्तर होना चाहिए, क्योंकि पुराना अब काम नहीं करता है। – Zelphir

संबंधित मुद्दे