控件——焦点控制相关操作

1、只有获取焦点的控件才能与用户进行交互。使某一个文本框获取焦点有相应的API。

①从单个控件角度来说:指定控件获取焦点;获取焦点的策略:通过鼠标点击或者Tab键切换等方法。

    # 第二个控件获取焦点
    #le2.setFocus()    
    # 通过tab键获取
    le2.setFocusPolicy(Qt.TabFocus)
    # 通过鼠标点击获取
    le2.setFocusPolicy(Qt.ClickFocus)
    # 两种策略同时获取
    le2.setFocusPolicy(Qt.StrongFocus)

不能通过以上两种方式获取焦点:Qt.NoFocus。只能通过setFocus获取。

取消焦点:le2.clearFocus()

②从父控件角度来说:

想知道界面运行之后到底是哪个控件获取焦点:

    app = QApplication(sys.argv)
    window = QWidget()
    window.setWindowTitle("焦点控制")
    window.resize(500, 500)

    le1 = QLineEdit(window)
    le1.move(50, 50)
    le2 = QLineEdit(window)
    le2.move(100, 100)
    le3 = QLineEdit(window)
    le3.move(150, 150)

    # 获取当前窗口内部,所有子控件当中获取焦点的哪个控件
    window.show()

    print(window.focusWidget())

输出结果为None,界面虽然已经展示,但获取焦点是后续执行过程中才获取焦点。

监听窗口点击事件:焦点是后来才加上去的。

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def mousePressEvent(self, evt):
        print(self.focusWidget())

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Window()
    window.setWindowTitle("焦点控制")
    window.resize(500, 500)

    le1 = QLineEdit(window)
    le1.move(50, 50)
    le2 = QLineEdit(window)
    le2.move(100, 100)
    le3 = QLineEdit(window)
    le3.move(150, 150)

    # 获取当前窗口内部,所有子控件当中获取焦点的哪个控件
    window.show()

    print(window.focusWidget())
    sys.exit(app.exec_())

如果在显示之前已经标识是哪个控件获取焦点,则输出获取焦点控件时不会为空。

    le1 = QLineEdit(window)
    le1.move(50, 50)
    le2 = QLineEdit(window)
    le2.move(100, 100)
    le3 = QLineEdit(window)
    le3.move(150, 150)

    le2.setFocus()
    # 第二个控件获取焦点

    # 获取当前窗口内部,所有子控件当中获取焦点的哪个控件
    window.show()

    print(window.focusWidget())
    sys.exit(app.exec_())

控制聚焦到上一个子控件或者下一个子控件:

class Window(QWidget):
    def mousePressEvent(self, evt):
        print(self.focusWidget())
        # 聚焦到下一个子控件,即当鼠标聚焦时,焦点会跑到下一个子控件
        self.focusNextChild()
        # 聚焦到上一个子控件,当鼠标聚焦时,焦点会跑到上一个子控件
        self.focusPreviousChild()
        # 以上两种方法有一个方法原型,True则表示聚焦到下一个子控件
        self.focusNextPrevChild(True)

静态方法获取控件获取焦点的顺序。(静态方法的调用:通过类名调用)对控件进行排序

    # 静态方法调用如何、通过类名
    # le1之后由le3获取焦点
    QWidget.setTabOrder(le1, le3)
    # le3之后由le2获取焦点
    QWidget.setTabOrder(le3, le2)

代码汇总:

from PyQt5.Qt import *
import sys

class Window(QWidget):
    def mousePressEvent(self, evt):
        print(self.focusWidget())
        # 聚焦到下一个子控件,即当鼠标聚焦时,焦点会跑到下一个子控件
        self.focusNextChild()
        # 聚焦到上一个子控件,当鼠标聚焦时,焦点会跑到上一个子控件
        self.focusPreviousChild()
        # 以上两种方法有一个方法原型,True则表示聚焦到下一个子控件
        self.focusNextPrevChild(True)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = Window()
    window.setWindowTitle("焦点控制")
    window.resize(500, 500)

    le1 = QLineEdit(window)
    le1.move(50, 50)
    le2 = QLineEdit(window)
    le2.move(100, 100)
    le3 = QLineEdit(window)
    le3.move(150, 150)

    le2.setFocus()
    # 第二个控件获取焦点
    #le2.setFocus()
    # 通过tab键获取
    # le2.setFocusPolicy(Qt.TabFocus)
    # # 通过鼠标点击获取
    # le2.setFocusPolicy(Qt.ClickFocus)
    # # 两种策略同时获取
    # le2.setFocusPolicy(Qt.StrongFocus)
    #le2.clearFocus()

    # 静态方法调用如何、通过类名
    # le1之后由le3获取焦点
    QWidget.setTabOrder(le1, le3)
    # le3之后由le2获取焦点
    QWidget.setTabOrder(le3, le2)


    # 获取当前窗口内部,所有子控件当中获取焦点的哪个控件
    window.show()

    print(window.focusWidget())
    sys.exit(app.exec_())

 2、QWidget总结:重要的:样式、布局、控件存在布局的大小相关设置。(很重要)

信号windowTitleChanged(QSting)窗口标题改变信号

windowIConChanged(QIcon)窗口图标改变信号

customContextMenuRequested(QPoint)自定义上下文菜单请求信号

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

。七十二。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值