【问题标题】:Python - Increase size of specific console outputPython - 增加特定控制台输出的大小
【发布时间】:2017-09-20 01:49:45
【问题描述】:

正在为学校制定一项计划。完成了要求的部分,现在我只是在做一些有趣的事情。

基本上你必须编写一个程序,从一副牌中随机抽取一张牌,然后打印出面值和花色。简单——我花了大约 5 分钟。

我正在尝试使用 Unicode 字符为作业添加视觉效果。我找到了these,并编写了一些代码来根据卡片和花色选择正确的 Unicode 字符。唯一的问题是当字符被打印出来时,it's tiny。它在我的屏幕上可能有 2 毫米高,远不足以看到卡片的正面。

我一直在寻找一些增加输出大小的方法,但无济于事。我在搜索中找到了这个 sn-p 代码,但它似乎没有做任何事情(顺便说一下,我使用的是 Windows 10 Pro)。

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))

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

【问题讨论】:

    标签: python unicode


    【解决方案1】:

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

    print("\u2660")
    

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

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

    我曾尝试使用海龟来绘制角色,但不幸的是 不支持我要使用的字符。

    Tkinter,以及像 turtle.pyZelle's graphics.py 这样构建的软件包,取决于安装的 Tk 版本图书馆可以。在我的系统上,他们可以处理Spade,但不能处理Six of Spades

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

    一个我也没有经验的环境,PyQt5,似乎可以应对挑战。这是我对“Hello World!”的重做。显示卡片的程序:

    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_())
    

    部分挑战在于,尽管在 Terminal.app 下运行的 Python 会打印字符:

    Terminal.app 使用的字体(摩纳哥)没有卡片的字形,系统切换到 Apple Symbols 字体来显示卡片。需要进行一些实验才能弄清楚。

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

    【讨论】:

      【解决方案2】:

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

      您可以更改所有会话字体大小,但不能像您在文字处理器中所期望的那样更改单个字符/单词/行。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-28
        • 1970-01-01
        • 1970-01-01
        • 2011-02-19
        • 1970-01-01
        相关资源
        最近更新 更多