Python子进程失去焦点

2024-06-26 00:16:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我用python编写了一个菜单驱动的pdf显示。我从打开第二个有更多选择的窗口的类开始,最后启动xpdf来显示pdf文件。它似乎在桌面上运行良好,但在raspberry pi上,当pdf或第二个窗口关闭时,有时没有窗口具有焦点。鼠标点击会将焦点返回到窗口,窗口会正常运行一段时间。我用键盘操作,这意味着没有鼠标就无法重新聚焦。我将前两个窗口合并到同一窗口中的框架中,问题就消失了。关闭pdf查看器时,我有时仍会失去焦点。这可能是raspberry pi窗口管理器的问题。我使用2个python脚本创建了一个示例,但由于我启动第二个脚本的方式,即使这样也失败了。我不是python专家,如有任何建议,将不胜感激

test1.py
#!/usr/bin/python3

import subprocess
import sys
from threading import Timer

import tkinter as tk
from tkinter import *

def set_timer():
    global T
    T = Timer(3, timerCB)
    T.start()
    
def Aframe(root):
    frame1 = tk.Frame(root)
    frame1.pack()
    b = tk.Button(frame1,
                text = 'quit1',
                command = quitCB,
                height = 2,
                width = 10)
    b.grid(row=1, column=1)
    set_timer()

def timerCB():
    print("time up")
    process = subprocess.call(["/usr/bin/python3", "test2.py"])
    print('done')
    set_timer()
    
def quitCB():
    root.destroy()

def quitCB():
    root.destroy()

def escKeyCB(event):
    root.destroy()

def main(argv):

    global root
    root = tk.Tk()
    root.title("test1")

    Aframe(root)
    root.bind('<Escape>', escKeyCB)
    root.mainloop()
  
if __name__ == "__main__":
    main(sys.argv[1:])

test2.py
#!/usr/bin/python3

import sys
from threading import Timer

import tkinter as tk
from tkinter import *

def Bframe(root):
    frame1 = tk.Frame(root)
    frame1.pack()
    b = tk.Button(frame1,
                text = 'quit2',
                command = quitCB,
                height = 2,
                width = 10)
    b.grid(row=1, column=1)

    global T
    T = Timer(1, timerCB)
    T.start()
    
def timerCB():
    root.destroy()

def quitCB():
    root.destroy()
    
def escKeyCB(event):
    root.destroy()

def main(argv):

    global root
    root = tk.Tk()
    root.title("test2")
    Bframe(root)
    root.bind('<Escape>', escKeyCB)
    root.mainloop()
  
if __name__ == "__main__":
    main(sys.argv[1:])

Tags: fromimportpdfmaintkinterdefsysroot