Python Forum
right mouse button click with PyQt5
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
right mouse button click with PyQt5
#3
There is still something going wrong with the mouse click. Any idea what I'm doing wrong?
This is the error message I'm getting:

Traceback (most recent call last):
File "minesweeper_A01.py", line 53, in eventFilter
if event.button() == Qt.LeftButton:
AttributeError: 'QEvent' object has no attribute 'button'


------------------
(program exited with code: 3)

Druk op een toets om door te gaan. . .


import sys
from PyQt5 import QtWidgets, QtGui
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from functools import partial
from random import randint

#class Window(QWidget):
class Window(QMainWindow):
	def __init__(self):
		super(Window,self).__init__()
		self.setWindowTitle("Minesweeper")
		self.setWindowIcon(QtGui.QIcon('ekopak-favicon.png'))
		
		fileAction = QAction("New", self)
		fileAction.triggered.connect(self.init_game)

		mainMenu = self.menuBar()
		fileMenu = mainMenu.addMenu('&File')
		fileMenu.addAction(fileAction)
		
		self.setMouseTracking(True)
		
		self.init_game()		
		
		self.main_page()
	
	def main_page(self):		
		self.button={}
		
		self.centralwidget = QWidget()
		self.setCentralWidget(self.centralwidget)
        
		horizontalLayout=QHBoxLayout(self.centralwidget)
		for column in range (0,10):
			verticalLayout=QVBoxLayout()
			verticalLayout.setSpacing(0)
			for row in range (0,10):
				self.button[row,column]=QPushButton(self)
				self.button[row,column].setFixedHeight(20)
				self.button[row,column].setFixedWidth(20)
				self.button[row,column].setContentsMargins(0,0,0,0)
				self.button[row,column].setIcon(QtGui.QIcon('tile_plain.gif'))
				self.button[row,column].installEventFilter(self)
				self.button[row,column].clicked.connect(partial(self.button_pressed,row,column))
				verticalLayout.addWidget(self.button[row,column])
			horizontalLayout.addLayout(verticalLayout)
			horizontalLayout.setSpacing(0)
		self.show()
	
	def eventFilter(self,obj,event):
		print('button pressed')
		if event.button() == Qt.LeftButton:
			print(obj.objectName(), "Left click")
		elif event.button() == Qt.RightButton:
			print(obj.objectName(), "Right click")
		elif event.button() == Qt.MiddleButton:
			print(obj.objectName(), "Middle click")
		return QObject.event(obj, event)


		

	
	def init_game(self):
		self.initialArray=[[0 for i in range(10)]for j in range(10)]
		self.counterTurns=0
		
		for column in range (0,10):
			for row in range (0,10):
				bomb=randint(0,6)
				if bomb==6:
					self.initialArray[row][column]=9
					if row-1>=0 and self.initialArray[row-1][column]!=9:
						self.initialArray[row-1][column]+=1
					if row+1<=9 and self.initialArray[row+1][column]!=9:
						self.initialArray[row+1][column]+=1
					if column-1>=0 and self.initialArray[row][column-1]!=9:
						self.initialArray[row][column-1]+=1
					if column+1<=9 and self.initialArray[row][column+1]!=9:
						self.initialArray[row][column+1]+=1
					if row-1>=0 and column-1>=0 and self.initialArray[row-1][column-1]!=9:
						self.initialArray[row-1][column-1]+=1
					if row+1<=9 and column-1>=0 and self.initialArray[row+1][column-1]!=9:
						self.initialArray[row+1][column-1]+=1
					if row-1>=0 and column+1<=9 and self.initialArray[row-1][column+1]!=9:
						self.initialArray[row-1][column+1]+=1
					if row+1<=9 and column+1<=9 and self.initialArray[row+1][column+1]!=9:
						self.initialArray[row+1][column+1]+=1	
		for row in self.initialArray:
			print (row)

		
	def button_pressed(self,row,column):
		self.display_empty_buttons(row,column)
		self.counterTurns+=1
		print ('rij'+str(row)+'\nkolom'+str(column))
		if self.initialArray[row][column]==9:
			print ('bomb!!!! ' + str(self.counterTurns))
		game_busy=0
		values=[1,2,3,4,5,6,7,8]
		for x in self.initialArray:
			print (x)
			if any(i in values for i in x):
				game_busy=1
		if game_busy==0:
			print ('you won')
			
		
				
	def display_empty_buttons(self,row,column):
		#the value of initialArray can be 0-8, 9 is for a bomb, 10 is if it has been opened
		if self.initialArray[row][column]!=0:
			if self.initialArray[row][column]!=10:
				if self.initialArray[row][column]==0:
					self.button[row,column].setIcon(QtGui.QIcon('tile_clicked.gif'))
				elif self.initialArray[row][column]==1:
					self.button[row,column].setIcon(QtGui.QIcon('tile_1.gif'))	
				elif self.initialArray[row][column]==2:
					self.button[row,column].setIcon(QtGui.QIcon('tile_2.gif'))
				elif self.initialArray[row][column]==3:
					self.button[row,column].setIcon(QtGui.QIcon('tile_3.gif'))	
				elif self.initialArray[row][column]==4:
					self.button[row,column].setIcon(QtGui.QIcon('tile_4.gif'))	
				elif self.initialArray[row][column]==5:
					self.button[row,column].setIcon(QtGui.QIcon('tile_5.gif'))
				elif self.initialArray[row][column]==6:
					self.button[row,column].setIcon(QtGui.QIcon('tile_6.gif'))	
				elif self.initialArray[row][column]==7:
					self.button[row,column].setIcon(QtGui.QIcon('tile_7.gif')) 
				elif self.initialArray[row][column]==8:
					self.button[row,column].setIcon(QtGui.QIcon('tile_8.gif'))
				elif self.initialArray[row][column]==9:
					self.button[row,column].setIcon(QtGui.QIcon('tile_mine.gif'))
				else:
					self.button[row,column].setText(str(self.initialArray[row][column]))
			self.initialArray[row][column]=10
		else:
			if self.initialArray[row][column]!=10:
				if self.initialArray[row][column]==0:
					self.button[row,column].setIcon(QtGui.QIcon('tile_clicked.gif'))
				else:
					self.button[row,column].setText(str(self.initialArray[row][column]))
			self.initialArray[row][column]=10
			if row-1>=0:
				self.displayEmptyButtons(row-1,column)
			if row+1<=9:
				self.displayEmptyButtons(row+1,column)
			if column-1>=0:
				self.displayEmptyButtons(row,column-1)
			if column+1<=9:
				self.displayEmptyButtons(row,column+1)
			if row-1>=0 and column-1>=0:
				self.displayEmptyButtons(row-1,column-1)
			if row+1<=9 and column-1>=0:
				self.displayEmptyButtons(row+1,column-1)
			if row-1>=0 and column+1<=9:
				self.displayEmptyButtons(row-1,column+1)
			if row+1<=9 and column+1<=9:
				self.displayEmptyButtons(row+1,column+1)

