如何解决组合框和带有Enter键按下事件的单选按钮的焦点突出显示问题
每当按下 Enter 键而不是传统的 Tab 键时,我一直在为不同的小部件开发PyQt
焦点方法。
此外,我能够将焦点设置为我打算在 Enter 键事件上使用的小部件。但是,每当焦点放在QComboBox
或QRadioButton
上时,这两个小部件似乎就不会像QLineEdit
或QPushButton
小部件那样突出显示。
我知道我必须将焦点策略设置为StrongFocus
,并且我已经尝试了这种方法和其他几种方法,但是无法解决此问题。
此外,此行为运行良好,并且组合键或单选按钮似乎也可以通过 Tab 键突出显示。
请在下面找到我尝试过的代码,直到现在为止,并获取实际结果的快照。
from PyQt5 import QtCore
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
class Combo_and_Radio_Focus(QDialog):
def __init__(self):
super().__init__()
# setting title
self.setWindowTitle("Combo Box Focus Test")
# setting geometry
self.setGeometry(600,200,650,400)
# Some widgets for testing
self.le1 = QLineEdit(self)
self.le1.setFixedSize(100,25)
self.le2 = QLineEdit(self)
self.le2.setFixedSize(100,25)
self.cbo1 = QComboBox(self)
self.cbo1.setFixedSize(100,25)
self.cbo1.setStyleSheet('QComboBox {background-color: white;}')
self.cbo1.setFocusPolicy(Qt.StrongFocus)
self.cbo1.addItems(["","Item1","Item2","Item3"])
self.cbo2 = QComboBox(self)
self.cbo2.setFixedSize(100,25)
self.cbo2.setStyleSheet('QComboBox {background-color: white;}')
self.cbo2.setFocusPolicy(Qt.StrongFocus)
self.cbo2.addItems(["","Item3"])
self.RB1 = QRadioButton("1")
self.RB1.setChecked(True)
self.RB1.setFixedSize(100,20)
self.RB1.setFocusPolicy(Qt.StrongFocus)
self.RB2 = QRadioButton("2")
self.RB2.setFixedSize(100,20)
self.RB2.setFocusPolicy(Qt.StrongFocus)
self.vbl = QVBoxLayout()
self.vbl.addWidget(self.le1)
self.vbl.addWidget(self.le2)
self.vbl.addWidget(self.cbo1)
self.vbl.addWidget(self.cbo2)
self.vbl.addWidget(self.RB1)
self.vbl.addWidget(self.RB2)
self.setLayout(self.vbl)
# showing all the widgets
self.show()
def keyPressEvent(self,qKeyEvent):
if int(qKeyEvent.modifiers()) == QtCore.Qt.AltModifier:
qKeyEvent.ignore()
return
if qKeyEvent.key() == QtCore.Qt.Key_Return or qKeyEvent.key() == QtCore.Qt.Key_Enter:
QWidget.focusNextChild(self)
else:
super().keyPressEvent(qKeyEvent)
App = QApplication(sys.argv)
App.setStyle(QStyleFactory.create('Fusion'))
# create the instance of our Window
combo_and_Radio_Focus = Combo_and_Radio_Focus()
# start the app
sys.exit(App.exec())
LineEdit1_Highlighted below
下面的ComboBox1_Dont_Highlight
解决方法
当按下 Tab 进行焦点更改时,应用程序将在窗口中设置Qt.WA_KeyboardFocusChange
属性,QStyle将该属性用于绘制边框,但是由于这是并非如此,则必须直接设置该属性:
def keyPressEvent(self,qKeyEvent):
if qKeyEvent.modifiers() & QtCore.Qt.AltModifier:
qKeyEvent.ignore()
elif qKeyEvent.key() in (QtCore.Qt.Key_Return,QtCore.Qt.Key_Enter):
self.focusNextChild()
self.window().setAttribute(Qt.WA_KeyboardFocusChange)
else:
super().keyPressEvent(qKeyEvent)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。