yangxiaoyu@STB-240:~/test/c/mem$ ./a.out &
[1] 163026
yangxiaoyu@STB-240:~/test/c/mem$ start of heap = 0xb7b010
end of heap = 0xb9d000
sizeOfHeap = 0x21ff0
yangxiaoyu@STB-240:~/test/c/mem$ cat /proc/163026/map
map_files/ maps
yangxiaoyu@STB-240:~/test/c/mem$ cat /proc/163026/map
map_files/ maps
yangxiaoyu@STB-240:~/test/c/mem$ cat /proc/163026/maps
00400000-00401000 r-xp 00000000 08:12 266873328 /home/yangxiaoyu/test/c/mem/a.out
00600000-00601000 r--p 00000000 08:12 266873328 /home/yangxiaoyu/test/c/mem/a.out
00601000-00602000 rw-p 00001000 08:12 266873328 /home/yangxiaoyu/test/c/mem/a.out
00b7b000-00b9d000 rw-p 00000000 00:00 0 [heap]
7f499604e000-7f499620c000 r-xp 00000000 08:03 9572117 /lib/x86_64-linux-gnu/libc-2.19.so
7f499620c000-7f499640c000 ---p 001be000 08:03 9572117 /lib/x86_64-linux-gnu/libc-2.19.so
7f499640c000-7f4996410000 r--p 001be000 08:03 9572117 /lib/x86_64-linux-gnu/libc-2.19.so
7f4996410000-7f4996412000 rw-p 001c2000 08:03 9572117 /lib/x86_64-linux-gnu/libc-2.19.so
7f4996412000-7f4996417000 rw-p 00000000 00:00 0
7f4996417000-7f499643a000 r-xp 00000000 08:03 9572106 /lib/x86_64-linux-gnu/ld-2.19.so
7f4996624000-7f4996627000 rw-p 00000000 00:00 0
7f4996638000-7f4996639000 rw-p 00000000 00:00 0
7f4996639000-7f499663a000 r--p 00022000 08:03 9572106 /lib/x86_64-linux-gnu/ld-2.19.so
7f499663a000-7f499663b000 rw-p 00023000 08:03 9572106 /lib/x86_64-linux-gnu/ld-2.19.so
7f499663b000-7f499663c000 rw-p 00000000 00:00 0
7ffde625a000-7ffde627b000 rw-p 00000000 00:00 0 [stack]
7ffde633b000-7ffde633d000 r--p 00000000 00:00 0 [vvar]
7ffde633d000-7ffde633f000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
yangxiaoyu@STB-240:~/test/c/mem$
输出
Tkinter回调中的异常
追溯(最近一次通话):
__call__返回self.func(* args)中的文件“ C:\ Users \ Mevada \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ tkinter__init __。py”,行1702
在func_image中的文件“ test.py”,第9行
font_type_1 = ImageFont.truetype(str(combo.get()),18)
文件“ C:\ Users \ Mevada \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ PIL \ ImageFont.py”,行280,以truetype返回FreeTypeFont(字体,大小,索引,编码,layout_engine)
__init__layout_engine = layout_engine中的文件“ C:\ Users \ Mevada \ AppData \ Local \ Programs \ Python \ Python37 \ lib \ site-packages \ PIL \ ImageFont.py”(第145行)
OSError:无法打开资源
谢谢...
答案 0 :(得分:2)
import tkinter as tk
from tkinter import ttk
from PIL import Image,ImageDraw,ImageFont
import matplotlib.font_manager as fm
root = tk.Tk()
def func_image():
image = Image.open(r'E:\side_300.png')
font_type_1 = ImageFont.truetype(fm.findfont(fm.FontProperties(family=combo.get())),18)
draw = ImageDraw.Draw(image)
draw.text((50,50),text='Hello',fill='red',font=font_type_1)
image.show()
fonts = list(set([f.name for f in fm.fontManager.ttflist]))
fonts.sort()
combo = ttk.Combobox(root,value=fonts)
combo.pack()
btn = ttk.Button(root,text='Click Me',command=func_image)
btn.pack()
root.mainloop()
答案 1 :(得分:0)
ImageFont.truetype
要求您提供一个文件名。您没有给它一个文件名,而是给它一个字体系列的名称。 Tkinter的font.families()
不返回文件名。
答案 2 :(得分:0)
PIL似乎找不到font
。
在计算机中找到字体文件。在Windows中,它始终位于C:\WINDOWS\Fonts
目录中。选择一个并像这样修改您的第9行:
font_type_1 = ImageFont.truetype("bahnschrift.ttf",18)
bahnschrift.ttf
只是我计算机上的一个示例,我不确定它是否存在于您的计算机上。
答案 3 :(得分:0)
它不起作用,因为您必须在此处插入字体文件名作为第一个参数:ImageFont.truetype(str(combo.get()),18)
。
例如,如果尝试使用 arial ,则您将成功(当然,如果您的计算机上安装了Arial)。哦,那个函数是区分大小写的,所以您必须用小写形式写它,因为文件名实际上是 arial.ttf (顺便说一下,您可以删除扩展名)。
因此,您的组合框不起作用,因为例如当您选择名为 Courier New 的字体时,PIL将找不到它,因为其文件名是 cour.ttf < / em>。不幸的是,您不能在ImageFont上使用tkinter的字体列表,在这种情况下,我没有解决方法。
正如我所说,这可能有用,但是您必须放开组合框:ImageFont.truetype('arial',18)
在我开始之前,还有一个重要的注意事项:如果您使用的不是Windows操作系统,则必须输入字体文件的完整路径。