📌  相关文章
📜  PyQt5 – 如何在鼠标悬停时将皮肤设置为选中的单选按钮(1)

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

PyQt5 – 如何在鼠标悬停时将皮肤设置为选中的单选按钮

在PyQt5中,我们可以很容易地使用QButton来创建单选按钮。在本篇文章中,我们将介绍如何在鼠标悬停时自动将皮肤设置为用户选中的单选按钮。

准备工作

在开始编写代码之前,我们需要安装PyQt5。可以在终端(Linux / Mac OS)或命令提示符(Windows)中使用以下命令:

pip install pyqt5

我们还需要使用Qt Designer来创建GUI。如果您还没有安装Qt Designer,可以使用以下命令进行安装:

sudo apt-get install qttools5-dev-tools

然后在终端中打开Qt Designer:

designer
创建GUI

在Qt Designer中创建GUI的步骤如下:

  1. 从左侧的工具栏中选择“Widget”并将其拖放到窗体中。
  2. 向窗体添加单选按钮并对其进行适当的布局。
  3. 添加一个标签并设置其文本为“Skin”。
  4. 添加一个按钮并设置其文本为“Apply”。
  5. 将QWidget的名称更改为“MainWindow”,将QLabel的名称更改为“lblSkin”,将QButton的名称更改为“btnApply”。

这是最终的GUI所应该如何显示的:

pyqt5-gui

编写代码

现在,我们可以在一个Python文件中编写代码,将所有GUI元素连接在一起。首先,我们需要导入必要的库:

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys

接下来,我们需要创建一个名为“MainWindow”的类,该类将继承自QMainWindow。我们还需要定义该类的构造函数,其中我们将初始化GUI元素。

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

    def initUI(self):
        self.setGeometry(100, 100, 300, 150)
        self.setWindowTitle('Skin Selector')

        self.btnApply = QPushButton(self)
        self.btnApply.setText('Apply')
        self.btnApply.setGeometry(110, 100, 80, 30)
        self.btnApply.clicked.connect(self.applySkin)

        self.rdbtn1 = QRadioButton(self)
        self.rdbtn1.setText('Skin 1')
        self.rdbtn1.setGeometry(50, 30, 100, 20)
        self.rdbtn1.setChecked(True)
        self.rdbtn1.mouseMoveEvent = self.radioButtonHover

        self.rdbtn2 = QRadioButton(self)
        self.rdbtn2.setText('Skin 2')
        self.rdbtn2.setGeometry(160, 30, 100, 20)
        self.rdbtn2.mouseMoveEvent = self.radioButtonHover

        self.lblSkin = QLabel(self)
        self.lblSkin.setText('Skin')
        self.lblSkin.setGeometry(30, 70, 40, 20)

        self.statusBar().showMessage('Ready')

在initUI()方法中,我们首先设置了窗口的几何形状和标题。然后,我们创建了一个名为btnApply的QPushButton。我们定义了按钮的文本,位置,大小以及单击事件的槽:applySkin()。

然后我们创建了rdbtn1和rdbtn2两个QRadioButton。我们定义了它们的位置,大小,文本,并使用setCheck(True)将rdbtn1设置为默认选中的选项。我们还将mouseMoveEvent绑定到了radioButtonHover()方法,以便当用户悬停在单选按钮上时自动更改皮肤。

最后,我们创建了一个QLabel,文本为“Skin”,用于标识单选组在做什么。我们还定义了状态栏消息,用于向用户显示应用程序的当前状态。

现在,我们需要实现applySkin()函数和radioButtonHover()函数:

    def applySkin(self):
        if self.rdbtn1.isChecked():
            self.setStyleSheet('background-color: #292f38')
        else:
            self.setStyleSheet('background-color: #DF5F5F')
        self.statusBar().showMessage('Skin Applied')

    def radioButtonHover(self, event):
        if event.buttons() == Qt.NoButton:
            if self.rdbtn1.rect().contains(event.pos()):
                self.setStyleSheet('background-color: #C67171')
            else:
                self.setStyleSheet('background-color: #384458')

在applySkin()方法中,我们首先检查rdbtn1是否被选中。如果是,则设置窗口的背景色为浅灰色(#292f38);否则,设置背景色为鲜艳的红色(#DF5F5F)。无论哪种情况,我们都使用statusBar()。showMessage()显示状态栏消息。注意,如果用户在单选按钮上悬停,则该消息也将被覆盖。

在radioButtonHover()函数中,我们首先检查鼠标事件中是否按下了任何按钮。如果没有,则进一步检查鼠标事件是否在rdbtn1上。如果是,则将窗口设置为浅红色(#C67171);否则,将窗口设置为深灰色(#384458)。

运行程序

最后,我们在程序的末尾添加以下代码,以便运行窗口应用程序:

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

确保将程序命名为main.py,并在终端中运行以下命令:

python main.py

现在,您将看到窗口应用程序,如下所示:

pyqt5-skin-selecter

当您单击应用按钮时,窗口的背景颜色将更改为所选单选按钮的颜色。此外,当您悬停在单选按钮上时,窗口的颜色将自动更改。