PyQt窗口焦点

时间:2012-09-05 11:51:59

标签: python window focus pyqt pyqt4

如果用户点击另一个窗口,我会尝试将焦点放在窗口上。

现在我有两个窗口:窗口A在后面,窗口B在前面。当Window B出现时,它会禁用Window A.现在我想要的是,每当用户点击Window B外,它应该将焦点重新放回Window B.

以下是Window B的代码:

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

我尝试了setFocusactivateWindow,但它没有把重点放在Window B上。

有什么建议吗?

3 个答案:

答案 0 :(得分:11)

要让window_b始终保持最佳状态,您必须添加windowflag QtCore.Qt.WindowStaysOnTopHint。在__init__添加通话

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

我必须补充一点,这只是对窗口管理器的提示,并不能保证成功。

答案 1 :(得分:0)

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.setWindowModality(QtCore.Qt.ApplicationModal)
        self.setFocusPolicy(QtCore.Qt.StrongFocus)

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

答案 2 :(得分:0)

我在那里找到了一个简单的技巧,只需使用 self.showNormal() 并且它有效,将焦点返回到窗口,所以它会是:

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

就是这样! 玩得开心编码