PyQt5 焦点设置(按键Tab只切换输入框,并且去除选中虚线框)/ 去除选中虚线框(1)

文章目录

概要

在开发的软件中,如果想只实现通过键盘上的 Tab 键进行输入框的切换,而不想切换到按钮上的话,可以使用 setFocusPolicy(Qt.NoFocus) 来取消控件焦点属性。比如想要的是:

请添加图片描述

而不是:

请添加图片描述

方法

运用 setFocusPolicy(Qt.NoFocus) 来取消焦点,此时既不会选中下面的复选框或者按钮,也可用于去除虚线框。

详见下面代码:

控件名称.setFocusPolicy(Qt.NoFocus)

下面给出一个例子:
先创建一个py文件,名字为:【ui.py】

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(823, 570)
        self.horizontalLayout = QtWidgets.QHBoxLayout(Form)
        self.horizontalLayout.setObjectName("horizontalLayout")
        spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem)
        self.frame_9 = QtWidgets.QFrame(Form)
        self.frame_9.setMinimumSize(QtCore.QSize(500, 0))
        self.frame_9.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_9.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_9.setObjectName("frame_9")
        self.gridLayout_25 = QtWidgets.QGridLayout(self.frame_9)
        self.gridLayout_25.setObjectName("gridLayout_25")
        self.frame_78 = QtWidgets.QFrame(self.frame_9)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(1)
        sizePolicy.setHeightForWidth(self.frame_78.sizePolicy().hasHeightForWidth())
        self.frame_78.setSizePolicy(sizePolicy)
        self.frame_78.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_78.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_78.setObjectName("frame_78")
        self.verticalLayout_36 = QtWidgets.QVBoxLayout(self.frame_78)
        self.verticalLayout_36.setObjectName("verticalLayout_36")
        self.label_6 = QtWidgets.QLabel(self.frame_78)
        self.label_6.setObjectName("label_6")
        self.verticalLayout_36.addWidget(self.label_6)
        self.gridLayout_25.addWidget(self.frame_78, 0, 0, 1, 1)
        self.frame_79 = QtWidgets.QFrame(self.frame_9)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(2)
        sizePolicy.setHeightForWidth(self.frame_79.sizePolicy().hasHeightForWidth())
        self.frame_79.setSizePolicy(sizePolicy)
        self.frame_79.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_79.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_79.setObjectName("frame_79")
        self.verticalLayout_37 = QtWidgets.QVBoxLayout(self.frame_79)
        self.verticalLayout_37.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_37.setSpacing(0)
        self.verticalLayout_37.setObjectName("verticalLayout_37")
        self.frame_80 = QtWidgets.QFrame(self.frame_79)
        self.frame_80.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_80.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_80.setObjectName("frame_80")
        self.horizontalLayout_44 = QtWidgets.QHBoxLayout(self.frame_80)
        self.horizontalLayout_44.setObjectName("horizontalLayout_44")
        self.label_7 = QtWidgets.QLabel(self.frame_80)
        self.label_7.setMaximumSize(QtCore.QSize(30, 30))
        self.label_7.setText("")
        self.label_7.setPixmap(QtGui.QPixmap(":/imgs/qrc/imgs/手机.png"))
        self.label_7.setScaledContents(True)
        self.label_7.setObjectName("label_7")
        self.horizontalLayout_44.addWidget(self.label_7)
        self.lineEdit_phone = QtWidgets.QLineEdit(self.frame_80)
        self.lineEdit_phone.setStyleSheet("QDialog {\n"
                                          "    background: #D6DBE9;\n"
                                          "}\n"
                                          "\n"
                                          "QLineEdit {\n"
                                          "    border: 1px solid #A0A0A0; /* 边框宽度为1px,颜色为#A0A0A0 */\n"
                                          "    border-radius: 3px; /* 边框圆角 */\n"
                                          "    padding-left: 5px; /* 文本距离左边界有5px */\n"
                                          "    background-color: #F2F2F2; /* 背景颜色 */\n"
                                          "    color: #A0A0A0; /* 文本颜色 */\n"
                                          "    selection-background-color: #A0A0A0; /* 选中文本的背景颜色 */\n"
                                          "    selection-color: #F2F2F2; /* 选中文本的颜色 */\n"
                                          "    font-family: \"Microsoft YaHei\"; /* 文本字体族 */\n"
                                          "    font-size: 10pt; /* 文本字体大小 */\n"
                                          "}\n"
                                          "QLineEdit:hover { /* 鼠标悬浮在QLineEdit时的状态 */\n"
                                          "    border: 1px solid #298DFF;\n"
                                          "    border-radius: 3px;\n"
                                          "    background-color: #F2F2F2;\n"
                                          "    color: #298DFF;\n"
                                          "    selection-background-color: #298DFF;\n"
                                          "    selection-color: #F2F2F2;\n"
                                          "}")
        self.lineEdit_phone.setObjectName("lineEdit_phone")
        self.horizontalLayout_44.addWidget(self.lineEdit_phone)
        self.verticalLayout_37.addWidget(self.frame_80)
        self.frame_81 = QtWidgets.QFrame(self.frame_79)
        self.frame_81.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_81.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_81.setObjectName("frame_81")
        self.horizontalLayout_45 = QtWidgets.QHBoxLayout(self.frame_81)
        self.horizontalLayout_45.setObjectName("horizontalLayout_45")
        self.label_8 = QtWidgets.QLabel(self.frame_81)
        self.label_8.setMaximumSize(QtCore.QSize(30, 30))
        self.label_8.setText("")
        self.label_8.setPixmap(QtGui.QPixmap(":/imgs/qrc/imgs/密码.png"))
        self.label_8.setScaledContents(True)
        self.label_8.setObjectName("label_8")
        self.horizontalLayout_45.addWidget(self.label_8)
        self.lineEdit_password = QtWidgets.QLineEdit(self.frame_81)
        self.lineEdit_password.setStyleSheet("QDialog {\n"
                                             "    background: #D6DBE9;\n"
                                             "}\n"
                                             "\n"
                                             "QLineEdit {\n"
                                             "    border: 1px solid #A0A0A0; /* 边框宽度为1px,颜色为#A0A0A0 */\n"
                                             "    border-radius: 3px; /* 边框圆角 */\n"
                                             "    padding-left: 5px; /* 文本距离左边界有5px */\n"
                                             "    background-color: #F2F2F2; /* 背景颜色 */\n"
                                             "    color: #A0A0A0; /* 文本颜色 */\n"
                                             "    selection-background-color: #A0A0A0; /* 选中文本的背景颜色 */\n"
                                             "    selection-color: #F2F2F2; /* 选中文本的颜色 */\n"
                                             "    font-family: \"Microsoft YaHei\"; /* 文本字体族 */\n"
                                             "    font-size: 10pt; /* 文本字体大小 */\n"
                                             "}\n"
                                             "QLineEdit:hover { /* 鼠标悬浮在QLineEdit时的状态 */\n"
                                             "    border: 1px solid #298DFF;\n"
                                             "    border-radius: 3px;\n"
                                             "    background-color: #F2F2F2;\n"
                                             "    color: #298DFF;\n"
                                             "    selection-background-color: #298DFF;\n"
                                             "    selection-color: #F2F2F2;\n"
                                             "}\n"
                                             "QLineEdit[echoMode=\"2\"] { /* QLineEdit有输入掩码时的状态 */\n"
                                             "    lineedit-password-character: 9679;\n"
                                             "    lineedit-password-mask-delay: 2000;\n"
                                             "}")
        self.lineEdit_password.setObjectName("lineEdit_password")
        self.horizontalLayout_45.addWidget(self.lineEdit_password)
        self.verticalLayout_37.addWidget(self.frame_81)
        self.frame_82 = QtWidgets.QFrame(self.frame_79)
        self.frame_82.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_82.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_82.setObjectName("frame_82")
        self.verticalLayout_38 = QtWidgets.QVBoxLayout(self.frame_82)
        self.verticalLayout_38.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_38.setSpacing(0)
        self.verticalLayout_38.setObjectName("verticalLayout_38")
        self.frame_89 = QtWidgets.QFrame(self.frame_82)
        self.frame_89.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_89.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_89.setObjectName("frame_89")
        self.horizontalLayout_48 = QtWidgets.QHBoxLayout(self.frame_89)
        self.horizontalLayout_48.setObjectName("horizontalLayout_48")
        spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_48.addItem(spacerItem1)
        self.checkBox_auto_login = QtWidgets.QCheckBox(self.frame_89)
        self.checkBox_auto_login.setStyleSheet("")
        self.checkBox_auto_login.setObjectName("checkBox_auto_login")
        self.horizontalLayout_48.addWidget(self.checkBox_auto_login)
        spacerItem2 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_48.addItem(spacerItem2)
        self.checkBox_remember_password = QtWidgets.QCheckBox(self.frame_89)
        self.checkBox_remember_password.setStyleSheet("")
        self.checkBox_remember_password.setObjectName("checkBox_remember_password")
        self.horizontalLayout_48.addWidget(self.checkBox_remember_password)
        spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_48.addItem(spacerItem3)
        self.btn_forget_password = QtWidgets.QPushButton(self.frame_89)
        self.btn_forget_password.setMinimumSize(QtCore.QSize(0, 40))
        self.btn_forget_password.setStyleSheet("\n"
                                               "QPushButton{\n"
                                               "    background-color: #F3F3F3;\n"
                                               "    border: none;\n"
                                               "    text-align: center;\n"
                                               "    color: #8a8a8a;\n"
                                               "    text-decoration: none;\n"
                                               "    border-radius: 10px;\n"
                                               "}\n"
                                               "QPushButton:hover{\n"
                                               "    background-color: #EAEAEA;\n"
                                               "}")
        self.btn_forget_password.setObjectName("btn_forget_password")
        self.horizontalLayout_48.addWidget(self.btn_forget_password)
        spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_48.addItem(spacerItem4)
        self.verticalLayout_38.addWidget(self.frame_89)
        self.label_tip = QtWidgets.QLabel(self.frame_82)
        self.label_tip.setMinimumSize(QtCore.QSize(0, 35))
        self.label_tip.setStyleSheet("* {\n"
                                     "    outline: none;\n"
                                     "}")
        self.label_tip.setText("")
        self.label_tip.setTextFormat(QtCore.Qt.AutoText)
        self.label_tip.setScaledContents(False)
        self.label_tip.setAlignment(QtCore.Qt.AlignCenter)
        self.label_tip.setObjectName("label_tip")
        self.verticalLayout_38.addWidget(self.label_tip)
        self.verticalLayout_37.addWidget(self.frame_82)
        self.frame_83 = QtWidgets.QFrame(self.frame_79)
        self.frame_83.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_83.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_83.setObjectName("frame_83")
        self.verticalLayout_39 = QtWidgets.QVBoxLayout(self.frame_83)
        self.verticalLayout_39.setContentsMargins(0, 0, 0, 0)
        self.verticalLayout_39.setSpacing(0)
        self.verticalLayout_39.setObjectName("verticalLayout_39")
        self.btn_login = QtWidgets.QPushButton(self.frame_83)
        self.btn_login.setMinimumSize(QtCore.QSize(70, 50))
        self.btn_login.setMaximumSize(QtCore.QSize(16777215, 16777215))
        self.btn_login.setStyleSheet("    QPushButton {\n"
                                     "        background-color: #12a182;\n"
                                     "        border: none;\n"
                                     "        color: white;\n"
                                     "        text-align: center;\n"
                                     "        text-decoration: none;\n"
                                     "        font-size: 16px;  /* 设置字体大小 */\n"
                                     "        font-family: Arial;  /* 设置字体样式 */\n"
                                     "        border-radius: 10px;\n"
                                     "    }\n"
                                     "    QPushButton:hover {\n"
                                     "        background-color: #b2bbbe;\n"
                                     "    }\n"
                                     "    QPushButton::icon {\n"
                                     "        margin-right: 10px;\n"
                                     "    }")
        self.btn_login.setObjectName("btn_login")
        self.verticalLayout_39.addWidget(self.btn_login)
        self.frame_107 = QtWidgets.QFrame(self.frame_83)
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
        sizePolicy.setHorizontalStretch(0)
        sizePolicy.setVerticalStretch(1)
        sizePolicy.setHeightForWidth(self.frame_107.sizePolicy().hasHeightForWidth())
        self.frame_107.setSizePolicy(sizePolicy)
        self.frame_107.setFrameShape(QtWidgets.QFrame.StyledPanel)
        self.frame_107.setFrameShadow(QtWidgets.QFrame.Raised)
        self.frame_107.setObjectName("frame_107")
        self.horizontalLayout_52 = QtWidgets.QHBoxLayout(self.frame_107)
        self.horizontalLayout_52.setContentsMargins(0, 10, 0, 0)
        self.horizontalLayout_52.setSpacing(0)
        self.horizontalLayout_52.setObjectName("horizontalLayout_52")
        self.btn_register_login = QtWidgets.QPushButton(self.frame_107)
        self.btn_register_login.setMinimumSize(QtCore.QSize(70, 50))
        self.btn_register_login.setMaximumSize(QtCore.QSize(16777215, 16777215))
        self.btn_register_login.setStyleSheet("QPushButton{\n"
                                              "    background-color: #F3F3F3;\n"
                                              "    border: none;\n"
                                              "    text-align: center;\n"
                                              "    text-decoration: none;\n"
                                              "    border-radius: 10px;\n"
                                              "}\n"
                                              "QPushButton:hover{\n"
                                              "    background-color: #EAEAEA;\n"
                                              "}")
        self.btn_register_login.setObjectName("btn_register_login")
        self.horizontalLayout_52.addWidget(self.btn_register_login)
        spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout_52.addItem(spacerItem5)
        self.verticalLayout_39.addWidget(self.frame_107)
        self.verticalLayout_37.addWidget(self.frame_83)
        spacerItem6 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
        self.verticalLayout_37.addItem(spacerItem6)
        self.gridLayout_25.addWidget(self.frame_79, 1, 0, 1, 1)
        self.horizontalLayout.addWidget(self.frame_9)
        spacerItem7 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem7)

        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label_6.setText(_translate("Form",
                                        "<html><head/><body><p align=\"center\"><span style=\" font-size:26pt; font-weight:600; color:#346c9c;\">森林背词</span></p><p align=\"center\"><span style=\" font-size:26pt; font-weight:600; color:#346c9c;\">登录/注册</span></p></body></html>"))
        self.checkBox_auto_login.setText(_translate("Form", "自动登录"))
        self.checkBox_remember_password.setText(_translate("Form", "记住密码"))
        self.btn_forget_password.setText(_translate("Form", "忘记密码"))
        self.btn_login.setText(_translate("Form", "登录"))
        self.btn_register_login.setText(_translate("Form", "注册账号"))
        

