PyQt5 – 当未选中的单选按钮被按下时的背景图片

  • Post category:Python

在PyQt5中,可以通过QButtonGroup控件来实现单选按钮的互斥选择。当我们设置了一个单选按钮组,并且设置了其中某一个单选按钮的未选中状态的背景图片,那么当该单选按钮被按下并处于未选中状态时,该背景图片会显示出来。

下面是实现该功能的完整使用攻略:

1. 创建单选按钮组

首先,我们需要通过QButtonGroup来创建一个单选按钮组,代码示例如下:

import PyQt5.QtWidgets as QtWidgets

app = QtWidgets.QApplication([])

button_group = QtWidgets.QButtonGroup()

2. 创建单选按钮并添加到单选按钮组

接着,我们需要创建几个单选按钮,并设置它们的样式和背景图片。然后,将它们添加到之前创建的单选按钮组中,示例代码如下:

button1 = QtWidgets.QRadioButton('Button 1')
button1.setStyleSheet('QRadioButton{background-color: white;}')
button1.setStyleSheet('QRadioButton::indicator::unchecked {image: url(images/unchecked.png);}')
button1.setStyleSheet('QRadioButton::indicator::checked {image: url(images/checked.png);}')

button2 = QtWidgets.QRadioButton('Button 2')
button2.setStyleSheet('QRadioButton{background-color: white;}')
button2.setStyleSheet('QRadioButton::indicator::unchecked {image: url(images/unchecked.png);}')
button2.setStyleSheet('QRadioButton::indicator::checked {image: url(images/checked.png);}')

button_group.addButton(button1)
button_group.addButton(button2)

3. 设置单选按钮的大小和位置

在将单选按钮添加到单选按钮组中之后,需要设置它们的大小和位置。这可以通过调用单选按钮的resize()和move()方法来实现,例如:

button1.resize(100, 30)
button1.move(50, 50)

button2.resize(100, 30)
button2.move(50, 100)

4. 显示窗口并运行程序

最后,将所有的单选按钮添加到窗口中,并显示窗口。需要注意的是,整个程序需要通过app.exec_()方法来运行。完整的代码如下:

import PyQt5.QtWidgets as QtWidgets

app = QtWidgets.QApplication([])

button_group = QtWidgets.QButtonGroup()

button1 = QtWidgets.QRadioButton('Button 1')
button1.setStyleSheet('QRadioButton{background-color: white;}')
button1.setStyleSheet('QRadioButton::indicator::unchecked {image: url(images/unchecked.png);}')
button1.setStyleSheet('QRadioButton::indicator::checked {image: url(images/checked.png);}')
button_group.addButton(button1)
button1.resize(100, 30)
button1.move(50, 50)

button2 = QtWidgets.QRadioButton('Button 2')
button2.setStyleSheet('QRadioButton{background-color: white;}')
button2.setStyleSheet('QRadioButton::indicator::unchecked {image: url(images/unchecked.png);}')
button2.setStyleSheet('QRadioButton::indicator::checked {image: url(images/checked.png);}')
button_group.addButton(button2)
button2.resize(100, 30)
button2.move(50, 100)

window = QtWidgets.QWidget()
window.resize(200, 200)
window.show()

app.exec_()

以上便是实现PyQt5中单选按钮未选中状态背景图片的功能的完整使用攻略。接下来,我们看看两个使用示例:

示例1:改变单选按钮组中未选中状态背景图片

在该示例中,我们创建一个单选按钮组,并将其中一个单选按钮的未选中状态背景图片改为红色。示例代码如下:

import PyQt5.QtWidgets as QtWidgets

app = QtWidgets.QApplication([])

button_group = QtWidgets.QButtonGroup()

button1 = QtWidgets.QRadioButton('Button 1')
button1.setStyleSheet('QRadioButton{background-color: white;}')
button1.setStyleSheet('QRadioButton::indicator::unchecked {image: url(images/unchecked.png);}')
button1.setStyleSheet('QRadioButton::indicator::unchecked:hover {background-color: red; image: url(images/unchecked.png);}')
button1.setStyleSheet('QRadioButton::indicator::checked {image: url(images/checked.png);}')
button_group.addButton(button1)
button1.resize(100, 30)
button1.move(50, 50)

button2 = QtWidgets.QRadioButton('Button 2')
button2.setStyleSheet('QRadioButton{background-color: white;}')
button2.setStyleSheet('QRadioButton::indicator::unchecked {image: url(images/unchecked.png);}')
button2.setStyleSheet('QRadioButton::indicator::checked {image: url(images/checked.png);}')
button_group.addButton(button2)
button2.resize(100, 30)
button2.move(50, 100)

window = QtWidgets.QWidget()
window.resize(200, 200)
window.show()

app.exec_()

在该示例中,我们修改了button1的样式表,将其未选中状态下的背景颜色改为红色并保持原始背景图片。可以看到,当鼠标悬停在该单选按钮上时,它的未选中状态背景颜色变为红色,而背景图片并未发生改变。

示例2:获取用户选择的单选按钮

在该示例中,我们创建一个按钮,该按钮的点击事件会输出用户当前选择的单选按钮的文本内容。示例代码如下:

import PyQt5.QtWidgets as QtWidgets

app = QtWidgets.QApplication([])

button_group = QtWidgets.QButtonGroup()

button1 = QtWidgets.QRadioButton('Button 1')
button1.setStyleSheet('QRadioButton{background-color: white;}')
button1.setStyleSheet('QRadioButton::indicator::unchecked {image: url(images/unchecked.png);}')
button1.setStyleSheet('QRadioButton::indicator::checked {image: url(images/checked.png);}')
button_group.addButton(button1)
button1.resize(100, 30)
button1.move(50, 50)

button2 = QtWidgets.QRadioButton('Button 2')
button2.setStyleSheet('QRadioButton{background-color: white;}')
button2.setStyleSheet('QRadioButton::indicator::unchecked {image: url(images/unchecked.png);}')
button2.setStyleSheet('QRadioButton::indicator::checked {image: url(images/checked.png);}')
button_group.addButton(button2)
button2.resize(100, 30)
button2.move(50, 100)

result_button = QtWidgets.QPushButton('Get Result')
result_button.resize(100, 30)
result_button.move(50, 150)

def print_result():
    checked_button = button_group.checkedButton()
    if checked_button is not None:
        print(checked_button.text())

result_button.clicked.connect(print_result)

window = QtWidgets.QWidget()
window.resize(200, 200)
window.show()

app.exec_()

在该示例中,我们创建了一个按钮result_button,并将其点击事件与print_result()函数关联。该函数通过button_group.checkedButton()方法获取当前被选中的单选按钮,并将其文本内容输出到控制台上。可以看到,当用户选择了Button 1时,单击result_button按钮后,输出的文本内容即是Button 1。