2011-03-08 11 views
5

में एफ 11 के साथ पूर्णस्क्रीन टॉगल करने का सरल तरीका मैं पेशेवर प्रोग्रामर नहीं हूं लेकिन नियमित रूप से डेटा विज़ुअलाइज़ेशन परीक्षण और प्रोटोटाइप के लिए पीईजीटीके और काहिरा का उपयोग कर रहा हूं।पीईजीटीके

मुझे लगता है कि मैं वेब, जो "मानक बातें" जीटीके काम करने की जरूरत नहीं करता है से ले लिया PyGTK का एक मानक टेम्पलेट है:

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

""" 
lots of stuff 
""" 

if __name__ == "__main__": 
    mainWindow = gtk.Window() 
    mainWindow.set_title(some_title) 
    mainWindow.connect("delete-event", gtk.main_quit) 
    #mainWindow.set_position(gtk.WIN_POS_CENTER) 
    #mainWindow.fullscreen() 
    mainWindow.show_all() 
    gtk.main() 

मैं आमतौर पर देखने के सबसे क्षुधा पूर्णस्क्रीन टॉगल करने के लिए F11 का उपयोग कर, तो मैं आश्चर्य है कि इस स्क्रिप्ट को मेरी स्क्रिप्ट में जोड़ने का एक आसान तरीका है या नहीं। मुझे लगता है कि इसका अर्थ यह हो सकता है कि यह प्रोग्राम सिग्नल को gtk फ़ंक्शंस या विधियों या उस तरह से कुछ जोड़ना है, लेकिन मेरी n00bness मुझे यह जानने से रोकती है कि यह कैसे करें।

किसी भी मदद की सराहना की जाएगी, धन्यवाद। (लिंक पसंदीदा, ताकि मैं स्वयं होमवर्क कर सकूं; ओ)

उत्तर

17

चलिए कुंजीपटल पर कैसे उठाएं इसके साथ शुरू करें: हमें key-press-event सिग्नल से कनेक्ट करने की आवश्यकता है। लेकिन हमें इसे से को कनेक्ट करने के लिए कुछ चाहिए।

यह कुछ विंडो स्थिति का ट्रैक रखना चाहिए, इसलिए window-state-event सिग्नल से कनेक्ट होने वाली कक्षा का उपयोग करना समझ में आता है और यह ट्रैक रखता है कि विंडो पूर्ण स्क्रीन है या नहीं।

तो हम एक वस्तु की जरूरत है:

  1. फुलस्क्रीन/एक विशेष खिड़की के नहीं-फुलस्क्रीन राज्य पर नज़र रखता है, और
  2. एक कुंजी दबाने घटना का पता लगाता है और पता लगा लेता है इसके साथ क्या करना है

हम वास्तव में पूर्णस्क्रीन स्थिति को कैसे टॉगल करते हैं? आसान, window.fullscreen()/window.unfullscreen() फ़ंक्शंस का उपयोग करें।

class FullscreenToggler(object): 

    def __init__(self, window, keysym=gtk.keysyms.F11): 
     self.window = window 
     self.keysym = keysym 
     self.window_is_fullscreen = False 
     self.window.connect_object('window-state-event', 
            FullscreenToggler.on_window_state_change, 
            self) 

    def on_window_state_change(self, event): 
     self.window_is_fullscreen = bool(
      gtk.gdk.WINDOW_STATE_FULLSCREEN & event.new_window_state) 

    def toggle(self, event): 
     if event.keyval == self.keysym: 
      if self.window_is_fullscreen: 
       self.window.unfullscreen() 
      else: 
       self.window.fullscreen() 

यह एक खिड़की और वैकल्पिक keysym निरंतर (F11 को दोषी) लेता है:

तो हम जैसे कुछ है। इतना है कि यह प्रयोग करें:

toggler = FullscreenToggler(window) 
window.connect_object('key-press-event', FullscreenToggler.toggle, toggler) 

नोट connect_object बजाय connect के उपयोग है, जो हमें एक अप्रयुक्त पैरामीटर जोड़ने की बचत होती है।

साइड-ध्यान दें: अगर कोई करता है, तो विंडो पूर्णस्क्रीन था, हम इस वर्ग-आधारित दृष्टिकोण से बच सकते हैं की जाँच करें और एक समारोह, ऐसा ही कुछ किया था का उपयोग करने के लिए एक आसान तरीका था:

def fullscreen_toggler(window, event, keysym=gtk.keysyms.F11): 
    if event.keyval == keysym: 
     fullscreen = bool(
       gtk.gdk.WINDOW_STATE_FULLSCREEN & 
       window.get_property('window-state')) 
     if fullscreen: 
      window.unfullscreen() 
     else: 
      window.fullscreen() 

। ..और फिर ...

window.connect('key-press-event', fullscreen_toggler) 

लेकिन मुझे इसके लिए कोई संपत्ति नहीं मिली।

+1

उत्कृष्ट समाधान! +1 – ptomato

+0

वाह, आपका जवाब बहुत अच्छी तरह से है! अपना समय देने के लिए बहुत धन्यवाद, लेकिन मुझे आपकी युक्तियों को पचाने के लिए कुछ समय चाहिए! – heltonbiker

+0

@heltonbiker - कोई चिंता नहीं है :) अगर आपको इसे लागू करने में समस्याएं हैं तो – detly