转换为apk或exe时Python kivy应用程序不工作

2024-06-25 23:15:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近与Kivy和KivyMD一起制作了一个PDF合并GUI,当通过控制台运行它时,它运行得非常出色,执行“python3 main.py”,但当通过Buildozer将其转换为APK或使用Pyinstaller将其转换为EXE时,它会在启动时立即崩溃/关闭

我是这里的一个真正的傻瓜,所以我真的不知道从哪里开始解决这个问题,我真的非常感谢你的帮助,提前谢谢你!:)

from plyer import filechooser

import PyPDF2
from kivymd.app import MDApp
from kivymd.uix.button import MDRectangleFlatButton
from kivymd.uix.label import MDLabel
from kivymd.uix.screen import Screen
from kivymd.uix.textfield import MDTextFieldRound, MDTextField
from kivy.lang.builder import Builder

pdfSaveFileNameTextInput = """
MDTextField:
    hint_text: "Insert name of new PDF file"
    pos_hint: {'center_x': 0.5, 'center_y': 0.35}
    size_hint_x: None
    width: 200

"""

class PDFMergeApp(MDApp):
    def build(self):
        application_window = Screen()
        self.theme_cls.primary_palette = "Blue"
        self.theme_cls.primary_hue = "500"
        self.theme_cls.theme_style = "Light"

        label = MDLabel(text="Simple PDF Merger",
                        halign="center",
                        pos_hint={'center_x': 0.5, 'center_y': 0.7},
                        font_style="H3")
        application_window.add_widget(label)

        self.textInput = Builder.load_string(pdfSaveFileNameTextInput)
        application_window.add_widget(self.textInput)

        btn_flat = MDRectangleFlatButton(text="Merge PDFs",
                                         pos_hint={'center_x': 0.5, 'center_y': 0.2}
                                         )
        btn_flat.bind(on_release=self.pressed)
        application_window.add_widget(btn_flat)

        return application_window

    def pressed(self, instance):
        filename = filechooser.open_file(title="Choose pdfs to merge",
                                         multiple=True,
                                         filters=[("PDF Files (.pdf)", "*.pdf")])
        pdfOutputFileDirectory = filechooser.choose_dir()
        pdfOutputFileDirectory = ''.join(pdfOutputFileDirectory)

        pdfOutputFileName = self.textInput.text

        pdfOutputFile = open(pdfOutputFileDirectory + "\\" + pdfOutputFileName + ".pdf",
                             "wb")  # fd.asksaveasfile(mode='wb', defaultextension=".pdf")
        pdfWriter = PyPDF2.PdfFileWriter()

        for x in filename:
            pdfFiles = open(x, "rb")
            pdfReader = PyPDF2.PdfFileReader(pdfFiles)
            for pageNum in range(pdfReader.numPages):
                pageObj = pdfReader.getPage(pageNum)
                pdfWriter.addPage(pageObj)
                pdfWriter.write(pdfOutputFile)

        self.textInput.text = ""
        pdfOutputFile.close()


PDFMergeApp().run()


Tags: textfromimportselfpdfapplicationtextinputwindow
2条回答

您应该尝试通过设置在插件中安装kivy 2.0.0rc4。在哪一个程序中进行编码。你的buildozer.spec应该是这样的:

# comma separated e.g. requirements = sqlite3,kivy
requirements = python3,kivy==2.0.0rc4,kivymd==0.104.2,plyer,pillow,sdl2_ttf==2.0.15,pypdf2

出现此问题是因为您可能没有指定在kivymd/kivy项目文件中使用的第三方模块

打开buildozer.spec文件,在需求中添加PyPDF2

之后,完全删除.buildozer目录或在终端中运行buildozerandroid clean

然后再次编译:)

相关问题 更多 >