📌  相关文章
📜  PyQt5 ComboBox – 可编辑和鼠标悬停时不同的边框大小(1)

📅  最后修改于: 2023-12-03 15:18:47.420000             🧑  作者: Mango

PyQt5 ComboBox – 可编辑和鼠标悬停时不同的边框大小

在 PyQt5 中,ComboBox 是一个常用的界面控件。ComboBox 可以被设置为可编辑和不可编辑状态,另外,当鼠标悬停在 ComboBox 上时,可以设置不同的边框大小。

可编辑和不可编辑状态

要设置 ComboBox 的可编辑和不可编辑状态,需要使用 setEditable() 方法。将方法的参数设置为 True 表示可编辑,设置为 False 表示不可编辑。

comboBox.setEditable(True)   # 设置为可编辑状态
comboBox.setEditable(False)  # 设置为不可编辑状态
鼠标悬停时不同的边框大小

要设置鼠标悬停时 ComboBox 的边框大小,需要重写 QComboBox.enterEvent()QComboBox.leaveEvent() 事件处理方法。

class ComboBox(QComboBox):
    
    def __init__(self, parent=None):
        super(ComboBox, self).__init__(parent)
        
    def enterEvent(self, event):
        self.setStyleSheet('border: 2px solid blue')  # 设置鼠标悬停时的边框大小
        
    def leaveEvent(self, event):
        self.setStyleSheet('border: 1px solid grey')  # 恢复原来的边框大小

enterEvent() 方法中,将 ComboBox 的边框大小设置为 2px,颜色设置为 blue。在 leaveEvent() 方法中,将边框大小设置为 1px,颜色设置为 grey

完整示例代码
from PyQt5.QtWidgets import QMainWindow, QApplication, QComboBox
import sys


class ComboBox(QComboBox):
    
    def __init__(self, parent=None):
        super(ComboBox, self).__init__(parent)
        
    def enterEvent(self, event):
        self.setStyleSheet('border: 2px solid blue')  # 设置鼠标悬停时的边框大小
        
    def leaveEvent(self, event):
        self.setStyleSheet('border: 1px solid grey')  # 恢复原来的边框大小


class MainWindow(QMainWindow):
    
    def __init__(self):
        super().__init__()
        
        self.initUI()
        
    def initUI(self):
        
        comboBox = ComboBox(self)
        comboBox.setGeometry(50, 50, 150, 30)
        comboBox.addItem('Item 1')
        comboBox.addItem('Item 2')
        comboBox.addItem('Item 3')
        
        self.setWindowTitle('PyQt5 ComboBox')
        self.setGeometry(100, 100, 300, 300)
        self.show()


if __name__ == '__main__':
    app = QApplication(sys.argv)
    mainWindow = MainWindow()
    sys.exit(app.exec_())

在该代码中,我们重写了 ComboBox 类,实现了鼠标悬停时不同的边框大小。在 MainWindow 类的 initUI() 方法中,创建了 ComboBox。在 main() 函数中,启动了应用程序,打开了窗口。