我正在按照 这个教程 编写一个Python象棋程序。
它使用了python-chess引擎。该引擎的函数显然返回SVG数据,可用于显示棋盘。
但是当我运行那段代码时,我只在终端上看到一行文字,没有图片。
以下是我写的内容:
一个Qt窗口打开但是什么也没有显示,终端上却有很多文本——(显然SVG数据出现在控制台,而不是正在打开的Qt窗口中?)我想我需要安装一些python下的SVG库,所以我从pip安装了drawSvg。但是这个库似乎只生成SVG图片,对我没有用处。更奇怪的是,在看到this SO question后,我尝试了以下操作:
它使用了python-chess引擎。该引擎的函数显然返回SVG数据,可用于显示棋盘。
- 教程中的代码:
import chess
import chess.svg
from IPython.display import SVG
board = chess.Board()
SVG(chess.svg.board(board=board,size=400))
但是当我运行那段代码时,我只在终端上看到一行文字,没有图片。
该教程提到了Jupyter Notebooks以及如何使用它们来显示SVG图像。我对Jupyter Notebooks没有经验,尽管我已经从pip安装了该软件包,并尝试了一些如何使用它的方法,但在解决我的原始棋盘问题方面并没有取得太大进展。但是我有使用C++进行Qt开发的经验,因为Qt有Python绑定,所以我决定使用这些绑定。
<IPython.core.display.SVG object>
以下是我写的内容:
import sys
import chess
import chess.svg
from PyQt5 import QtGui, QtSvg
from PyQt5.QtWidgets import QApplication
from IPython.display import SVG, display
app = QApplication(sys.argv);
board = chess.Board();
svgWidget = QtSvg.QSvgWidget(chess.svg.board(board=board, size=400));
#svgWidget.setGeometry(50,50,759,668)
svgWidget.show()
sys.exit(app.exec_())
一个Qt窗口打开但是什么也没有显示,终端上却有很多文本——(显然SVG数据出现在控制台,而不是正在打开的Qt窗口中?)我想我需要安装一些python下的SVG库,所以我从pip安装了drawSvg。但是这个库似乎只生成SVG图片,对我没有用处。更奇怪的是,在看到this SO question后,我尝试了以下操作:
import sys
import chess
import chess.svg
from PyQt5 import QtGui, QtSvg
from PyQt5.QtWidgets import QApplication
from IPython.display import SVG, display
app = QApplication(sys.argv);
board = chess.Board();
svgWidget = QtSvg.QSvgWidget('d:\projects\python_chess\Zeichen_123.svg');
#svgWidget.setGeometry(50,50,759,668)
svgWidget.show()
sys.exit(app.exec_())
我看到了一张图片 - 一张SVG图片!那么我的情况和这种情况有什么区别呢?
问题:所以我的问题是,在国际象棋棋盘SVG数据的情况下,我做错了什么? Python-chess库生成的SVG数据与QtSvg不兼容吗?
QSvgWidget
构造函数需要一个文件名,因此当您给它Zeichen_123.svg
的路径时,它将显示该文件。相反,chess.svg.board
的返回值是实际的SVG代码(即文件内容),因此QSvgWidget
不知道该怎么处理它。另一方面,load
方法期望接收SVG数据,而不是文件名,因此可以使用它。(实际上,这与使用或不使用“主窗口”的问题有些无关;您不需要MainWindow
类来显示国际象棋SVG。) - Ed Bennett