小编AFo*_*eee的帖子

如何在 Apache POI 中重用字体?

每次调用“workbook.createFont()”都会向工作簿添加新字体。有没有方便的方法来重用这些字体?

显然,我可以在程序中重用字体对象。但是当我重新打开Java程序时,我需要一种方法来取回Font对象。

虽然可以使用“workbook.getNumberOfFonts()”和“workbook.getFontAt(i)”,但使用这些方法并不是很方便。

我的解决方法:
我在创建字体时添加一个 CustomProperty,其中保存了字体对应的编号。

Map<String, Font> fonts = new HashMap<>();

CustomProperties customProps  = workbook.getProperties().getCustomProperties(); 

if(customProps.contains("arial_12_b")) {
    short index = customProps.getProperty("arial_12_b").getI2();
    fonts.put("arial_12_b", workbook.getFontAt(index));
} else {                                
    Font font = workbook.createFont();
    font.setFontName("Arial");
    font.setFontHeightInPoints((short)12);
    font.setBold(true);

    customProps.addProperty("arial_12_b", font.getIndex());

    fonts.put("arial_12_b", font);
}
Run Code Online (Sandbox Code Playgroud)

CellStyle 通过 CellUtil 类解决了同样的问题,该类检查 CellStyle 是否已存在,如果不存在则创建它。有类似 Font 的东西吗?

最好的问候
Afoee

java excel fonts helper apache-poi

5
推荐指数
1
解决办法
5385
查看次数

如何组合多个TUI表单来编写更复杂的应用程序?

我想编写一个带有基于T ext的U ser I接口(TUI)的程序,它由几种形式组成.

介绍几种形式.

  • 第一个表单包含"列表".每个列表元素代表一个按钮.
  • 如果按下相应的按钮,则应出现另一个表单,其中可以输入列表条目的数据.
  • 然后再次显示第一个表单(使用更新的列表条目).

这是我的尝试,它使用库npyscreen但不返回第一个表单.代码也不包含更改列表项的逻辑.

#! /usr/bin/env python3
# coding:utf8

import npyscreen

# content
headers = ["column 1", "column 2", "column 3", "column 4"]
entries = [["a1", "a2", "a3", "a4"],
           ["b1", "b2", "b3", "b4"],
           ["c1", "c2", "c3", "c4"],
           ["d1", "d2", "d3", "d4"], 
           ["e1", "e2", "e3", "e4"]]


# returns a string in which the segments are padded with spaces.
def format_entry(entry):
    return "{:10} | {:10} | {:10} | {:10}".format(entry[0], entry[1] , …
Run Code Online (Sandbox Code Playgroud)

python tui console-application urwid npyscreen

5
推荐指数
1
解决办法
624
查看次数

我可以将打印作业直接从 python 程序发送到 CUPS 打印服务器的 IP 地址吗?

我有两台具有固定 IP 地址的 linux 计算机:

  1. 打印服务器,通过CUPS共享连接的打印机。
    (服务器的 IP 地址为“192.168.1.2”,打印机名为“test_printer”。)
  2. 一台运行 python 应用程序的计算机,应该能够使用这个打印服务器。

不幸的是,通过 CUPS 的打印机传播似乎不能可靠地工作(可能是由于网络结构)。

我可以将打印作业直接从 python 程序发送到 CUPS 打印服务器吗?
如果是这样,你能提供一个小例子吗?

理论上,我只会将格式正确的数据发送到 IP 地址 + 端口,但我没有让它工作......


以下是我迄今为止发现的方法以及我遇到的问题:

  • 命令'lpr'

    import subprocess
    
    lpr = subprocess.Popen("usr/bin/lpr", stdin=subprocess.PIPE)        # on some distros the command is 'lp'
    lpr.stdin.write("hello world\n")
    lpr.stdin.close()
    
    Run Code Online (Sandbox Code Playgroud)

    依赖于通过 CUPS 的打印机传播。


  • python 模块pycups

    import cups
    
    with open("/home/user/Documents/some.txt", "w") as f:
        f.write("hello world\n")
    
    conn = cups.Connection()
    conn.printFile("test_printer", "/home/user/Documents/some.txt", "some_title", {})
    
    Run Code Online (Sandbox Code Playgroud)

    在我可以使用打印机之前,我必须先添加它,这又依赖于通过 CUPS 的传播。
    我也没有conn.addPrinter()去上班。


python printing cups network-printers python-3.x

5
推荐指数
1
解决办法
4094
查看次数

为什么math.isclose()无法检测非常大的值之间的微小差异?

math.isclose()存在以确定两个值之间的差异是否在容差范围内.
据我了解,此容差的默认值为:

  • rel_tol = 1e-09
  • abs_tol = 0.0


如果我将两个值都设置为0.0,那么它应该测试两个值是否相同.

这似乎适用于较小的值:

import math

math.isclose(1000, 1000, rel_tol=0.0, abs_tol=0.0)                       # True
math.isclose(1000, 1001, rel_tol=0.0, abs_tol=0.0)                       # False
Run Code Online (Sandbox Code Playgroud)

但它失败了很大的值:

import math
import sys

math.isclose(sys.maxsize, sys.maxsize,      rel_tol=0.0, abs_tol=0.0)    # True
math.isclose(sys.maxsize, sys.maxsize-1,    rel_tol=0.0, abs_tol=0.0)    # True
math.isclose(sys.maxsize, sys.maxsize-100,  rel_tol=0.0, abs_tol=0.0)    # True
math.isclose(sys.maxsize, sys.maxsize-1000, rel_tol=0.0, abs_tol=0.0)    # False
Run Code Online (Sandbox Code Playgroud)

似乎还有相对的宽容?


为什么会出现这种情况?

上面的代码是用Python 3.5.2运行的.


更新1:

当使用非常大的浮点值时,似乎会发生类似的行为:

import math
import sys

m = sys.float_info.max                                                    # type 'float'

math.isclose(m, m)                                                        # True
math.isclose(m, m-1.0)                                                    # True …
Run Code Online (Sandbox Code Playgroud)

python precision compare equality python-3.x

4
推荐指数
1
解决办法
359
查看次数

为什么 Promise 返回的错误的堆栈跟踪似乎不完整?

在重新抛出被拒绝的 Promise 的错误时,我注意到堆栈跟踪似乎不完整。

例如:

// returns a Promise that is later on rejected.
function a() {
    return new Promise((resolve, reject)=>{
        setTimeout(()=>reject(new Error("a")), 2000);
    });
}

async function b() {
    await a();
}

async function c() {
    await b();
}

// testing
async function test() {
    let printError = (error)=>console.log(error.stack);

    await a().catch(printError);
    await b().catch(printError);
    await c().catch(printError);
}

test();
Run Code Online (Sandbox Code Playgroud)

所有三个函数调用都会test()打印以下内容:

Error: a
    at <anonymous>:4:31
Run Code Online (Sandbox Code Playgroud)

我本来期望的是这样的:

Error: a
    at <anonymous>:4:31
    at new Promise (<anonymous>)
    at a (<anonymous>:3:12)
    at b2 (<anonymous>:13:15)
    at …
Run Code Online (Sandbox Code Playgroud)

javascript error-handling stack-trace promise

4
推荐指数
1
解决办法
1345
查看次数

如何使python库“ urwid”的按钮看起来漂亮?

urwid中按钮的默认外观很有用,但在我眼中却不是很漂亮。当多个按钮并排显示时,这也可能会令人不快。

如何获得一个带有边框和居中文本的按钮,并在其获得焦点时更改其颜色?

在此处输入图片说明

python tui button console-application urwid

3
推荐指数
1
解决办法
607
查看次数