【问题标题】:Kivy-Python working in multi processing opening one more white screenKivy-Python 在多处理中工作,再打开一个白屏
【发布时间】:2020-09-03 03:35:41
【问题描述】:
    import file...
    from mobus import modbus
    .....

class MainWindow(Screen):
    def __init__(self, **kwargs):
        super(MainWindow, self).__init__(**kwargs)

class SecondWindow(Screen):
    pass

class ThirdWindow(Screen):
    pass

class WindowManager(ScreenManager):
    pass

class mainApp(MDApp):
    def build(self):
        iconfonts.register('default_font', 'iconfonts\gar.ttf',
                           join(dirname(__file__), 'iconfonts\gar.fontd'))

        Config.set('graphics', 'width', '1080')
        Config.set('graphics', 'height', '720')
        return Builder.load_file("my.kv")


def de():
    mainApp().run()

def modbusStart():
    modbus.connect()

if __name__ == "__main__":

    a = Process(target=de)
    b = Process(target=modbusStart)
    a.start()
    b.start()

Screen looks like 当我运行此代码时,会再打开一个白色的窗口。我不知道为什么要打开以及如何修复它? 我认为这是关于屏幕管理器和 2.process 的。我尝试了所有组合来修复它,但我不能

【问题讨论】:

标签: python multiprocessing kivy screen kivy-language


【解决方案1】:

UbuntuWindows 10 上尝试类似您的代码后,我发现了一些奇怪的行为。首先,额外的Window 似乎只出现在Windows 上,并且只有在您导入MDApp 时才会出现。即使您只是导入MDApp,而没有实际使用它,也会发生额外的Window 行为。

我认为您发现了一个应该向kivyMD 开发人员报告的错误。

我能找到阻止额外 Window 行为的唯一方法是不使用(甚至不导入)MDApp

【讨论】:

  • 谢谢你,当我尝试你的解决方案时,它的工作。我要举报
【解决方案2】:

main.py

import modbus
from multiprocessing import Process, Queue, freeze_support
import kvy

def kivy():
    kvy.de()

def modbusStart():
    modbus.connect()

if __name__ == "__main__":
    a = Process(target=kivy)
    b = Process(target=modbusStart)
    a.start()
    b.start()

基维

from kivy.uix.screenmanager import ScreenManager,Screen,FadeTransition
from kivy.config import Config
from kivy.lang import Builder
from kivy.core.text import LabelBase
from kivymd.app import MDApp
from kivy.uix.image import Image
from kivy.uix.button import ButtonBehavior
from iconfonts import iconfonts
from os.path import join, dirname


class ImageButton(ButtonBehavior,Image):
    pass

class MainWindow(Screen):
    pass

class SecondWindow(Screen):
    pass

class ThirdWindow(Screen):
    pass

class WindowManager(ScreenManager):
    pass

class mainApp(MDApp):
    def build(self):
        iconfonts.register('default_font', 'iconfonts\gar.ttf',
                           join(dirname(__file__), 'iconfonts\gar.fontd'))
        LabelBase.register(name="prototype", fn_regular="font/Prototype.ttf")

        Config.set('graphics', 'width', '1080')
        Config.set('graphics', 'height', '720')
        return Builder.load_file("my.kv")

def de():
    mainApp().run()

Modbus

from pymodbus.client.sync import ModbusTcpClient

def connect():
    client = ModbusTcpClient("localhost")
    client.connect()
    if client.connect():
        print("Connection Successful")
    else:
        print("Conenction Failed")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-28
    • 2011-02-27
    • 1970-01-01
    • 2016-06-11
    • 2022-10-01
    • 2021-06-12
    • 2019-09-14
    • 2023-03-25
    相关资源
    最近更新 更多