ubuntu 如何使我的程序始终显示在最前面

siv3szwd  于 2022-12-11  发布在  其他
关注(0)|答案(2)|浏览(301)

程序信息和问题

我创建了一个Python程序使用Pygame模块在显示器上显示广告。它在屏幕上显示广告,但只要我启动不同的应用程序,如kodi或vlc或chrome,等等。它会在这些应用程序后面。
问题在于:如果这些应用程序是在我的广告计划之后启动的,则程序会在这些应用程序之后运行。

理想工作

1.已启动程序
1.屏幕上显示的广告
1.已启动的其他应用程序
1.程序仍在屏幕顶部显示广告。

系统信息

操作系统:Linux - Ubuntu 20
语言:Python皮
模块:Pygame、Pymovie、GTK 3 +
体系结构:amd 64型
桌面环境:打开框
代码启动:CLI使用bash脚本启动广告的python程序。

广告屏幕截图示例

救命啊!谢谢。

c86crjj0

c86crjj01#

看起来我能找到的最好的答案是从这个过时的网站(https://www.mail-archive.com/pygtk@daa.com.au/msg01370.html),他们说使用 * 下面的代码 *,它应该在所有操作系统上工作...事情从来没有那么容易

transient.set_transient_for(main_window)

或者我有四个其他的答案哈哈
取自(How to keep a python window on top of all others (python 3.1)
stackoverflow用户pyfunc说对于windows你可以只做

import win32gui
import win32con
win32gui.SetWindowPos(hWnd, win32con.HWND_TOPMOST, 0,0,0,0,
win32con.SWP_NOMOVE | win32con.SWP_NOSIZE)

由于这只适用于windows,我想你应该试试python-tinker,我相信它适用于linux

root = Tk()
root.wm_attributes("-topmost", 1)

还有nick说你可以用PyGTK

gtk.Window.set_keep_above

参考:How to make python window run as "Always On Top"?
让我知道如果这些中的任何一个对你有效,我会继续寻找更好的答案。

u2nhd7ah

u2nhd7ah2#

我认为PyWinCtl在大多数情况下都能做到。你可以为你的窗口调用alwaysOnTop()一次,或者你可以在循环中调用它,以确保它在其他应用打开后仍然在顶部。检查一下:

import tkinter as tk
import pywinctl as pwc

class Window(tk.Tk):

    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        self.overrideredirect(True)
        self.geometry('300x200')
        self.config(background='black')
        self.attributes('-alpha', 0.5)

        self.label = tk.Label(text="Hello World!")
        self.label.pack(fill=tk.BOTH, expand=1)

        self.wait_visibility()
        self.window = pwc.Window(int(self.frame(), base=16))
        # Call it once at the beginning of your program...
        try:
            self.window.alwaysOnTop()
        except:
            pass

        self.counter = 0
        self.display()

    def display(self):

        if self.state() == "normal":
            try:
                # ... or call it repeatedly to assure it stays on top
                self.window.alwaysOnTop()
            except:
                # On Linux, sometimes it takes more time to recognize the new window
                self.window = pwc.Window(int(self.frame(), base=16))

        self.label.config(text=str(self.counter))
        self.counter += 1
        self.after(1000, self.display)

root = Window()
root.mainloop()

相关问题