Nov-07-2018, 03:32 PM
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. . .
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_())