这似乎微不足道,但我无法解释......
我有以下工作 tkinter 代码 sim.py:
import tkinter as tk
import os
import random
import time
class MainApp(tk.Tk):
def __init__(self, parent=None, title="Device", *args, **kwargs):
super().__init__()
print("CHILD.GUI: Entered __init__")
self.title(title)
tk.Button(self, text="QUIT", command=self.on_quit).pack(side="top", padx=30, pady=30)
""" <RUN> """
self.mainloop()
def on_quit(self):
print("Quitting ...")
self.destroy()
def main():
root = MainApp()
def my_dev( kill_queue, child_conn):
print ("CHILD: Entered device function ...")
root = MainApp()
if __name__ == "__main__":
main()
# EOF sim.py
但是当我尝试从主程序 main.py 作为一个孩子执行它时:
import multiprocessing as mp
import os
import sys
import time
import signal
import tkinter as tk
import sim
nproc = 1
result = 0
def signal_handler(signal, frame):
print ('nCaught interrupt, cleaning up...')
print (process.terminate())
sys.exit(0)
signal.signal(signal.SIGINT, signal_handler)
if __name__ == '__main__':
kill_queue = mp.Queue()
parent_connection, child_connection = mp.Pipe()
process = mp.Process(target=sim.my_dev, args=(kill_queue,child_connection,))
process.start()
print("Spawning process with PID:{}".format(process.pid) )
# finite number of runs ...
for dummy in range(100):
while parent_connection.poll():
result = parent_connection.recv()
print("Data: {:8.2f}".format(result), end="")
print("r", end="")
time.sleep(.1)
# Finishing up ... sending a kill signal
print("nn")
kill_queue.put(True)
process.join()
print ('Main thread done.')
我一无所获。 它打印"CHILD:输入设备功能",仅此而已。 "子:GUI"不打印。 没有错误。 我可以看到 CHILD 进程
ps ax
并在主程序完成时终止。
请注意,我已经删除了子项中的PIPE部分...实际上,如果我摆脱GUI,该部分就起作用了。
有什么想法吗?
谢谢 拉狄克
编辑:修复(希望(父评论。 还修复了窗口标题。 它仍然没有运行。 尝试同花顺...
编辑:在 my_dev 中打印后刷新,根 = MainApp(( 什么也没给出......
编辑:同花顺做了一些事情(方便的小东西(。 我将 tkinter 添加到 main.py 中(只是 tk。Tk(( 进行初始化(。 突然,代码输入到主应用程序(显示:CHILD。GUI:输入init( 并给出错误:
2020-06-09 01:15:45.982 python[50273:22418845] 无法从服务器检索字体!正在本地注册系统字体...
顺便说一句,50273 是生成过程的正确 PID。
我还直接将我的 GUI 功能添加到 main.py...同样的错误。 该错误似乎与生成新进程有关...我没有运气找到任何解决方案...建议? R>
所以有一个答案...有点。
该代码在Debian Linux(准确地说是Raspbian(上运行良好。
我仍然在Mac上收到有关缺少字体的错误消息:2020-06-09 01:15:45.982 python[50273:22418845] Could not retrieve fonts from the server! Registering system fonts locally...
正如我上面提到的,它仅在主程序中包含tk.Tk()
后出现在系统刷新中。
只是为了完整起见:我已经使用自制软件在我的Mac上安装了pyenv
。 所有 python3 软件包都是通过 pip 安装的。 其他一切似乎都在按预期工作。 上面的 tkinter 代码在作为主程序执行时运行良好。 每当通过多处理调用它时,它都不会起作用。
最终,我需要程序在 Linux 上运行;我使用 Mac 对非硬件部件(如 GUI(进行编码。 让它在 Mac 上也能正常工作会很好。
建议?
和平! 拉狄克