Python - 增加特定控制台输出的大小

时间:2017-09-20 01:49:45

标签: python unicode

为学校制定计划。完成了所需的部分,现在我只是为了好玩而做的事情。

基本上你必须编写一个程序,从甲板上随机抽取一张牌,然后打印出面值和套装。容易 - 花了我5分钟。

我尝试使用Unicode字符为作业添加视觉方面。我找到了these,并且已经编写了一些代码来选择正确的Unicode字符给出卡片和套装。唯一的问题是打印出角色时it's tiny。它的可能在我的屏幕上高达两毫米,这远远不足以看到卡片的表面。

我一直在寻找增加输出大小的方法,但无济于事。我在搜索中发现了这段代码,但它似乎没有做任何事情(顺便说一下,我在Windows 10专业版上)。

import ctypes

LF_FACESIZE = 32
STD_OUTPUT_HANDLE = -11

class COORD(ctypes.Structure):
    _fields_ = [("X", ctypes.c_short), ("Y", ctypes.c_short)]

class CONSOLE_FONT_INFOEX(ctypes.Structure):
    _fields_ = [("cbSize", ctypes.c_ulong),
                ("nFont", ctypes.c_ulong),
                ("dwFontSize", COORD),
                ("FontFamily", ctypes.c_uint),
                ("FontWeight", ctypes.c_uint),
                ("FaceName", ctypes.c_wchar * LF_FACESIZE)]

font = CONSOLE_FONT_INFOEX()
font.cbSize = ctypes.sizeof(CONSOLE_FONT_INFOEX)
font.nFont = 12
font.dwFontSize.X = 11
font.dwFontSize.Y = 18
font.FontFamily = 54
font.FontWeight = 400
font.FaceName = "Lucida Console"

handle = ctypes.windll.kernel32.GetStdHandle(STD_OUTPUT_HANDLE)
ctypes.windll.kernel32.SetCurrentConsoleFontEx(
        handle, ctypes.c_long(False), ctypes.pointer(font))

我想知道是否有人对如何使角色变大有任何见解或想法。我曾尝试使用海龟绘制角色,但不幸的是它并不支持我想要使用的角色。

2 个答案:

答案 0 :(得分:0)

这比我想象的更棘手。虽然大多数Python图形界面都支持简单的Spade(BMP)Unicode字符:

print("\u2660")

获得六个黑桃(SMP)Unicode字符比较棘手:

print("\N{PLAYING CARD SIX OF SPADES}")
print("\U0001F0A6")
print("\uD83C\uDCA6")  # surrogate
  

我尝试过使用海龟画人物,但不幸的是   不支持我想要使用的字符。

Tkinter ,以及基于它构建的包,如 turtle.py Zelle的graphics.py ,取决于安装的内容Tk库的版本可以做。在我的系统上,他们可以处理 Spade 但不能六个黑桃

我对基于Java的 Processing 环境的Python模式没有更好的运气,尽管这可能反映了我对它缺乏经验。

一个我也没有经验的环境 PyQt5 ,似乎迎接了挑战。这是我对“你好世界”的重做!"程序显示卡:

from PyQt5.QtCore import QSize, Qt
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QGridLayout, QWidget
from PyQt5.QtGui import QFont

class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.setMinimumSize(QSize(640, 480))
        self.setWindowTitle("Playing Card Six of Spades")

        centralWidget = QWidget(self)
        self.setCentralWidget(centralWidget)

        gridLayout = QGridLayout(centralWidget)
        centralWidget.setLayout(gridLayout)

        font = QFont()
        font.setFamily("Apple Symbols")
        font.setPointSize(192)

        title = QLabel("\N{PLAYING CARD SIX OF SPADES}", self)
        #title = QLabel("\U0001F0A6", self)
        #title = QLabel("\uD83C\uDCA6", self)
        title.setFont(font)
        title.setAlignment(Qt.AlignCenter)

        gridLayout.addWidget(title, 0, 0)

if __name__ == "__main__":
    import sys

    app = QApplication(sys.argv)
    mainWin = MainWindow()
    mainWin.show()
    sys.exit(app.exec_())

enter image description here

部分挑战是虽然在Terminal.app下运行的Python会输出字符:

enter image description here

Terminal.app使用的字体(Monaco)没有卡片的字形,系统切换到Apple Symbols字体显示卡片。这需要一些实验来解决这个问题。

我知道您使用的是基于Windows的Python,所以上述所有内容都不适用于您的情况,但我的建议是查看 PyQt5

答案 1 :(得分:0)

无法在控制台/终端会话中控制特定字符的大小,无论是windows还是linux。

您可以更改所有会话字体大小,但不能更改单词处理器中可能出现的单个字符/单词/行。

使用的字体可能具有固定或可变的字符宽度,但您无法控制单个字符大小。