Ubuntu Türkiye

Yazılım => Python => Programlama => PyQT => Konuyu başlatan: m.erin - 22 Ağustos 2013 - 20:42:46

Başlık: [Çözüldü] QPushButton için hover event
Gönderen: m.erin - 22 Ağustos 2013 - 20:42:46
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 :)
Başlık: Ynt: QPushButton için hover event
Gönderen: egcodes - 22 Ağustos 2013 - 21:20:52
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.
Başlık: Ynt: QPushButton için hover event
Gönderen: m.erin - 22 Ağustos 2013 - 21:44:59
Bakalım, teşekkür ederim cevap için.
Başlık: Ynt: QPushButton için hover event
Gönderen: guopx - 23 Ağustos 2013 - 16:36:11
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  :(
Başlık: Ynt: QPushButton için hover event
Gönderen: ersinkandemir - 23 Ağustos 2013 - 16:58:26
Şurada (http://stackoverflow.com/questions/9384305/hover-issue-in-pyqt#comment12896818_9425039) şö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()

Başlık: Ynt: QPushButton için hover event
Gönderen: m.erin - 25 Ağustos 2013 - 02:30:39
@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.