2012-09-05 16 views
7

यदि उपयोगकर्ता किसी अन्य विंडो पर क्लिक करता है तो मैं खिड़की पर ध्यान देने की कोशिश कर रहा हूं।पीईक्यूटी विंडो फोकस

अभी मेरे पास दो खिड़कियां हैं: विंडो ए पीछे है, और विंडो बी सामने है। जब खिड़की बी दिखाई देता है, यह विंडो ए अक्षम कर देता है अब मैं क्या चाहते हैं कि जब भी उपयोगकर्ता विंडो बी के बाहर क्लिक करता है, यह ध्यान केंद्रित वापस खिड़की बी

यहाँ करने के लिए देना चाहिए है खिड़की बी के लिए कोड:

class window_b(QtGui.QDialog): 
    def __init__(self,parent=None): 
     super(window_b, self).__init__(parent) 
     window_a.setEnabled(False) 
     self.ui = Ui_Form_window_b() 
     self.ui.setupUi(self) 
     self.setFocusPolicy(QtCore.Qt.StrongFocus) 

    def focusOutEvent(self,event): 
     self.setFocus(True) 
     self.activateWindow() 
     self.raise_() 
     self.show() 

मैं setFocus और activateWindow की कोशिश की है, लेकिन यह ध्यान देने के वापस खिड़की बी

कोई सुझाव को दे did not?

+0

आप अन्य सभी विंडो के संबंध में इस व्यवहार की तरह या केवल विंडो ए करने के लिए यदि आप बाद वाले को चाहते हैं तो आप विंडो बी को एक मोडल विंडो बना सकते हैं http://en.wikipedia.org/wiki/Modal_window। विंडो बी तब विंडो ए का एक बच्चा है जिसे बाद में विंडो बी खुला होने तक ध्यान केंद्रित नहीं किया जा सकता है। – halex

उत्तर

11

window_b प्राप्त करने के लिए हमेशा शीर्ष पर बने रहने के लिए आपको विंडोफ्लग QtCore.Qt.WindowStaysOnTopHint जोड़ना होगा। अपने __init__ में कॉल

self.setWindowFlags(PyQt4.QtCore.Qt.WindowStaysOnTopHint) 

मैं जोड़ने के लिए है कि यह केवल विंडोइंग प्रबंधक को एक संकेत है और सफल होने की गारंटी नहीं है जोड़ें।

+1

यह मेरे लिए काम करता है लेकिन यह विंडो_बी पर वापस ध्यान केंद्रित नहीं करता है अब window_b हमेशा शीर्ष पर रहता है लेकिन कोई फोकस नहीं करता है। – Uahmed

+0

@ user1224233 आह ठीक है। मैंने हमेशा ध्यान केंद्रित किया * लेकिन मेरे मस्तिष्क * हमेशा * शीर्ष पर बना दिया :)। क्षमा करें – halex

+0

धन्यवाद यह मेरी समस्या का आधा हल किया :) – Uahmed

2

self.raise_()self.activateWindow() के बाद आप जिन आदेशों की तलाश कर रहे हैं, उन्हें होना चाहिए, हालांकि मेरे डेबियन ओएस पर कुछ प्रकार के मुद्दे हैं, उदाहरण के लिए, यदि मैं अधिकतम खिड़की पर क्लिक करता हूं, तो विंडो फोकस प्राप्त, लेकिन यह भी गायब हो जाएगा, बग के कुछ प्रकार की तरह लग रहा है, setTopLevelWindow विधि में अनुक्रम है कि व्यवहार की उपेक्षा करेगा:

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 

import sip 
sip.setapi('QString', 2) 
sip.setapi('QVariant', 2) 

from PyQt4 import QtGui, QtCore, QtWebKit, QtNetwork 

class myWindow(QtGui.QMainWindow): 
    def __init__(self, parent=None): 
     super(myWindow, self).__init__(parent) 

     self.button = QtGui.QPushButton(self) 
     self.button.setText("Show Dialog") 

     self.dialog = QtGui.QDialog(self) 
     self.dialog.setFocusPolicy(QtCore.Qt.StrongFocus) 
     self.dialog.installEventFilter(self) 

     self.button.clicked.connect(self.dialog.show) 

     self.setCentralWidget(self.button) 

    def eventFilter(self, obj, event): 
     if event.type() == QtCore.QEvent.WindowDeactivate: 
      self.setTopLevelWindow() 
      self.dialog.close() 

      return True 

     return False 

    def setTopLevelWindow(self):  
     if self.windowState() != QtCore.Qt.WindowMaximized: 
      self.showMaximized() 
      self.showNormal() 

     else: 
      self.showNormal() 
      self.showMaximized() 

     self.raise_() 
     self.activateWindow() 


if __name__ == "__main__": 
    import sys 

    app = QtGui.QApplication(sys.argv) 
    app.setApplicationName('myWindow') 

    main = myWindow() 
    main.show() 

    sys.exit(app.exec_()) 
संबंधित मुद्दे