我有一个QWidget
,里面有一个HBoxLayout
。在此HBoxLayout
中有几个按钮和一个QLineEdit
对象。我想使用样式表,使QLineEdit
聚焦时QWidget
呈现蓝色轮廓/边框。
我尝试过:
QSearchWidgetStyleSheet = QWidget {background-color: rgb(27,27,27); border: none; margin: 0px; border-radius: 3px; padding: 0px;}
QLineEdit:focus {border: 3px solid rgb(100,100,100;}
[我的QLineEdit
样式表为:
QLineEditStyleSheet = QLineEdit {color: white; background-color: rgb(255,255,255,0); border: none; height: 32px; border-radius: 3px; margin-left: 3px; margin-right: 3px;}
但是,当QWidget
聚焦时,对QLineEdit
没有影响。当QWidget
聚焦时,为了使QLineEdit
获得边框/轮廓,我应该改变什么?
QLineEdit:focus
将样式应用于QLineEdit,而不是QWidget。虽然子窗口小部件可以占用其父窗口小部件的样式表,但我认为它在常规样式表语法中没有其他作用。相反,您可以只考虑QWidget来描述场景...当它没有聚焦时,它应该有边框,而没有聚焦时,它应该没有边框。
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
class Widget(QWidget):
def __init__(self):
super().__init__()
hbox = QHBoxLayout(self)
hbox.addWidget(QPushButton('Push'))
hbox.addWidget(QLineEdit())
self.setAttribute(Qt.WA_StyledBackground, True)
self.setStyleSheet('''
Widget {
border: 3px solid blue;
}
Widget:focus {
border: none;
}''')
def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.setFocus()
class Template(QWidget):
def __init__(self):
super().__init__()
grid = QGridLayout(self)
grid.addWidget(Widget(), 0, 0)
self.resize(300, 300)
if __name__ == '__main__':
app = QApplication(sys.argv)
gui = Template()
gui.show()
sys.exit(app.exec_())
当然,如果您愿意使用其他方法,例如信号和插槽,则可以更精确地实现该功能。