Встроить Navit в Kivy Screen

После некоторых проблем с разными фреймворками я начал работать с Kivy над своим настоящим проектом. Некоторые части сейчас работают нормально, и я приступаю к реализации других функций шаг за шагом.

Я новичок в Python и не совсем уверен, какой фреймворк мне выбрать. Я надеюсь, что есть решение в том пути, которым я сейчас иду. В противном случае мне пришлось бы начинать с самого начала.

Фактическая проблема в том, что я пытаюсь встроить Navit как собственное окно на переднем плане перед моим графическим интерфейсом. Я читал о многих примерах кода, но большинство из них - это просто фрагменты реального кода. Любой из них основан на PyQt4. Прежде всего, я не могу установить PyQt4 с PyCharm, но могу установить PyQt5. В этой версии я сначала попытался получить что-то от Navit на свой экран, но я действительно не знаю, с чего начать.

В своем коде я попытался встроить собственный код внедрения Navit в свой Kivy ScreenApp Funktion, но я не знаю, с чего начать. То, как я пробовал это в коде, - это запуск окна Kivy, заканчивающийся белым экраном со следующим сообщением об ошибке:

      The file is loaded multiples times, you might have unwanted behaviors.

Может быть, здесь кто-нибудь сможет мне помочь.

Я говорю о следующей части кода:

      from __future__ import absolute_import, division, print_function
import sys
import os

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.lang import Builder
from kivy.core.window import Window
from kivy import Config
from subprocess import Popen
from PySide6 import *
from PyQt5 import QtCore, QtWidgets, QtWebChannel, QtNetwork

Builder.load_file('screen.kv')

status = True

class ScreenLayout(Widget):
    def map_click(self):
        self.ids.ButtonMap.source = 'Assets/Buttons/ButtonMap_s.png'
    def map_release(self):
        self.ids.ButtonMap.source = 'Assets/Buttons/ButtonMap.png'

    def phone_click(self):
        self.ids.ButtonPhone.source = 'Assets/Buttons/ButtonPhone_s.png'
    def phone_release(self):
        self.ids.ButtonPhone.source = 'Assets/Buttons/ButtonPhone.png'

    def warn_click(self):
        self.ids.ButtonWarn.source = 'Assets/Buttons/ButtonWarn_s.png'
    def warn_release(self):
        self.ids.ButtonWarn.source = 'Assets/Buttons/ButtonWarn.png'

    def bib_click(self):
        self.ids.ButtonBib.source = 'Assets/Buttons/ButtonBib_s.png'
    def bib_release(self):
        self.ids.ButtonBib.source = 'Assets/Buttons/ButtonBib.png'

    def free_click(self):
        self.ids.ButtonFree.source = 'Assets/Buttons/ButtonFree_s.png'
    def free_release(self):
        self.ids.ButtonFree.source = 'Assets/Buttons/ButtonFree.png'

    def ac_click(self):
        self.ids.ButtonAC.source = 'Assets/Buttons/ButtonAC_s.png'
    def ac_release(self):
        self.ids.ButtonAC.source = 'Assets/Buttons/ButtonAC.png'

    def vol_click(self):
        self.ids.ButtonVol.source = 'Assets/Buttons/ButtonMute.png'
    def vol_release(self):
        #check status
        global status

        if status:
            self.ids.ButtonVol.source = 'Assets/Buttons/ButtonMute.png'
            status = not status
        else:
            self.ids.ButtonVol.source = 'Assets/Buttons/ButtonVol.png'
            status = not status

class ScreenApp(App):

    def build(self):
        app = QtWidgets.QApplication(sys.argv)
        win = QtWidgets.QWidget()
        winID = int(win.winId())

        sub_win = QtGui.QWindow.fromWinId(winID)
        container = QtWidgets.QWidget.createWindowContainer(sub_win)

        sub_win_id = int(container.winId())

        process = QtCore.QProcess(container)
        os.environ['NAVIT_XID'] = str(winId)
        process.startDetached("navit")

        return ScreenLayout()




Window.size = (1024, 768)
if __name__ == '__main__':
    ScreenApp().run()

Мой файл .kv выглядит следующим образом:

      <ScreenLayout>:

    RelativeLayout:
        canvas.before:
            Rectangle:
                pos: 0,0
                size: 1024, 768
                source: 'Assets/Buttons/Background.png'

            Rectangle:
                pos: 33,635
                size: 235, 98
                source: 'Assets/Buttons/SpeedFrame.png'

            Rectangle:
                pos: 205,644
                size: 49, 80
                source: 'Assets/Buttons/kmh.png'

            Rectangle:
                pos: 33,20
                size: 285, 98
                source: 'Assets/Buttons/VolFrame.png'

        Label:
            text: '102'
            pos: 75, 635
            font_size: 90
            font_name: 'Assets/Fonts/RedHatDisplay-Regular.ttf'


        Button:
            size: 98, 98
            pos: 293 , 635
            background_color: 0,0,0,0
            on_press: root.map_click()
            on_release: root.map_release()


            Image:
                id: ButtonMap
                source: 'Assets/Buttons/ButtonMap.png'
                center_x: self.parent.center_x
                center_y: self.parent.center_y

        Button:
            size: 98, 98
            pos: 412 , 635
            background_color: 0,0,0,0
            on_press: root.phone_click()
            on_release: root.phone_release()


            Image:
                id: ButtonPhone
                source: 'Assets/Buttons/ButtonPhone.png'
                center_x: self.parent.center_x
                center_y: self.parent.center_y

        Button:
            size: 98, 98
            pos: 533 , 635
            background_color: 0,0,0,0
            on_press: root.warn_click()
            on_release: root.warn_release()


            Image:
                id: ButtonWarn
                source: 'Assets/Buttons/ButtonWarn.png'
                center_x: self.parent.center_x
                center_y: self.parent.center_y

        Button:
            size: 98, 98
            pos: 652 , 635
            background_color: 0,0,0,0
            on_press: root.bib_click()
            on_release: root.bib_release()


            Image:
                id: ButtonBib
                source: 'Assets/Buttons/ButtonBib.png'
                center_x: self.parent.center_x
                center_y: self.parent.center_y

        Button:
            size: 98, 98
            pos: 773 , 635
            background_color: 0,0,0,0
            on_press: root.free_click()
            on_release: root.free_release()


            Image:
                id: ButtonFree
                source: 'Assets/Buttons/ButtonFree.png'
                center_x: self.parent.center_x
                center_y: self.parent.center_y

        Button:
            size: 40, 40
            pos: 893 , 635
            background_color: 0,0,0,0
            on_press: root.ac_click()
            on_release: root.ac_release()


            Image:
                id: ButtonAC
                source: 'Assets/Buttons/ButtonAC.png'
                center_x: self.parent.center_x
                center_y: self.parent.center_y

        Button:
            size: 40, 40
            pos: 30 , 20
            background_color: 0,0,0,0
            on_release: root.vol_release()
            on_press: root.vol_click()

            Image:
                id: ButtonVol
                source: 'Assets/Buttons/ButtonVol.png'
                center_x: self.parent.center_x
                center_y: self.parent.center_y

0 ответов

Другие вопросы по тегам