再创建主程序,名字为【焦点设置.py】

import sys

from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit
from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPainter, QPixmap, QColor, QIcon

from ui import Ui_Form


class QmyWidget(QWidget):
    def __init__(self):
        super().__init__()  # 调用父类构造函数,创建窗体
        self.ui = Ui_Form()  # 创建UI对象
        self.ui.setupUi(self)  # 构造UI界面
        self.setWindowTitle("森林背词")  # 设置程序窗口名称
        self.setMinimumSize(100, 100)  # 设置窗口最小尺寸(即可以最大化,也可以保证背景图初始化比例)
        # 窗口居中
        rect = QApplication.desktop().availableGeometry()
        w, h = rect.width(), rect.height()
        self.move(w // 2 - self.width() // 2, h // 2 - self.height() // 2)

        self.ui.lineEdit_phone.setPlaceholderText("请输入11位数字(仅支持大陆手机号)")
        self.ui.lineEdit_phone.setClearButtonEnabled(True)  # 删除提示
        self.ui.lineEdit_password.setPlaceholderText("密码不少于8个字符")
        self.ui.lineEdit_password.setEchoMode(QLineEdit.Password)  # 隐藏密码
        self.ui.lineEdit_password.setClearButtonEnabled(True)  # 删除提示
		
		# 删除焦点
        self.ui.checkBox_auto_login.setFocusPolicy(Qt.NoFocus)
        self.ui.checkBox_remember_password.setFocusPolicy(Qt.NoFocus)
        self.ui.btn_forget_password.setFocusPolicy(Qt.NoFocus)
        self.ui.btn_login.setFocusPolicy(Qt.NoFocus)
        self.ui.btn_register_login.setFocusPolicy(Qt.NoFocus)

if __name__ == "__main__":
    app = QApplication(sys.argv)
    window = QmyWidget()
    window.show()
    sys.exit(app.exec())

小结

去除虚线框方法一: setFocusPolicy(Qt.NoFocus)
去除虚线框方法二(复选框暂无法去除):PyQt5 去除选中虚线框(2)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PyQt5中,标签格栅布局默认不支持设置行之间的虚线。但是,可以通过创建自定义的布局并重写其绘制函数来实现这一功能。具体实现方式如下: 1. 创建自定义的布局类,并继承QGridLayout。 2. 重写该布局类的绘制函数paintEvent()。 3. 在paintEvent()函数中,先调用父类的绘制函数,再在每行之间绘制虚线。 下面是一个示例代码,实现了在标签格栅布局中每行之间绘制虚线的功能: ``` import sys from PyQt5.QtWidgets import QApplication, QWidget, QGridLayout from PyQt5.QtGui import QPainter, QPen from PyQt5.QtCore import Qt class CustomGridLayout(QGridLayout): def paintEvent(self, event): super().paintEvent(event) painter = QPainter(self) painter.setPen(QPen(Qt.DashLine)) for i in range(self.rowCount()-1): y = self.rowMinimumHeight(i) + self.getContentsMargins()[1] + \ sum([self.verticalSpacing() for j in range(i)]) painter.drawLine(0, y, self.width(), y) class Example(QWidget): def __init__(self): super().__init__() grid = CustomGridLayout() self.setLayout(grid) for i in range(4): for j in range(4): grid.addWidget(QWidget(), i, j) self.setGeometry(300, 300, 300, 200) self.show() if __name__ == '__main__': app = QApplication(sys.argv) ex = Example() sys.exit(app.exec_()) ``` 在该示例中,我们创建了一个名为CustomGridLayout的自定义布局类,并重写了其paintEvent()函数。在paintEvent()函数中,我们首先调用了父类的paintEvent()函数,以确保布局本身正常绘制。然后,我们使用QPainter对象在每行之间绘制虚线。 在Example类中,我们将自定义布局类应用于QWidget,并创建了一个4x4的网格布局。运行代码后,我们可以看到在标签格栅布局中每行之间都绘制了虚线

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值