这里介绍控件的焦点控制,从单个控件的角度,可以设置如何获得焦点、焦点的取消等,从父控件的角度来看,则可以获取当前有焦点的控件以及设置获取焦点的顺序。

在《PyQt中常见的事件类型(二)_键盘事件_焦点事件_拖拽事件_绘制事件_改变事件_右键菜单_输入法_PyQt学习笔记(二十一)》一文中,介绍了什么是焦点。

单个控件角度API

  • setFocus() :指定控件获取焦点

  • setFocusPolicy(Policy):设置焦点获取策略

    • Qt.TabFocus:通过Tab键获得焦点
    • Qt.ClickFocus:通过单击获取焦点
    • Qt.StrongFocus:可通过上面两种方式获得焦点
    • Qt.NoFocus:不能通过上面两种方式获得焦点
  • clearFocus() : 取消焦点

# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
import sys

# 创建一个应用
app = QApplication(sys.argv)
print(sys.argv)

# 创建一个QWidget类的窗口
window = QWidget()
window.setWindowTitle("焦点控制")  # 标题
window.resize(500, 500)  # 窗口的大小
window.move(400, 200)  # 窗口初次显示的位置

# 创建其他控件
le1 = QLineEdit(window)
le1.move(50, 50)

le2 = QLineEdit(window)
le2.move(50, 100)

le3 = QLineEdit(window)
le3.move(50, 150)

le2.setFocus()  # 一打开就是le2获取焦点,而不是默认le1为焦点
le2.setFocusPolicy(Qt.TabFocus)  # 通过Tab键获取焦点
le3.setFocusPolicy(Qt.ClickFocus)  # 通过鼠标点击来获取焦点

window.show()  # 显示窗口,不然啥也没有

sys.exit(app.exec_())

父控件角度API

  • focusWidget() :获取子控件中当前聚焦的控件
  • focusNextChild() :聚焦下一个子控件
  • focusPreviousChild() : 聚焦上一个子控件
  • focusNextPreChild(bool) :True 下一个 、 False 上一个
  • setTabOrder(pre_widget, next_widget) :静态方法,设置子控件获取焦点的先后顺序
# -*- coding: UTF-8 -*-
from PyQt5.Qt import *
import sys


class Window(QWidget):
    def mousePressEvent(self, evt):
        # self.focusNextChild()  # 点击鼠标聚焦到下一个子控件
        self.focusPreviousChild()  # 点击鼠标聚焦到上一个子控件


# 创建一个应用
app = QApplication(sys.argv)
print(sys.argv)

# 创建一个QWidget类的窗口
window = Window()
window.setWindowTitle("焦点控制")  # 标题
window.resize(500, 500)  # 窗口的大小
window.move(400, 200)  # 窗口初次显示的位置

# 创建其他控件
le1 = QLineEdit(window)
le1.move(50, 50)

le2 = QLineEdit(window)
le2.move(50, 100)

le3 = QLineEdit(window)
le3.move(50, 150)

# 获取当前窗口中,所有子控件当中获取焦点的那个控件
# print(window.focusWidget())  # None,这是因为第一个默认聚焦是窗口之后添加的

# 设置静态顺序
QWidget.setTabOrder(le1, le3)
QWidget.setTabOrder(le3, le2)
# 这样按下tab键的顺序就是le1——>le3——>le2


window.show()  # 显示窗口,不然啥也没有

sys.exit(app.exec_())

博主个人公众号
版权声明 ▶ 本网站名称:陶小桃Blog
▶ 本文链接:https://www.52txr.cn/2022/qtfocus.html
▶ 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行核实删除。
▶ 转载本站文章需要遵守:商业转载请联系站长,非商业转载请注明出处!!

最后修改:2022 年 07 月 29 日
如果觉得我的文章对你有用,请随意赞赏