运行sqlite3命令时,wxpython关闭应用程序

时间:2018-09-26 10:28:03

标签: python sqlite wxpython

我正在尝试使用python 3.7中的SQLite3编写程序。该接口使用WxPython 4.0.3,然后使用Nuitka 0.6.0进行编译。在其他项目中,在Nuitka中编译的WxPython效果很好。但是目前,我尝试使用SQLite启动数据库,程序会自动关闭。

看到可能发生的情况后,我通过右键单击并在程序的根文件中“使用python打开”来启动代码。并且它也自动关闭。但是,如果在文件夹中打开CMD并使用“ python app.py”运行文件,则该程序运行良好。

在这里,我将保留简化脚本。如果您只用self.db = sqlite3.connect("database.db")删除该行,然后右键单击打开代码并使用python打开,则程序将打开并运行良好。但是当您离开与SQLite建立连接的那一刻,它就停止了工作。我不知道从哪里得到它,当我在Google中搜索时,得到的结果与此无关。

代码:

import wx
import sqlite3

class MyFrame(wx.Frame):
    def __init__(self):
        super(MyFrame, self).__init__(None, id=wx.ID_ANY, title="PDF database",
                                      pos=wx.DefaultPosition, size=wx.Size(500, 300),
                                      style=wx.DEFAULT_FRAME_STYLE | wx.TAB_TRAVERSAL)

        self.db = sqlite3.connect("database.db")

if __name__ == "__main__":
    app = wx.App()
    main_window = MyFrame()
    main_window.Show()
    app.MainLoop()

`

2 个答案:

答案 0 :(得分:0)

我可能在这里丢失了一些东西,但是看起来如果您使用Nuitka进行独立安装,它会排除可能导致问题的sqlite。在此处的优化标题下查看Nuitka的更改日志:

我知道我在使用py2exe和PyInstaller时已经能够使用sqlite和wxPython。

答案 1 :(得分:0)

经过一段时间的研究,我找到了解决方案。

此问题是右键单击并“使用python打开”时python开始的地方。如果您的脚本很简单:

import os
print(os.getcwd())
input("whatever")

如果通过打开cmd并与cd一起移动到带有“ this_code.py”的文件夹来打开该脚本。您会看到终端显示您所在文件夹的目录。但是,如果右键单击并在终端中“用python打开”,则会打印出System32的路径。另外,您还需要输入来冻结终端,以等待用户按Enter键,因为如果不包括“ input”,则终端将关闭,然后您才能看到目录(或在try-except上打印的错误)。 / p>

所以当我有SQLite时。用右键单击打开文件并用python打开时。 SQLite尝试在System32文件夹中查找或创建“ database.db”。还有一个权限问题。为了解决这个问题,无论如何或在何处都可以打开文件。只需添加:

import os
script_dir = os.path.dirname(os.path.abspath(__file__))

script_dir将是文件的位置,而不是被称为Python的位置。因此,当您打开与SQLite的连接时。使用sqlite3.connect(f'file:{script_dir}/database.db', uri=True)

无论您如何打开它或从何处调用它,它始终具有相同的正确行为。