PyQt5 – 未选中状态下被按下的单选按钮的背景图片

  • Post category:Python

PyQt5是一个用于创建GUI应用程序的Python模块。在PyQt5中,可以使用QButton控件来创建单选按钮,并且可以选择自定义其外观,其中包括未选中状态下被按下的单选按钮的背景图片。下面是如何实现这个功能的完整使用攻略:

设计UI界面

首先,需要在Qt Designer或类似的工具中设计UI界面,包括QButton按钮。可以选择QButton控件并在其属性编辑器中设置“radio”选项来将其设置为单选按钮。还需要为该按钮设置文本和大小适当的字体等其他属性。

加载UI文件

设计UI界面后,需要在Python代码中加载UI文件。可以使用QMainWindow或其他窗口容器,按照以下方法加载UI文件:

from PyQt5 import QtWidgets, uic

class MyWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('my_ui.ui', self)

这里使用了uic.loadUi()方法来从文件“my_ui.ui”中加载UI。在现有窗口中加载UI,只要将self传递给loadUi()即可。

按钮自定义样式

接下来,要对单选按钮的样式进行自定义。可以通过CSS样式表来为按钮设置不同的样式。

首先,需要使用以下方法使应用程序接受CSS样式表:

app = QtWidgets.QApplication([])
app.setStyleSheet(open('stylesheet.css').read())

这将使应用程序使用样式表中的样式。

下面是一个stylesheet.css的例子,可以设置未选中状态下被按下的单选按钮的背景图片。

QRadioButton::indicator:checked {
    background-image: url(checked.png);
}
QRadioButton::indicator:unchecked:pressed {
    background-image: url(unchecked_pressed.png);
}

以上代码使未选中状态下被按下的单选按钮的背景图片变为unchecked_pressed.png。在stylesheet.css中可以使用任何合法的CSS样式。

示例

下面是一个示例,演示如何设置未选中状态下被按下的单选按钮的背景图片。假设我们有一个名为“sunday”的单选按钮:

import sys
from PyQt5 import QtWidgets, uic

class MyWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('my_ui.ui', self)
        self.setStyleSheet(open('stylesheet.css').read())
        self.sunday.toggled.connect(self.buttonClicked)

    def buttonClicked(self):
        if self.sunday.isChecked():
            print('Sunday is selected')
        else:
            print('Sunday is unselected')

app = QtWidgets.QApplication(sys.argv)
win = MyWindow()
win.show()
sys.exit(app.exec_())

在此示例中,如果单选按钮“sunday”被选择,则buttonClicked()方法将打印’Sunday is selected’,否则将打印’Sunday is unselected’。这里使用的样式表称为“stylesheet.css”。

示例的my_ui.ui文件如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <widget class="QWidget" name="centralwidget">
   <widget class="QRadioButton" name="sunday">
    <property name="geometry">
     <rect>
      <x>70</x>
      <y>70</y>
      <width>100</width>
      <height>20</height>
     </rect>
    </property>
    <property name="text">
     <string>Sunday</string>
    </property>
   </widget>
  </widget>
 </widget>
 <resources/>
 <connections/>
</ui>

以上是一个简单的示例,说明了如何使用CSS样式表来设置未选中状态下被按下的单选按钮的背景图片。您可以使用类似的方法为应用程序中的其他QButton设置自定义样式。