PyQt5组合框 当鼠标悬停在列表视图上时不同的边框大小

PyQt5的组合框(QComboBox)提供了一种方便的方式,在单个控件中提供一个下拉列表和一个可编辑的文本字段。当鼠标悬停在下拉列表视图的项目上时,我们可能希望为此项目设置不同的边框大小。以下是PyQt5组合框设置鼠标悬停时列表视图边框大小的详细攻略:

步骤1:导入必要的库

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QComboBox, QListView, QHBoxLayout, QWidget

步骤2:创建自定义子类

我们要为 QComboBox 和 QListView 创建自定义子类来实现此特性。在 QListView 子类中实现 mouseEnter 和 leaveEvent 事件,并在其中分别更新样式表。

class Combo(QComboBox):
    def __init__(self):
        super().__init__()
        self.view()  # 调用自定义的 view() 函数

    def view(self):
        self.popup = self.view()       # 获取列表视图
        self.popup.objectName = 'Popup'
        self.popup.setStyleSheet('QListView#Popup {border: 1px solid lightGray;border-radius: 3px;padding: 1px;background: white;outline: none;selection-background-color: blue;}')

    def mouseEnterLeaveEvent(self, event):
        if event.type() == event.MouseEnter:
            obj = self.sender()
            obj.setStyleSheet('QListView#Popup {border: 2px solid blue;border-radius: 3px;padding: 1px;background: white;outline: none;selection-background-color: blue;}')
        elif event.type() == event.MouseLeave:
            obj.setStyleSheet('QListView#Popup {border: 1px solid lightGray;border-radius: 3px;padding: 1px;background: white;outline: none;selection-background-color: blue;}')

步骤3:创建combobox和test布局

在我们的示例中,我们使用 QHBoxLayout 和 QWidget 创建一个包含两个列表视图的组合框和一个单独的测试框。

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        layout = QHBoxLayout()  # 创建水平排列的布局
        w = QWidget(self)       # 创建 QWidget 对象
        self.setCentralWidget(w) # 设置 QWidget 为中央部件

        cbox1 = Combo()         # 创建自定义的 QComboBox1 对象
        cbox2 = Combo()         # 创建自定义的 QComboBox2 对象
        layout.addWidget(cbox1) # 添加 cbox1
        layout.addWidget(cbox2) # 添加 cbox2

        combo = QComboBox()     # 创建一个普通的 QComboBox 对象
        tedit = QLineEdit()     # 创建一个普通的 QLineEdit 对象

        combo.addItem('apple')  # 添加标签
        combo.addItem('banana')
        combo.addItem('cherry')
        combo.addItem('date')

        layout.addWidget(combo) # 添加 combo
        layout.addWidget(tedit) # 添加 tedit

        w.setLayout(layout)     # 设置父QWidget的布局

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QComboBox')
        self.show()

步骤4:运行程序

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

以下是两个示例代码,展示了以上攻略的效果:

示例1:

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QComboBox, QListView, QHBoxLayout, QWidget

class Combo(QComboBox):
    def __init__(self):
        super().__init__()
        self.view()  # 调用自定义的 view() 函数

    def view(self):
        self.popup = self.view()       # 获取列表视图
        self.popup.objectName = 'Popup'
        self.popup.setStyleSheet('QListView#Popup {border: 1px solid lightGray;border-radius: 3px;padding: 1px;background: white;outline: none;selection-background-color: blue;}')

    def mouseEnterLeaveEvent(self, event):
        if event.type() == event.MouseEnter:
            obj = self.sender()
            obj.setStyleSheet('QListView#Popup {border: 2px solid blue;border-radius: 3px;padding: 1px;background: white;outline: none;selection-background-color: blue;}')
        elif event.type() == event.MouseLeave:
            obj.setStyleSheet('QListView#Popup {border: 1px solid lightGray;border-radius: 3px;padding: 1px;background: white;outline: none;selection-background-color: blue;}')

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        layout = QHBoxLayout()  # 创建水平排列的布局
        w = QWidget(self)       # 创建 QWidget 对象
        self.setCentralWidget(w) # 设置 QWidget 为中央部件

        cbox1 = Combo()         # 创建自定义的 QComboBox1 对象
        cbox2 = Combo()         # 创建自定义的 QComboBox2 对象
        layout.addWidget(cbox1) # 添加 cbox1
        layout.addWidget(cbox2) # 添加 cbox2

        combo = QComboBox()     # 创建一个普通的 QComboBox 对象
        tedit = QLineEdit()     # 创建一个普通的 QLineEdit 对象

        combo.addItem('apple')  # 添加标签
        combo.addItem('banana')
        combo.addItem('cherry')
        combo.addItem('date')

        layout.addWidget(combo) # 添加 combo
        layout.addWidget(tedit) # 添加 tedit

        w.setLayout(layout)     # 设置父QWidget的布局

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QComboBox')
        self.show()

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

示例2:

from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QComboBox, QListView, QHBoxLayout, QWidget

