【问题标题】:Cx_freeze converted executable is not working for ttkbootstrap scriptsCx_freeze 转换的可执行文件不适用于 ttkbootstrap 脚本
【发布时间】:2022-11-12 23:16:32
【问题描述】:

使用cx_freeze 将我的ttkbootstrap 项目文件转换为exe 后。

当我运行 executable 文件时。我得到这个错误,我的program 没有执行。

  File "C:\Users\KANWAR\AppData\Local\Programs\Python\Python310\Lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 120, in run
    module_init.run(name + "__main__")
  File "C:\Users\KANWAR\AppData\Local\Programs\Python\Python310\Lib\site-packages\cx_Freeze\initscripts\Console.py", line 16, in run
    exec(code, module_main.__dict__)
  File "main.py", line 207, in <module>
  File "C:\Users\KANWAR\AppData\Local\Programs\Python\Python310\lib\site-packages\ttkbootstrap\window.py", line 273, in __init__
    self._style = Style(themename)
  File "C:\Users\KANWAR\AppData\Local\Programs\Python\Python310\lib\site-packages\ttkbootstrap\style.py", line 488, in __init__
    localization.initialize_localities()
  File "C:\Users\KANWAR\AppData\Local\Programs\Python\Python310\lib\site-packages\ttkbootstrap\localization\msgs.py", line 9, in initialize_localities
    m.initialize()
  File "C:\Users\KANWAR\AppData\Local\Programs\Python\Python310\lib\site-packages\ttkbootstrap\localization\msgs.py", line 27, in initialize
    MessageCatalog.set_many(self.locale, *messages)
  File "C:\Users\KANWAR\AppData\Local\Programs\Python\Python310\lib\site-packages\ttkbootstrap\localization\msgcat.py", line 142, in set_many
    return int(root.tk.eval(out))
_tkinter.TclError: invalid command name "::msgcat::mcmset"

在我的script 中,我包含了以下库文件。

from ttkbootstrap import *
from ttkbootstrap.constants import *
from ttkbootstrap.dialogs.dialogs import Messagebox

我每次都面临这个问题。请问有什么解决办法吗。

这是我的setup.py

from cx_Freeze import setup, Executable
import sys

base = None
if (sys.platform == "win32"):
    base = "Win32GUI"    # Tells the build script to hide the console.

setup(name = "e_mail",
      version = "0.1",
      description = 'PURF BY KANWAR ADNAN',
      executables = [Executable(r"main.py")]
      )

【问题讨论】:

    标签: python tkinter cx-freeze


    【解决方案1】:

    下面不是真正的解决方案。 只有急救。

    在您环境的 Bootstrap 文件夹(站点包 tkbootstraplocalization)中, 请改写 msgcat.py 如下。

    from ttkbootstrap.window import get_default_root
    
    
    class MessageCatalog:
        @staticmethod
    
        def translate(src):
            return src
    
        @staticmethod
        def locale(newlocale=None):
            return newlocale
    
        @staticmethod
        def preferences():
            return []
    
        @staticmethod
        def load(dirname):
            return 0
    
        @staticmethod
        def set(locale, src, translated=None):
            pass
    
        @staticmethod
        def set_many(locale, *args):
            return 1
    
        @staticmethod
        def max(*src):
            return 1
    

    此操作具有禁用切换语言能力的副作用。

    【讨论】:

      【解决方案2】:

      好吧,我刚刚安装了auto-py-to-exe并将我的script转换为exe没有任何问题。

      另外,我使用了虚拟环境术语。我安装了virtualenv 并创建了一个虚拟环境,这帮助我减少了450+ MBs 的应用程序大小。

      因为auto-py-to-exe 几乎包含了python lib 中的所有库。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-05-15
        • 1970-01-01
        • 1970-01-01
        • 2018-01-12
        • 1970-01-01
        • 2019-04-07
        • 2013-10-26
        相关资源
        最近更新 更多