焦点控制

 

单个控件角度:

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_())
复制代码

 

posted @   天子骄龙  阅读(1131)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示

目录导航