概要
在开发的软件中,如果想只实现通过键盘上的 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)