class Combo(QComboBox):
    def __init__(self):
        super().__init__()
        self.view()  # 调用自定义的 view() 函数

    def view(self):
        self.popup = self.view()       # 获取列表视图
        self.popup.objectName = 'Popup'
        self.popup.setStyleSheet('QListView#Popup {border: 1px solid lightGray;border-radius: 3px;padding: 1px;background: white;outline: none;selection-background-color: blue;}')

    def mouseEnterLeaveEvent(self, event):
        if event.type() == event.MouseEnter:
            obj = self.sender()
            obj.setStyleSheet('QListView#Popup {border: 2px solid red;border-radius: 3px;padding: 1px;background: white;outline: none;selection-background-color: blue;}')
        elif event.type() == event.MouseLeave:
            obj.setStyleSheet('QListView#Popup {border: 1px solid lightGray;border-radius: 3px;padding: 1px;background: white;outline: none;selection-background-color: blue;}')

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        layout = QHBoxLayout()  # 创建水平排列的布局
        w = QWidget(self)       # 创建 QWidget 对象
        self.setCentralWidget(w) # 设置 QWidget 为中央部件

        cbox1 = Combo()         # 创建自定义的 QComboBox1 对象
        cbox2 = Combo()         # 创建自定义的 QComboBox2 对象
        layout.addWidget(cbox1) # 添加 cbox1
        layout.addWidget(cbox2) # 添加 cbox2

        combo = QComboBox()     # 创建一个普通的 QComboBox 对象
        tedit = QLineEdit()     # 创建一个普通的 QLineEdit 对象

        combo.addItem('apple')  # 添加标签
        combo.addItem('banana')
        combo.addItem('cherry')
        combo.addItem('date')

        layout.addWidget(combo) # 添加 combo
        layout.addWidget(tedit) # 添加 tedit

        w.setLayout(layout)     # 设置父QWidget的布局

        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QComboBox')
        self.show()

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

在以上两个示例中,我们创建了两个空的自定义 QComboBox,一个 Combo 类用于将特定的鼠标事件发射给我们的自定义 QComboBox,并用于代码组织,我们还通过自定义样式表为我们的 QListView 定义了边框。当鼠标进入列表视图时,我们通过样式表增加了边框大小。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:PyQt5组合框 当鼠标悬停在列表视图上时不同的边框大小 - Python技术站

(0)
上一篇 2023年5月11日
下一篇 2023年5月11日

相关文章

  • PyQt5 – 如何创建并获得Push Button的名称

    使用PyQt5创建PushButton并获得其名称是很常见的操作。以下是一些简单的步骤,可帮助实现该操作。 安装PyQt5库 使用以下命令安装PyQt5: pip install PyQt5 导入PyQt5库 在Python中导入PyQt5库如下: from PyQt5.QtWidgets import QApplication, QPushbutton, …

    python 2023年5月10日
    00
  • PyQt5可滚动标签–将工具提示设置到标签部分

    下面是详细讲解。 什么是PyQt5可滚动标签? PyQt5是Python中的一个GUI库,提供了丰富的控件供使用者使用。其中一个控件就是可滚动标签(QScrollArea),它可以让标签在空间不足时可以自动滚动,不会出现超出空间显示的问题。 如何将工具提示设置到标签部分 在PyQt5中,我们可以使用setToolTip函数将工具提示添加到控件上,在可滚动标签…

    python 2023年5月10日
    00
  • PyQt5 QCommandLinkButton – 设置自动重复的延迟时间

    PyQt5是一个Python对Qt库的封装,Qt是一个跨平台的GUI应用程序框架。PyQt5中提供了多个组件,其中之一是QCommandLinkButton组件,它是一个具有带有说明文字的命令链接按钮。 设置自动重复的延迟时间是QCommandLinkButton组件的一个功能,可以在用户按下并且不松手的情况下一直触发该按钮的事件。在此过程中,我们需要掌握以…

    python 2023年5月12日
    00
  • PyQt5 – 为未选中的复选框设置皮肤,当被按下时

    下面是PyQt5为未选中的复选框设置皮肤,当被按下时的详细使用攻略: 1. 安装PyQt5 在开始使用PyQt5之前,需要先安装PyQt5模块。通过pip工具可以很方便地进行安装: pip install PyQt5 2. 基本概念 在使用PyQt5此前,需要了解复选框(QCheckBox)控件的相关概念。复选框分为选中和未选中两种状态,可以通过setChe…

    python 2023年5月11日
    00
  • PyQt5 QSpinBox – 让旋转框解释文本

    下面详细讲解Python的“PyQt5 QSpinBox-让旋转框解释文本”的完整使用攻略。 PyQt5 QSpinBox 什么是PyQt5 QSpinBox? PyQt5 QSpinBox是一种旋转框,允许用户在定义范围内选择一个整数值,这对于许多应用程序和界面来说是非常有用的。 怎样使用PyQt5 QSpinBox? 要使用PyQt5 QSpinBox,…

    python 2023年5月12日
    00
  • PyQt5的QSpinBox – 根据用户指令删除它

    下面是关于Python PyQt5 QSpinBox的使用攻略: 一、QSpinBox简介 QSpinBox是PyQt5中的一个内置部件,它提供了一种方便的方法来选择整数值。它可以让用户通过向上或向下的箭头调整值。 二、根据用户指令删除QSpinBox 在PyQt5中,我们可以使用以下函数根据用户指令删除QSpinBox: def remove_spinbo…

    python 2023年5月12日
    00
  • PyQt5 QSpinBox – 检查是否有超限线

    PyQt5 QSpinBox是一种常见的界面组件,用于输入单个整数值。在使用QSpinBox时,我们需要检查输入的值是否在指定的范围内。本文将详细介绍如何使用PyQt5 QSpinBox来检查是否超限。 安装PyQt5 在使用PyQt5 QSpinBox之前,我们需要先安装PyQt5库。可以通过以下命令来安装: pip install PyQt5 创建QSp…

    python 2023年5月12日
    00
  • PyQt5 QDoubleSpinBox – 清洁文本

    Python的PyQt5库提供了许多UI控件,其中QDoubleSpinBox就是一个用于输入双精度浮点数的控件。清洁文本是指当用户输入非法内容时,控件能够自动将其清除并还原为上一次合法的输入内容。本文将详细讲解PyQt5的QDoubleSpinBox控件的使用方法,包括如何实现清洁文本功能。 创建QDoubleSpinBox控件 我们可以使用以下代码来创建…

    python 2023年5月12日
    00
合作推广
合作推广
分享本页
返回顶部