如果用户点击另一个窗口,我会尝试将焦点放在窗口上。
现在我有两个窗口:窗口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()
我尝试了setFocus
和activateWindow
,但它没有把重点放在Window B上。
有什么建议吗?
答案 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()
就是这样! 玩得开心编码