#messagebox bomb pressed
#messagebox won
#rightclick add flag
					
			
if __name__ == '__main__':
    
    app = QApplication(sys.argv)
    ex = Window()
    sys.exit(app.exec_())
Reply


Messages In This Thread
right mouse button click with PyQt5 - by brecht83 - Nov-06-2018, 03:00 PM
RE: right mouse button click with PyQt5 - by brecht83 - Nov-07-2018, 03:32 PM

Possibly Related Threads…
Thread Author Replies Views Last Post
  tkinter - touchscreen, push the button like click the mouse John64 5 937 Jan-06-2024, 03:45 PM
Last Post: deanhystad
  Figure Gets Larger Every time I click a show button joshuagreineder 2 1,355 Aug-11-2022, 06:25 AM
Last Post: chinky
  [Tkinter] Modify Class on Button Click KDog 4 4,009 May-11-2021, 08:43 PM
Last Post: KDog
  [Tkinter] Mouse click without use bind ATARI_LIVE 8 7,575 Oct-23-2020, 10:41 PM
Last Post: ATARI_LIVE
  [Tkinter] Button click problem using OOP JohnB 5 3,676 Oct-21-2020, 12:43 PM
Last Post: JohnB
  tkinter | Button color text on Click Maryan 2 3,423 Oct-09-2020, 08:56 PM
Last Post: Maryan
  [Tkinter] program unresponsive during pynput mouse click RobotTech 1 3,528 May-07-2020, 04:43 PM
Last Post: RobotTech
  Closing window on button click not working kenwatts275 4 3,841 May-03-2020, 01:59 PM
Last Post: deanhystad
  [PyQt] Pyqt5: How do you make a button that adds new row with data to a Qtablewidget YoshikageKira 6 7,102 Jan-02-2020, 04:32 PM
Last Post: Denni
  [Tkinter] Mouse click event not working on multiple tkinter window evrydaywannabe 2 3,802 Dec-16-2019, 04:47 AM
Last Post: woooee

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020