Как импортировать методы из другого файла python кивы? - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь импортировать методы из другого файла python kivy и получаю следующую ошибку:

[CRITICAL] [Window      ] Unable to find any valuable Window provider. Please enable debug logging (e.g. add -d if running from the command line, or change the log level in the config) and re-run your app to identify potential causes
sdl2 - TypeError: __import__() takes at least 1 argument (0 given)
  File "C:\Users\liort\AppData\Local\Programs\Python\Python37\lib\site-packages\kivy\core\__init__.py", line 63, in core_select_lib
    fromlist=[modulename], level=0)

[CRITICAL] [App         ] Unable to get a Window, abort.

без строки: from scripts.LeptonAPI import initCam, startLepton, stopLepton kivy работает.

что я сделал не так?

где моя ошибка?

вот мой код:

import cv2
from kivy.app import App
from kivy.clock import Clock
from kivy.graphics.texture import Texture
from kivy.lang import Builder
from kivy.uix.image import Image
from kivy.uix.screenmanager import ScreenManager, Screen
from datetime import datetime

from scripts.LeptonAPI import initCam, startLepton, stopLepton

# cameraID2 = 0  # id of FLIR Lepton
cameraID1 = 1  # id of SMI Depstech


class SMICamera(Image):
    def __init__(self, parent, capture, **kwargs):
        super(SMICamera, self).__init__(**kwargs)
        self.capture = capture  # data to read
        self.parent = parent  # this object's parent (= box layout)
        self.started = False  # start state
        self.TurnOn = False  # to turn on camera

    # starts the "Camera", capturing at 30 fps by default
    def start(self, fps=30):
        Clock.schedule_interval(self.update, 1.0 / fps)

    def update(self, dt):
        ret, self.frame = self.capture.read()
        if ret:
            if self.started:
                out.write(self.frame)
            # convert it to texture
            image_texture = self.get_texture_from_frame(self.frame, 0)
            # display image from the texture
            self.texture = image_texture
            self.parent.ids['imageCamera'].texture = self.texture

    def stop(self):
        Clock.unschedule(self.update)

    def get_texture_from_frame(self, frame, flipped):
        buffer_frame = cv2.flip(frame, flipped)
        buffer_frame_str = buffer_frame.tostring()
        image_texture = Texture.create(size=(frame.shape[1], frame.shape[0]), colorfmt='bgr')
        # print('(' + str(frame.shape[1]) + ';' + str(frame.shape[0]) + ')')
        image_texture.blit_buffer(buffer_frame_str, colorfmt='bgr', bufferfmt='ubyte')
        return image_texture

    def start_stop_RecordVideo(self):
        self.started = not self.started


class CameraScreen(Screen):
    turnOn = False
    # initialize the "Camera"
    SMICamera = Image(source='logo.jpg')

    def startCamera(self, imageCamera, buttonTurnOn, buttonStart, buttonStop, buttonBack):
        if not self.turnOn:
            self.capture = cv2.VideoCapture(cameraID1)
            self.SMICamera = SMICamera(self, self.capture)
            imageCamera = self.SMICamera
            self.SMICamera.start()
            # Set as started, so next action will be 'Pause'
            self.turnOn = True
            buttonTurnOn.text = 'Turn Off'
            # when started, let start enabled
            buttonStop.disabled = False  # enabled
            # Enable the Start (button)
            buttonStart.disabled = False
            # Prevent the back (button)
            buttonBack.disabled = True
            initCam(filename,now)
        else:  # press on TurnOff
            self.turnOn = False  # stop what was "started"
            buttonTurnOn.text = 'Turn ON'
            self.SMICamera.stop()
            # Reset camera to home image
            self.SMICamera.stop()
            self.SMICamera = Image(source='logo.jpg')
            imageCamera.source = self.SMICamera.source
            imageCamera.reload()
            # Prevent the Stop (button)
            buttonStop.disabled = True
            # Prevent the Start (button)
            buttonStart.disabled = True
            # Enabled the back (button)
            buttonBack.disabled = False
            # Release the capture
            self.capture.release()

    # start to make a video and run Lepton Camera
    def startVideo(self):
        if self.turnOn:  # Was running at click
            self.SMICamera.start_stop_RecordVideo()
            startLepton()
            # LeptonCam.startLepton()
            # runpy.run_path(path_name='LeptonAPI.py')

    # stop the video
    def stopVideo(self):
        self.SMICamera.start_stop_RecordVideo()
        stopLepton()
        # LeptonCam.stopLepton()


class MainScreen(Screen):
    def exitApp(self):
        MainApp.stop()


class MainApp(App):
    def build(self):
        screenManager = ScreenManager()
        screenManager.add_widget(MainScreen(name="main"))
        screenManager.add_widget(CameraScreen(name="camera"))
        return screenManager


# Start the Camera App
if __name__ == '__main__':
    MainApp().run()

1 Ответ

0 голосов
/ 23 апреля 2020

для импорта файла python в другой, синтаксис

from pythonfile import classesyouwanttoimport
  • не добавляйте расширение .py при импорте
  • , убедитесь, что pythonfile импортируемый не имеет main функции

Теперь отправленный вами код

from scripts.LeptonAPI import initCam, startLepton, stopLepton

ищет файл LeptionAPI.py в папке scripts, а затем импортировать functions initCam, startLepton, stopLepton

это то, что вы пытаетесь достичь?

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