Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Shortcuts inactivos en primer turno (Bonus Cheatcode) #340

Open
7 tasks done
narispe opened this issue Dec 7, 2021 · 9 comments
Open
7 tasks done

Shortcuts inactivos en primer turno (Bonus Cheatcode) #340

narispe opened this issue Dec 7, 2021 · 9 comments
Assignees
Labels
resuelto Tarea 3 Dudas sobre la T3

Comments

@narispe
Copy link

narispe commented Dec 7, 2021

  • Leí las reglas del foro (https://github.com/IIC2233/syllabus/issues/1)
  • Busqué en las issues si ya preguntaron mi duda y no encontré nada parecido (https://github.com/IIC2233/syllabus/issues)
  • Revisé el compilado de dudas de la tarea y no encontré una issue similar a la mía (Duda SOLES_ROBADOS Syllabus#293)
  • Mi duda no se trata sobre una librería, built-in o mala práctica, ya que eso se pregunta en la issue creada para ello.
  • Mi duda no se trata de un tema administrativo o personal, ya que en ese caso debo contactar a mi profe, al Jefe de Bienestar o al correo del curso (https://iic2233.github.io/contacto/)
  • Utilizaré un título descriptivo y llenaré correctamente esta plantilla
  • De ser necesario, solo colocaré código simple que permita explicar mi problema o duda, ya que compartir código de esta evaluación puede ser considerado copia

Duda

Hola, tengo un problema con la conexión de los shortcuts de mi ventana de juego para implementar el bonus de cheatcode. Durante el primer turno la función que conecto al activated de los QShortcuts no se llama al presionar los shortcuts para ningún jugador, pero al comenzar el segundo turno la conexión funciona correctamente y sin problemas. No tengo idea de porque pasa eso y también me gustaría saber si este bug impedirá que pueda tener el puntaje del bonus.

@narispe narispe added the Tarea 3 Dudas sobre la T3 label Dec 7, 2021
@diegocostares
Copy link

Hola con respecto a los QShortcuts de esta pregunta, también me gustaría preguntar como se puede implementar para dos letras diferentes, cuando es con cosas como Qt.CTRL + Qt.Key_P no tengo problema, pero cuando intento hacer Qt.Key_A + Qt.Key_F no funciona. ¿Me podrían explicar como se debe implementar? Como la documentación no está en python me ha costado mucho hacer esto :C

@fernandosmither fernandosmither self-assigned this Dec 8, 2021
@fernandosmither
Copy link
Member

Hola!

@narispe Necesitaría un poco más de contexto sobre tu código. Súbelo a tu repositorio e indícame qué líneas son las importantes. Un problema random que se me ocurre, es el del focus, es posible que si el tema de turnos lo gestionas modificando atributos de los botones, por alguna razón el "foco" del teclado cambie al botón y al presionar las teclas no las recibe el event handler de pyqt. Si te parece muy abstracto lo del foco, puedes entenderlo así: Clickea la barra de URL del navegador, si escribes algo el teclado lo hará ahí porque es su foco actual. Ahora pulsa la tecla TAB un par de veces, o todas las que quieras, verás como el "foco" va cambiando respecto a todos los elementos de la página. Para más info te recomiendo googlearlo, y un buen punto de partida sería: esta pregunta de stack overflow

@diegocostares Sobre tu problema, no sé por qué no te funciona, pero te dejo abajo un snippet de código que a mí sí me sirve. Printeará toda tecla y combinaciones que reciba, y si recibe la combinación puesta en self.shortcut imprimirá "Combinación de teclas".

import sys
import PyQt5
from PyQt5 import QtGui
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QShortcut, QWidget, QApplication


class MiVentana(QWidget):
    def __init__(self):
        super().__init__()
        self.setGeometry(200, 100, 300, 300)
        self.setWindowTitle('Ventana de prueba')
        self.shortcut = QShortcut(QtGui.QKeySequence(Qt.Key_A, Qt.Key_F), self)
        self.shortcut.activated.connect(self.combinacion_teclas)

    def keyPressEvent(self, key: QtGui.QKeyEvent) -> None:
        print("pressed key:", key.key())

    def combinacion_teclas(self):
        print("Combinación de teclas")


if __name__ == '__main__':
    def hook(type, value, traceback):
        print(type)
        print(traceback)
    sys.__excepthook__ = hook
    app = QApplication([])
    ventana = MiVentana()
    ventana.show()
    app.exec()

Coméntenme si les fue de ayuda, y si siguen con dudas del mismo tema. 🚀

@narispe
Copy link
Author

narispe commented Dec 8, 2021

@fernandosmither Modifique mi código para considerar el focus y ahora funciona el programa como debería en el primer turno. Justamente antes de mostrar al ventana modificaba varios de sus elementos y parece que eso causaba que el foco cambiara. Gracias por la ayuda.

@diegocostares
Copy link

Hola @fernandosmither hice literalmente lo mismo, pero no me está funcionando... no sé si es tema de mac o que... te agradecería si pudieras echarle una mirada rápida a mi código, está en mi línea 44 de mi ventana de juego. (Hay un name == "main" con el que se puede ejecutar de forma comoda)

@fernandosmither
Copy link
Member

Hola @fernandosmither hice literalmente lo mismo, pero no me está funcionando... no sé si es tema de mac o que... te agradecería si pudieras echarle una mirada rápida a mi código, está en mi línea 44 de mi ventana de juego. (Hay un name == "main" con el que se puede ejecutar de forma comoda)

image

Logré utilizar en una de las ventanas una de las combinaciones de teclas que añadiste. Efectivamente veo un problema con el focus, por lo que te recomiendo que cambies la focus policy, y además veas si puedes utilizar el método setFocus().

Ya que no tengo mac no puedo responderte sobre esa plataforma, sin embargo, me parecería extraño que ese fuese el motivo de que no funcionara. (Podrías bajar tu código en una máquina con otro OS, o virtualizar uno y probarlo).

Ve si con lo que te dije logras solucionarlo, y avísame como te va!
PD: Felicidades por el avance y lo bonito que está quedando tu tarea

@diegocostares
Copy link

No logro entender el funcionamiento del setFocus(), ¿Cómo debería hacerlo?

@fernandosmither
Copy link
Member

No logro entender el funcionamiento del setFocus(), ¿Cómo debería hacerlo?

setFocus() es un método que al ser llamado cambia el foco del teclado al widget que lo llamó.

Te recomiendo en el init, al widget principal de la ventana cambiarle la focusPolicya Qt.StrongFocus y al final del init, correr el método widget.setFocus().

¿Pudiste solucionar el problema de que PyQt no te detectaba las combinaciones de teclas?

@diegocostares
Copy link

Hola, logre hacer que funcionara cambiando el focusPolicy desde designer, seleccionando ClickFocus en los elementos que el jugador debe interactuar. Muchas gracias.

@fernandosmither
Copy link
Member

@diegocostares Excelente! Gracias por compartirlo, para que compañeros con tu mismo problema puedan arreglarlo.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
resuelto Tarea 3 Dudas sobre la T3
Projects
None yet
Development

No branches or pull requests

3 participants