m0_70479479 2022-05-04 20:43 采纳率: 100%
浏览 271
已结题

生成条形码PyCharm 环境下可正常运行,利用Pyinstaller打包后系统报错OSError: cannot open resource,如何解决?(语言-python)

#报错信息
Exception in Tkinter callback
Traceback (most recent call last):
File "tkinter_init_.py", line 1921, in call
File "a1.py", line 29, in cz_cli
File "barcode\base.py", line 65, in save
File "barcode\codex.py", line 257, in render
File "barcode\base.py", line 105, in render
File "barcode\writer.py", line 227, in render
File "barcode\writer.py", line 372, in _paint_text
File "PIL\ImageFont.py", line 878, in truetype
File "PIL\ImageFont.py", line 875, in freetype
File "PIL\ImageFont.py", line 226, in init
OSError: cannot open resource
#报错代码
from pystrich.code128 import Code128Encoder
import openpyxl
import barcode
import os
from barcode.writer import ImageWriter
from openpyxl.drawing.image import Image
import tkinter
import winreg
#获取系统桌面路径
def get_desktop():
key = winreg.OpenKey(winreg.HKEY_CURRENT_USER,
r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders')
return winreg.QueryValueEx(key, "Desktop")[0]
Desktop_path=str(get_desktop())
wbb=openpyxl.Workbook()
wbb.create_sheet(title='打印',index=0)
wbb.save(Desktop_path+'/打印表.xlsx') # 保存
barcode.writer.FONT=os.path.join('AdobeGothicStd-Bold.otf')
def cz_cli():
#生成条形码保存为图片
bm='123456789'
tm = barcode.get_barcode_class('code128')
tmgs=tm(bm, writer=ImageWriter())
#条形码间距,文本与条码间距,文本尺寸,分辨率
tmgs.save(Desktop_path+'/code128',{'module_width':0.3,'text_distance':0.5,'font_size':20,'dpi':200})

#加载图片到EXCEL
wb = openpyxl.load_workbook(Desktop_path+'/打印表.xlsx')
ws = wb['打印']
img=Image(Desktop_path+'/code128.png')
ws.add_image(img,'B1')
wb.save(Desktop_path+'/打印表.xlsx')

dl_win = tkinter.Tk()
dl_win.title('登录窗口')
dl_win.geometry('%dx%d+%d+%d' % (300, 210, 100, 100))
cz_b = tkinter.Button(dl_win, text='生成', width=8, command=cz_cli)
cz_b.place(x=60, y=40)
dl_win.mainloop()

展开全部

  • 写回答

3条回答 默认 最新

  • 溪风沐雪 2022-05-05 01:26
    关注

    我估计问题出在barcode.writer.FONT=os.path.join('AdobeGothicStd-Bold.otf')这一行,因为报错提示信息是关于字体的,而你使用的这个字体并不是系统默认自带的字体,所以要不换一个字体试试,要不就把这个字体文件也一起打包到exe里边去,不然的话即使在你电脑上能运行,换个电脑依然会出问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
    m0_70479479 2022-05-05 05:10

    barcode.writer.FONT=os.path.join('AdobeGothicStd-Bold.otf')这段代码是报错后添加的

    回复
    溪风沐雪 回复 m0_70479479 2022-05-05 06:39

    我找到你的问题所在了,你默认使用了barcode\fonts\DejaVuSansMono.ttf这个字体文件,打包以后运行路径改变了,找不到这个字体文件路径,就报错了

    回复
    溪风沐雪 回复 m0_70479479 2022-05-05 06:53

    给个简单的解决方案:
    测试代码我简化了一下,目前生成的图片和表格和文件在同目录,把barcode\fonts\DejaVuSansMono.ttf的字体文件也复制一份到测试代码目录下就可以了,打包的时候可以考虑把字体文件一起打包到exe中,或者不打包,把字体文件拷贝到exe同目录下就可以了

    import openpyxl
    import barcode
    import tkinter
    
    def cz_cli():
        bm = '123456789'
        tm = barcode.get_barcode('code128')
        writer=barcode.writer.ImageWriter()
        writer.font_path = 'DejaVuSansMono.ttf'
        tmgs = tm(bm, writer=writer)
        tmgs.save('code128',{'module_width': 0.3, 'text_distance': 0.5, 'font_size': 20, 'dpi': 200})
        wb = openpyxl.load_workbook('打印表.xlsx')
        ws = wb['打印']
        img = openpyxl.drawing.image.Image('code128.png')
        ws.add_image(img, 'B1')
        wb.save('打印表.xlsx')
    
    wbb = openpyxl.Workbook()
    wbb.create_sheet(title='打印', index=0)
    wbb.save('打印表.xlsx')
    dl_win = tkinter.Tk()
    dl_win.title('登录窗口')
    dl_win.geometry('%dx%d+%d+%d' % (300, 210, 100, 100))
    cz_b = tkinter.Button(dl_win, text='生成', width=8, command=cz_cli)
    cz_b.place(x=60, y=40)
    dl_win.mainloop()
    

    img

    4
    回复
    展开全部5条评论
查看更多回答(2条)
编辑
预览

报告相同问题?

问题事件

  • 系统已结题 5月12日
  • 已采纳回答 5月5日
  • 创建了问题 5月4日

悬赏问题

  • ¥15 代写uni代码,app唤醒
  • ¥15 全志t113i启动qt应用程序提示internal error
  • ¥15 ensp可以看看嘛.
  • ¥80 51单片机C语言代码解决单片机为AT89C52是清翔单片机
  • ¥60 优博讯DT50高通安卓11系统刷完机自动进去fastboot模式
  • ¥15 minist数字识别
  • ¥15 在安装gym库的pygame时遇到问题,不知道如何解决
  • ¥20 uniapp中的webview 使用的是本地的vue页面,在模拟器上显示无法打开
  • ¥15 网上下载的3DMAX模型,不显示贴图怎么办
  • ¥15 关于#stm32#的问题:寻找一块开发版,作为智能化割草机的控制模块和树莓派主板相连,要求:最低可控制 3 个电机(两个驱动电机,1 个割草电机),其次可以与树莓派主板相连电机照片如下:
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部