首先,我想澄清一下,作为一名软件工程师,我有绝对0的背景,这是我第一次在API和创建excel/plots之外使用python
我的问题是,我试图使用kivy创建一个应用程序,然后我导入了kivy.core.window
库,出现了一个空白屏幕
我已经看到,当使用kivy和多处理时,这个问题相当普遍,但我发现的信息都没有解决我的问题。在没有kivy.core.window
库的情况下运行我的代码的结果:
添加所述库时的结果:
此外,如果我等待10秒,空白屏幕消失,并杀死计数时间进程。
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition
import time
from datetime import datetime
import multiprocessing as mp
from multiprocessing import Process, Queue, freeze_support
Builder.load_string('''
<TestScreen>:
BoxLayout:
orientation: "vertical" # place object vertically
Label:
size_hint: 1, 1
text: 'TITLE'
font_size: 150
color: 1, 1, 1, 1
Button:
text: 'start'
on_press: root.start_mp()
Button:
text: 'stop'
on_press: root.stop_time()
''')
def count_time(x):
for i in range(x):
print('count={}'.format(i))
time.sleep(1)
class Test(App):
def build(self):
sm.add_widget(TestScreen(name='test'))
return sm
class TestScreen(Screen):
def __init__(self, **kwargs):
super(TestScreen, self).__init__(**kwargs)
def start_mp(self):
self.p1 = mp.Process(target=count_time, args=(10, ))
self.p1.start()
def stop_time(self):
pass
if __name__ == '__main__':
mp.freeze_support()
sm = ScreenManager(transition=NoTransition())
Test().run()
问题是,当您运行
Process
时,它会启动一个新的python进程并导入当前的.py
文件。在大多数平台上,生产线:保护
Test().run()
不被执行和启动另一个App
,并且足以保护不被打开的另一个窗口。但是,在导入原始.py
文件进行多处理时,导入kivy.core.window
似乎足以打开另一个窗口(在Windows平台上)。你可以读到它一个非常难看的解决方法是用
if __name__ == '__main__':
行保护所有kivy导入(以及所有kivy代码)。像这样:相关问题 更多 >
编程相关推荐