单个控件角度:
setFocus() 指定控件获取焦点
setFocusPolicy(Policy) 设置焦点获取方式
Qt.TabFocus 通过Tab键获得焦点,单击不能获得焦点
Qt.ClickFocus 通过被单击获得焦点,Tab键不能获得获得焦点
Qt.StrongFocus 上面两种方式都可以获得焦点
Qt.NoFocus 不能通过上两种方式获得焦点(默认值),setFocus仍可使其获得焦点
注意:setFocus()在任何方式下都可获得焦点
clearFocus() 取消焦点
from PyQt5.QtWidgets import QApplication, QWidget,QLabel,QPushButton,QLineEdit,QMainWindow import sys from PyQt5.QtCore import Qt class win(QWidget): def __init__(self): super().__init__() self.resize(300,300) self.setWindowTitle('焦点控制') text1=QLineEdit(self) text1.move(80,10) text2 = QLineEdit(self) text2.move(80, 50) text3 = QLineEdit(self) text3.move(80, 90) #text2.setFocus() #指定控件获取焦点 #text2.setFocusPolicy(Qt.TabFocus) #通过Tab键获得焦点,单击不能获得焦点 #text2.setFocusPolicy(Qt.ClickFocus) #通过被单击获得焦点,Tab键不能获得获得焦点 text2.setFocusPolicy(Qt.StrongFocus) #上面两种方式都可以获得焦点 if __name__=='__main__': app=QApplication(sys.argv) #创建应用 w=win() w.show() sys.exit(app.exec_())
父控件角度:
focusWidget() 获取子控件中当前聚焦的控件
一定要等到控件都显示出来,获取焦点后才可以
没有返回 None
focusNextChild() 聚焦下一个子控件
focusPreviousChild() 聚焦上一个子控件
focusNextPrevChild(bool)
True: #聚焦下一个子控件
False: 聚焦上一个子控件
setTabOrder(pre_widget, next_widget) 设置子控件获取焦点的先后顺序,静态方法
QWidget.setTabOrder(text1,text3)
#参数 text1后面是text3
from PyQt5.QtWidgets import QApplication, QWidget,QLineEdit,QPushButton import sys class win(QWidget): def __init__(self): super().__init__() self.resize(300,300) self.setWindowTitle('焦点控制') text1=QLineEdit(self) text1.move(80,10) text2 = QLineEdit(self) text2.move(80, 50) text3 = QLineEdit(self) text3.move(80, 90) QWidget.setTabOrder(text1,text3) #设置子控件获取焦点的先后顺序,静态方法 #参数 text1后面是text3 QWidget.setTabOrder(text3, text2) def mousePressEvent(self, event): # 鼠标键按下时调用 s=self.focusWidget() #获取子控件中当前聚焦的控件 self.focusNextChild() #聚焦下一个子控件 #self.focusPreviousChild() #聚焦上一个子控件 #self.focusNextPrevChild(False) #聚焦上一个子控件 if __name__=='__main__': app=QApplication(sys.argv) #创建应用 w=win() w.show() sys.exit(app.exec_())