So I am trying to learn/teach myself python and I decided to start with Rock, Paper, Scissors game. I was able to create the game using python but now I am trying to create a GUI for it and so I am working on converting it over using PyQt but I am running into an error in the game_play function. I know it has to do with the tg, cw, and pw variables but I am not sure how to define them differently or why it is failing. Some help would be appreciated.
I notice that if I comment out these lines
from random import randint import sqlite3 from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(800, 665) self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setObjectName("centralwidget") self.gridLayout_3 = QtWidgets.QGridLayout(self.centralwidget) self.gridLayout_3.setObjectName("gridLayout_3") self.horizontalLayout_2 = QtWidgets.QHBoxLayout() self.horizontalLayout_2.setObjectName("horizontalLayout_2") spacerItem = QtWidgets.QSpacerItem(300, 20, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem) self.pushLoadUser = QtWidgets.QPushButton(self.centralwidget) self.pushLoadUser.setObjectName("pushLoadUser") self.horizontalLayout_2.addWidget(self.pushLoadUser) self.currentUser = QtWidgets.QLineEdit(self.centralwidget) self.currentUser.setObjectName("currentUser") self.horizontalLayout_2.addWidget(self.currentUser) self.gridLayout_3.addLayout(self.horizontalLayout_2, 0, 0, 1, 2) self.gridLayout = QtWidgets.QGridLayout() self.gridLayout.setObjectName("gridLayout") self.playerImage = QtWidgets.QFrame(self.centralwidget) self.playerImage.setMinimumSize(QtCore.QSize(387, 145)) self.playerImage.setFrameShape(QtWidgets.QFrame.StyledPanel) self.playerImage.setFrameShadow(QtWidgets.QFrame.Raised) self.playerImage.setObjectName("playerImage") self.gridLayout.addWidget(self.playerImage, 0, 0, 1, 1) self.computerImage = QtWidgets.QFrame(self.centralwidget) self.computerImage.setMinimumSize(QtCore.QSize(387, 145)) self.computerImage.setFrameShape(QtWidgets.QFrame.StyledPanel) self.computerImage.setFrameShadow(QtWidgets.QFrame.Raised) self.computerImage.setObjectName("computerImage") self.gridLayout.addWidget(self.computerImage, 0, 1, 1, 1) self.gridLayout_3.addLayout(self.gridLayout, 3, 0, 1, 2) self.horizontalLayout = QtWidgets.QHBoxLayout() self.horizontalLayout.setObjectName("horizontalLayout") self.pushRock = QtWidgets.QPushButton(self.centralwidget) self.pushRock.setObjectName("pushRock") self.horizontalLayout.addWidget(self.pushRock) self.pushPaper = QtWidgets.QPushButton(self.centralwidget) self.pushPaper.setObjectName("pushPaper") self.horizontalLayout.addWidget(self.pushPaper) self.pushScissors = QtWidgets.QPushButton(self.centralwidget) self.pushScissors.setObjectName("pushScissors") self.horizontalLayout.addWidget(self.pushScissors) self.gridLayout_3.addLayout(self.horizontalLayout, 2, 0, 1, 2) self.horizontalLayout_3 = QtWidgets.QHBoxLayout() self.horizontalLayout_3.setObjectName("horizontalLayout_3") self.status = QtWidgets.QLabel(self.centralwidget) self.status.setObjectName("status") self.horizontalLayout_3.addWidget(self.status) self.gridLayout_2 = QtWidgets.QGridLayout() self.gridLayout_2.setObjectName("gridLayout_2") self.line_3 = QtWidgets.QFrame(self.centralwidget) self.line_3.setFrameShape(QtWidgets.QFrame.HLine) self.line_3.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_3.setObjectName("line_3") self.gridLayout_2.addWidget(self.line_3, 7, 0, 1, 1) self.computerWins = QtWidgets.QLabel(self.centralwidget) self.computerWins.setObjectName("computerWins") self.gridLayout_2.addWidget(self.computerWins, 4, 0, 1, 1) self.playerWins = QtWidgets.QLabel(self.centralwidget) self.playerWins.setObjectName("playerWins") self.gridLayout_2.addWidget(self.playerWins, 2, 0, 1, 1) self.ties = QtWidgets.QLabel(self.centralwidget) self.ties.setObjectName("ties") self.gridLayout_2.addWidget(self.ties, 6, 0, 1, 1) self.line_2 = QtWidgets.QFrame(self.centralwidget) self.line_2.setFrameShape(QtWidgets.QFrame.HLine) self.line_2.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_2.setObjectName("line_2") self.gridLayout_2.addWidget(self.line_2, 5, 0, 1, 1) self.line_4 = QtWidgets.QFrame(self.centralwidget) self.line_4.setFrameShape(QtWidgets.QFrame.HLine) self.line_4.setFrameShadow(QtWidgets.QFrame.Sunken) self.line_4.setObjectName("line_4") self.gridLayout_2.addWidget(self.line_4, 1, 0, 1, 1) self.line = QtWidgets.QFrame(self.centralwidget) self.line.setFrameShape(QtWidgets.QFrame.HLine) self.line.setFrameShadow(QtWidgets.QFrame.Sunken) self.line.setObjectName("line") self.gridLayout_2.addWidget(self.line, 3, 0, 1, 1) self.horizontalLayout_3.addLayout(self.gridLayout_2) self.gridLayout_3.addLayout(self.horizontalLayout_3, 4, 0, 1, 2) MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21)) self.menubar.setObjectName("menubar") MainWindow.setMenuBar(self.menubar) self.statusbar = QtWidgets.QStatusBar(MainWindow) self.statusbar.setObjectName("statusbar") MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow")) self.pushLoadUser.setText(_translate("MainWindow", "Load")) self.currentUser.setText(_translate("MainWindow", "Username")) self.pushRock.setText(_translate("MainWindow", "Rock")) self.pushRock.clicked.connect(self.rock_click) self.pushRock.clicked.connect(self.game_play) self.pushPaper.setText(_translate("MainWindow", "Paper")) player = self.pushPaper.clicked.connect(self.paper_click) self.pushPaper.clicked.connect(self.game_play) self.pushScissors.setText(_translate("MainWindow", "Scissors")) player = self.pushScissors.clicked.connect(self.scissors_click) self.pushScissors.clicked.connect(self.game_play) self.status.setText(_translate("MainWindow", "Status")) self.computerWins.setText(_translate("MainWindow", "Computer Wins")) self.playerWins.setText(_translate("MainWindow", "Player Wins")) self.ties.setText(_translate("MainWindow", "Ties")) def rock_click(self): print("RockOn") self.player = "Rock" self.value = 0 #return self.player def paper_click(self): print("Paper") self.player = "Paper" self.value = 1 #return self.player def scissors_click(self): print("Scissors") self.player = "Scissors" self.value = 2 #return self.player def game_play(self): print (self.player) if self.player == "Rock": print ("Tie!") print (self.tg) self.tg = self.tg + 1 elif self.player == "Rock": if self.computer == "Paper": print("You Lose!", computer, "covers", self.player) self.cw = self.cw + 1 else: print("You Win!", self.player, "smashes", computer) self.pw = self.pw + 1 elif self.player == "Paper": if computer == "Scissors": print("You Lose!", computer, "cut", self.player) self.cw = self.cw + 1 else: print("You Win!", self.player, "covers", computer) self.pw = self.pw + 1 elif self.player == "Scissors": if computer == "Rock": print("You Lose!", computer, "smashes", self.player) self.cw = self.cw + 1 else: print("You Win!", self.player, "cut", computer) self.pw = self.pw + 1 else: print("That's not a valid play. Check your spelling!") def create_table(db_name,table_name,sql): with sqlite3.connect(db_name) as db: cursor = db.cursor() cursor.execute("select name from sqlite_master where name=?",(table_name,)) result = cursor.fetchall() keep_table = True if len(result) == 1: response = input("The table {0} already exists, do you wish to recreate it (y/n): ".format(table_name)) if response == "y": keep_table = False print(" The {0} table will be recreated - all existing data will be lost".format(table_name)) cursor.execute("drop table if exists {0}".format(table_name)) db.commit else: print("The existing table was kept") else: keep_table = False if not keep_table: cursor.execute(sql) db.commit() def insert_data(values): with sqlite3.connect("RPS.db") as db: cursor = db.cursor() sql = "insert into " + user + " (RPS, Value) values (?,?)" cursor.execute(sql,values) db.commit() def select_counter(id): with sqlite3.connect("RPS.db") as db: cursor = db.cursor() cursor.execute("select Value from " + user + " where Counter=?",(id,)) counter = cursor.fetchone() return counter user = input("Input Username: ") db_name = "RPS.db" sql = """CREATE TABLE {}( Counter integer, RPS text, Value integer, primary key (Counter))""".format(user) create_table(db_name, user, sql) # Create a list of play options t = ["Rock", "Paper", "Scissors"] x = 1 nr = 0 np = 0 ns = 0 pw = 0 cw = 0 tg = 0 window = [0, 0, 0, 0] # Assign a random play to the computer computer = t[randint(0,2)] # Set player to False player = False if __name__ == "__main__": import sys app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_())
I notice that if I comment out these lines
self.tg = self.tg + 1 self.cw = self.cw + 1 self.pw = self.pw + 1it seems to work or if I change the lines to
self.tg = tg + 1 self.cw = cw + 1 self.pw = pw + 1but then this does add the value to itself. I am trying to determine the number of tie games, computer wins, and player wins.