更改 Qpushbutton 样式表图像时延迟 2 秒
Posted
技术标签:
【中文标题】更改 Qpushbutton 样式表图像时延迟 2 秒【英文标题】:2-second delay when changing Qpushbutton stylesheet image 【发布时间】:2021-05-01 23:27:32 【问题描述】:当点击按钮时,我改变了图像,就好像它被选中了......
为了做出这个改变,我让每个人都使用默认图像,只改变按下的按钮,但这 3 行会导致程序延迟 2 秒
main_app.ui.btn_tela_atividade_clique_na_imagem.setStyleSheet(style + "clique na figura off.png);")
main_app.ui.btn_tela_atividade_clique_na_letra.setStyleSheet(style + "clique na letra que falta off.png);")
main_app.ui.btn_tela_atividade_digt_nome_imagem.setStyleSheet(style + "digite o nome da figura off.png);")
这是函数的调用方式
main.py
def atv_escolhida(self, nome_atividade):
self.atividades.atividade_escolhida_fun(self, nome_atividade)
atividades.py
def atividade_escolhida_fun(self, main_app, nome_atividade):
# main_app = self da classe main.py
# self.set_atividade_escolhida(nome_atividade)
self.atividade_escolhida = nome_atividade
style = """
QPushButton:hover
border: 2px solid rgb(0, 0, 0);
QPushButton
border-image: url(:/atvimg/app_imagens/"""
# TODO verificar isso
main_app.ui.btn_tela_atividade_clique_na_imagem.setStyleSheet(style + "clique na figura off.png);")
main_app.ui.btn_tela_atividade_clique_na_letra.setStyleSheet(style + "clique na letra que falta off.png);")
main_app.ui.btn_tela_atividade_digt_nome_imagem.setStyleSheet(style + "digite o nome da figura off.png);")
if(nome_atividade == "tela_atividade_digt_nome_imagem"):
main_app.ui.btn_tela_atividade_digt_nome_imagem.setStyleSheet(style + "digite o nome da figura on.png);")
elif(nome_atividade == "tela_atividade_clique_na_imagem"):
main_app.ui.btn_tela_atividade_clique_na_imagem.setStyleSheet(style + "clique na figura on.png);")
elif(nome_atividade == "tela_atividade_clique_na_letra"):
main_app.ui.btn_tela_atividade_clique_na_letra.setStyleSheet(style + "clique na letra que falta on.png);")
【问题讨论】:
您的问题不清楚,请解释清楚。并提供minimal reproducible example 【参考方案1】:根据QObject
的动态属性值,您可以使用具有两个(或更多)特定小部件外观的固定样式表,而不是重新分配样式表。使用widget.setProperty(propName, propValue)
更改动态属性并调用style.unpolish(widget)
和style.polish(widget)
。这可以解决延迟问题。我使用background-color
代替图片来展示概念。请自行采纳给border-image
。
from PyQt5 import QtWidgets
class View(QtWidgets.QWidget):
def __init__(self, parent = None):
super().__init__(parent)
layout = QtWidgets.QVBoxLayout()
buttons = []
for i in range(3):
name = "button".format(i+1)
button = QtWidgets.QPushButton()
button.setObjectName(name)
layout.addWidget(button)
button.setProperty("selected", False)
button.setSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
button.clicked.connect(lambda on, i=i: self.setSelected(i))
buttons.append(button)
self._buttons = buttons
self.setLayout(layout)
self.setStyleSheet("""
QPushButton:hover border: 2px solid rgb(0, 0, 0);
#button1[selected="false"] background-color: #cccccc;
#button2[selected="false"] background-color: #cccccc;
#button3[selected="false"] background-color: #cccccc;
#button1[selected="true"] background-color: #ccccff;
#button2[selected="true"] background-color: #ccffcc;
#button3[selected="true"] background-color: #ffcccc;
""")
def setSelected(self, i):
style = self.style()
for j, button in enumerate(self._buttons):
button.setProperty("selected", i == j)
style.unpolish(button)
style.polish(button)
if __name__ == "__main__":
app = QtWidgets.QApplication([])
view = View()
view.show()
app.exec()
【讨论】:
以上是关于更改 Qpushbutton 样式表图像时延迟 2 秒的主要内容,如果未能解决你的问题,请参考以下文章