Проблема с зависанием в PyQt - PullRequest
4 голосов
/ 22 февраля 2012

Я хочу сделать парение. Я видел пример, а затем написал скрипт, который будет использоваться, как я сделал программу. Я сталкиваюсь с одной проблемой, которая возникает только при наведении мышки на левый угол кнопки. Я хочу, чтобы это случилось со всеми кнопками, и если я наведу курсор на кнопку, она должна измениться.

Вот мой код:

from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import pyqtSignal
import os,sys

class HoverButton(QtGui.QToolButton):
    def enterEvent(self,event):
        print("Enter")
        button.setStyleSheet("background-color:#45b545;")

    def leaveEvent(self,event):
        button.setStyleSheet("background-color:yellow;")
        print("Leave")

app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
button = QtGui.QToolButton(widget)
button.setMouseTracking(True)
buttonss =  HoverButton(button)
button.setIconSize(QtCore.QSize(200,200))
widget.show()
sys.exit(app.exec_())

Ответы [ 3 ]

9 голосов
/ 24 февраля 2012

Это то, что вы ищете

from PyQt4 import QtGui, QtCore
from PyQt4.QtCore import pyqtSignal
import os,sys


class Main(QtGui.QWidget):

    def __init__(self, parent=None):
        super(Main, self).__init__(parent)

        layout = QtGui.QVBoxLayout(self) # layout of main widget

        button =  HoverButton(self) 
        button.setIconSize(QtCore.QSize(200,200))

        layout.addWidget(button) # set your button to the widgets layout
                                 # this will size the button nicely


class HoverButton(QtGui.QToolButton):

    def __init__(self, parent=None):
        super(HoverButton, self).__init__(parent)
        self.setMouseTracking(True)

    def enterEvent(self,event):
        print("Enter")
        self.setStyleSheet("background-color:#45b545;")

    def leaveEvent(self,event):
        self.setStyleSheet("background-color:yellow;")
        print("Leave")

app = QtGui.QApplication(sys.argv)
main = Main()
main.show()
sys.exit(app.exec_())

В вашем коде у вас была кнопка в кнопке, а вложенная кнопка не была назначена виджету QLayout. Хотя я не уверен, почему вы добавляете кнопку внутри кнопки. Одна вещь, которую я узнал от работы с GUI, заключается в том, что намного проще, если вы модульно кодируете. Теперь вы можете взять эту пользовательскую кнопку и применить ее где-нибудь еще.

2 голосов
/ 04 августа 2012

Вы должны использовать таблицу стилей как

QToolButton:hover
{
        background-color: rgb(175,175,175);
}
0 голосов
/ 22 февраля 2012

Вы, вероятно, хотите, чтобы focus и blur, а не enter и leave, срабатывали только тогда, когда мышь фактически входит или покидает границу кнопки и, вероятно, будут просто кратковременными импульсами, а не переключениями.focus и blur будут переключаться при наведении.

...