[Çözüldü] QPushButton için hover event

Başlatan m.erin, 22 Ağustos 2013 - 20:42:46

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

m.erin

Merhaba arkadaşlar,
Küçük bir uygulama geliştiriyorum. Ana formda birkaç buton var. Bu butonların üzerine mouse veya tab ile gelindiğinde statusbar içine eklediğim QLabel nesnesinin text özelliğini her butona göre farklı şekilde değiştirmek istiyorum.

statusBar() nesnesine QLabel'i şu şekilde ekledim:


class mainWindow(QMainWindow):

def __init__(self, parent = None):
super(mainWindow, self).__init__(parent)
QWidget.__init__(self, parent)
self.ui = uic.loadUi('mainWindow.ui', self)

self.statusLabel = QLabel('')
self.ui.statusBar().addWidget(self.statusLabel)


Mesela formda bulunan buttonYeniKayit isimli QPushButton nesnesinin üzerine gelindiğinde self.statusLabel nesnesine "Yeni kayıt" şeklinde yazdırmak istiyorum. Buraya istediğim bir değeri;

self.statusLabel.setText('İstediğim değer')

şeklinde yazdırmak istiyorum.

Burada çözemediğim nokta; fare imlecinin veya tab' ın hangi buton üzerinde olduğunu yakalayamamam.

Bilgi sahibi olan arkadaşlar yardımcı olursa sevinirim.
Şimdiden teşekkürler :)

egcodes

Bildiğim kadarıyla pushButton için üzerine geldiğinde bir sinyal yaymıyordu(click, press, release, toggle vardı).

O yüzden yapmaya çalıştığın olayı şöylede yapabilirsin. Balon mesaj pencereleri var. O fonksiyonu araştırısan QT baloon message diye bulursun.

Kolay gelsin.
1f u c4n r34d th1s u r34lly n33d t0 g37 l41d

m.erin

Bakalım, teşekkür ederim cevap için.

guopx

PyQt'yi bilmiyorum ama PyGtk'da Gtk button için activate, clicked, enter,leave,pressed,released olmak üzere 6 sinyal vardı. Bunlardan enter sinyali senin istediğin şey yani butona tıklamadan sadece üzerine geldiğinde enter sinyal gönderilir ama PyQt'de bu var mı herhangi bir bilgim yok malesef  :(
Sevdiklerine sevdiğini söyle çok geç olmadan.

ersinkandemir

Şurada şöyle bir örnek var:


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_())



Bunu şöyle uyarlasak:

class HoverButton(QtGui.QPushButton):

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

    def enterEvent(self,event):
        islemler()

Where there's a shell, there's a way.



m.erin

@guopx, Qt üzerinde enter() şeklinde bir sinyal yok.
@ersinkandemir, bu yöntemle QPushButton nesnelerini bir sınıftan miras alarak kod içerisinde oluşturabiliriz.
Projeyi geliştirirken mümkün olduğunca form nesnelerini Qt Designer'a bırakıyorum. Qt Designer üzerinde bir çözüm bulamazsam bu şekilde uygulayacağım.

Teşekkür ederim.