PyQt5 - Mouse Butonun Üzerine Gelince

Merhaba basit bir program yapmak istedim ama butonun background rengini değiştirdiğimde mouse butonun üzerine geldiğinde rengi değişmiyor örneğin:

beyaz olanların üzerine gelince bir renk değime gerçekleştirmiyor rengini soldurmayı / değiştirmeyi nasıl yapabilirim ?

Merhaba;
Bir butonun stilini değiştirmek için setStyleSheet() metodunu kullanabilirsiniz.
Sizin aradığınız anahtar kelime hover. Bahsettiğiniz şeyi tek bir butona uygulamak için şöyle yapabilirsiniz:

self.pushButton.setStyleSheet("QPushButton:hover{
background-color: turquoise;
}

veya QtDesigner’da da bu işlemi yapabilirsiniz. İstediğiniz butona sağ tıklayıp change style sheet seçeneğini seçip ardından yukarıdaki parantez içindeki CSS kodlarını yapıştırıp OK dersiniz.

Ama bence siz bu işlemi tüm butonlara uygulamak isteyeceksiniz. Kod ve işlem tekrarına girmemeniz için size butonları nasıl gruplandıracağınızı anlatacağım. Böylelikle tek bir metod üzerinden tüm butonlara aynı anda hükmedebileceksiniz.

QButtonGroup

  • Tasarım dosyalarını elle yazıyorsanız:
import sys
from PySide2.QtWidgets import QApplication, QMainWindow, QWidget, QPushButton, QButtonGroup, QVBoxLayout

class MainWindow(QMainWindow):
	def __init__(self):
		super(MainWindow, self).__init__()

		self.pushButton = QPushButton("Button 1")
		self.pushButton_2 = QPushButton("Button 2")
		self.pushButton_3 = QPushButton("Button 3")
		self.pushButton_4 = QPushButton("Button 4")
		self.pushButton_5 = QPushButton("Button 5")

		# Butonların pozisyonlarını tek tek değiştirmek ile
		# uğraşmamak için, bir Vertical Layout kullanıyoruz.
		self.verticalLayout = QVBoxLayout()

		# Butonları Vertical Layout'a ekliyoruz.
		self.verticalLayout.addWidget(self.pushButton)
		self.verticalLayout.addWidget(self.pushButton_2)
		self.verticalLayout.addWidget(self.pushButton_3)
		self.verticalLayout.addWidget(self.pushButton_4)
		self.verticalLayout.addWidget(self.pushButton_5)

		# Butonları gruplandırmak için bir QButtonGroup
		# nesnesi oluşturuyoruz.
		self.buttonGroup = QButtonGroup(self)

		# Butonları bu nesneye ekliyoruz.
		self.buttonGroup.addButton(self.pushButton)
		self.buttonGroup.addButton(self.pushButton_2)
		self.buttonGroup.addButton(self.pushButton_3)
		self.buttonGroup.addButton(self.pushButton_4)
		self.buttonGroup.addButton(self.pushButton_5)

		# Bir for döngüsü ile self.buttonGroup içerisindeki
		# tüm butonların arka plan rengini turkuaz yapıyoruz.
		for button in self.buttonGroup.buttons():
			button.setStyleSheet("QPushButton:hover{background-color:turquoise;}")

		# Bir Widget oluşturuyoruz herşeyi üzerinde taşıması için.
		self.widget = QWidget()

		# Merkezi 'Widget'ı self.widget değişkeni olarak belirliyoruz.
		self.setCentralWidget(self.widget)

		# son olarak bu Widget'ın yerleşim alanını
		# self.verticalLayout yapıyoruz.
		# Not: Layout, yerleşim demek.
		self.widget.setLayout(self.verticalLayout)

if __name__ == "__main__":
	app = QApplication(sys.argv)

	window = MainWindow()
	window.show()

	sys.exit(app.exec_())
  • QtDesigner kullanıyorsanız, butonları gruplandırabilirsiniz ama aynı anda grup içerisindeki tüm butonlara CSS kodu uygulayamazsınız. Ancak eğer amacınız bazı butonların değil de tüm butonların stilini değiştirmek ise kolay.
    Ekranda boş bir yere sağ tıklayıp change style sheet seçeneğini seçin. Ardından şu kodları yapıştırıp OK tuşuna basın.
QPushButton:hover{
background-color: turquoise;

Son bir şey daha, tek bir objenin stili değiştirmek isterseniz o objenin ismini kullanın. Object Inspector panelinde, Object başlığı altında.

Örnek bir kullanım:

QPushButton#pushButton:hover{
background-color: black;

Şu sayfada CSS örneklerini inceleyebilirsiniz. Hangi sınıfın nesnelerine hangi metodları uygulayabileceğinize dair fikir verebilir. pressed metodunu kesinlikle inceleyin.

İyi çalışmalar.