wxpython закрывает приложение при запуске команд sqlite3 - PullRequest
0 голосов
/ 26 сентября 2018

Я пытаюсь сделать программу с SQLite3 в Python 3.7.Интерфейс с WxPython 4.0.3, а затем я компилирую его с Nuitka 0.6.0.В других проектах WxPython, скомпилированный в Nuitka, работает хорошо.Но в данный момент я пытаюсь запустить базу данных с 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 голосов
/ 29 сентября 2018

Через некоторое время исследования я нашел решение.

Проблема в том, что python запускается при щелчке правой кнопкой мыши и "открытии с python".Если у вас есть скрипт, который просто:

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

Если вы откроете этот скрипт, открыв cmd и переместившись с помощью cd в папку с «this_code.py».Вы увидите, что терминал печатает каталог папки, в которой вы находитесь. Но если вы щелкнете правой кнопкой мыши и «откройте с помощью python» в терминале, выведите путь к System32.Также вам понадобится ввод, чтобы заморозить терминал, ожидая, когда пользователь нажмет ввод, потому что если вы не включите «ввод», терминал закроется, прежде чем вы сможете увидеть каталог (или ошибка, напечатанная во время попытки, кроме).

Итак, когда у меня есть SQLite.При открытии файла правой кнопкой мыши и открыть с помощью Python.SQLite пытается найти или создать «database.db» в папке System32.И есть проблема с разрешением.Чтобы решить эту проблему, можно открыть файл независимо от того, как и где.Просто добавьте:

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)

И это всегда будет иметь одинаковое правильное поведение, независимо от того, как вы его открываете или откуда вы его вызываете.

0 голосов
/ 26 сентября 2018

Я мог бы что-то упустить здесь, но похоже, что если вы делаете отдельную установку с использованием Nuitka, это исключает sqlite, который может быть причиной проблемы.Смотрите список изменений Нуитки под заголовком Оптимизация здесь:

Я знаю, что смог использовать sqlite и wxPython при использовании py2exe и PyInstaller.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...