Сделайте окно графического интерфейса tkinter поверх видеоэкрана omxplayer HDMI

У меня есть проект IOT, в котором я использую python-3.6 для Raspberry Pi Zero и tkinter для графического интерфейса.

Pi всегда воспроизводит видео на телевизоре с прямым HDMI (omxplayer).

Проблема: мне нужно открыть окно графического интерфейса tkinter для подключения Wi-Fi, но индекс отображения графического интерфейса ниже, чем экран omxplayer.

Что я хочу Я хочу, чтобы графический интерфейс отображался поверх экрана omxplayer для подключения к Wi-Fi.

Я пытался:

1 root.wm_attributes("-topmost", 1) 
  #Not working wm is not defined

2 root.overridedirect(1)
  root.wm_attributes("-topmost", 1)
  #Window is jumping on top of every other applications but not over omxplayer.

3 root.attributes("-topmost", 1)
  #Window is jumping on top of every other applications but not over omxplayer.

4 root.lift()
  #Not working

person Ajit Maurya    schedule 16.04.2019    source источник


Ответы (1)


У меня есть решение, хотя оно не является допустимым.

Что я сделал?

Вместо того, чтобы делать tkinter GUI сверху, я просто связываю горячую клавишу ctrl+j, чтобы скрыть omxplayer экран и ctrl+k для отображения экрана.

from omxplayer.player import OMXPlayer
import omxplayer.keys
import codecs
from pynput import keyboard
import threading

xpress = False

# The key combination to check
COMBINATIONS = [
    {keyboard.Key.ctrl, keyboard.KeyCode(char='j')},
    {keyboard.Key.ctrl, keyboard.KeyCode(char='J')},
    {keyboard.Key.ctrl, keyboard.KeyCode(char='k')},
    {keyboard.Key.ctrl, keyboard.KeyCode(char='K')}
]

# The currently active modifiers
current = set()

def execute(key):
    keys = str(key).replace("'", "")
    print ("Do Something", keys)

    if keys == 'j':
        global xpress
        xpress = True
        print(xpress)
    else:
        xpress = False
        print(xpress)

def on_press(key):
    if any([key in COMBO for COMBO in COMBINATIONS]):
        current.add(key)
        if any(all(k in current for k in COMBO) for COMBO in COMBINATIONS):
            execute(key)

def on_release(key):
    if any([key in COMBO for COMBO in COMBINATIONS]):
        current.remove(key)

def ThKeyboad():
    with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
        listener.join()


t1 = threading.Thread(target=ThKeyboad, args=[])
t1.start()

#OMXPlayer Code

player = OMXPlayer('/home/pi/outhum/video/default.mp4', dbus_name='org.mpris.MediaPlayer2.omxplayer2')

if xpress:
    player.hide_video()
else:
    player.show_video()
a = player.duration()
time.sleep(a)
player.quit()

person Ajit Maurya    schedule 19.04.2019
comment
Обратите внимание, что плеер будет скрыт в следующем экземпляре omxplayer и то же самое для отображения. - person Ajit Maurya; 19.04.2019