Ich entwickle eine Schach-GUI in Python 3.6.3
mit PyQt5 5.9.1
(GUI-Framework) und python-chess 0.21.1
(Schach-Bibliothek) auf Windows 10
. Ich möchte den Wert eines Stückes erhalten, das auf ein SVG-Schachbrett geklickt wurde (zur Verfügung gestellt von python-chess
), so dass ich dieses Stück dann zu einem anderen Quadrat bewegen kann.Klicken Sie auf Schachfigur aus einem SVG-Schachbrett
Nach dem ersten Klick mit der linken Maustaste und dem Abrufen des Stücks möchte ich den zweiten linken Mausklick vom Benutzer erhalten und das Quadrat erhalten, auf das der Benutzer geklickt hat. Dann muss meine Schach-GUI das Stück vom Ursprungsquadrat zum Zielquadrat bewegen.
Also, hier ist mein vollständiger Arbeitscode bisher. Hinweise oder Ergänzungen sind sehr willkommen.
#! /usr/bin/env python3
import chess
import chess.svg
from PyQt5.QtCore import pyqtSlot, Qt
from PyQt5.QtSvg import QSvgWidget
from PyQt5.QtWidgets import QApplication, QWidget
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Chess Titan")
self.setGeometry(300, 300, 800, 800)
self.widgetSvg = QSvgWidget(parent=self)
self.widgetSvg.setGeometry(10, 10, 600, 600)
self.chessboard = chess.Board()
@pyqtSlot(QWidget)
def mousePressEvent(self, event):
if event.buttons() == Qt.LeftButton:
## How to get the clicked SVG chess piece?
# Envoke the paint event.
self.update()
@pyqtSlot(QWidget)
def paintEvent(self, event):
self.chessboardSvg = chess.svg.board(self.chessboard).encode("UTF-8")
self.widgetSvg.load(self.chessboardSvg)
if __name__ == "__main__":
chessTitan = QApplication([])
window = MainWindow()
window.show()
chessTitan.exec()
Wie würde ich gehen und die Regeln implementieren? So kann sich Weiß/Schwarz nicht zweimal oder öfter bewegen. Zuerst bewegt sich Weiß und dann Schwarz. Auch dürfen Schachfiguren nicht zufällig auf dem Spielbrett platziert werden, sondern nach den Regeln des Schachspiels. Ich weiß, dass Python-Schach diese 'chess.Board(). Is_valid()' Funktion hat, ich weiß einfach nicht wo genau ich es setzen soll. Durch die Implementierung der Funktion 'is_valid()' stellen wir alternative Stückzüge (Weiß, Schwarz ...) sicher und sorgen dafür, dass die Teile nach Schachregeln bewegt werden. Auch, wie kann ich diese Farbverlauf auf dem King's Square implementieren, wenn es in Schach ist? –
siehe [Readthedocs] (https://python-chess.readthedocs.io/en/latest/) –
Wie auch immer, danke für Ihre Lösung! Ich schätze die Hilfe sehr. Ich habe allerdings eine Frage. Warum ist das notwendig? 'sonst: QWidget.mousePressEvent (self, event)'? –