提问人:Kyelimepi 提问时间:11/6/2023 最后编辑:Kyelimepi 更新时间:11/6/2023 访问量:32
是否有可能让 PyQt5 应用程序(在 MacOS 上)完全不接受激活/聚焦,但仍可交互?
Is it possible to get a PyQt5 Application (On MacOS) to not accept activation/focus completely, but still be interactable?
问:
我目前正在尝试创建一个 PyQt5 应用程序,该应用程序将 OSC 消息发送到 ETC 的 EOS 照明软件。我有一个编码器轮,用于修改移动光源的平移值。但是,我不希望 PyQt5 应用程序被激活并将注意力从 EOS 软件上移开。我希望能够单击并拖动我创建的编码器轮,然后立即使EOS保持活动状态,这样我就可以使用键盘快捷键来录制命令,设置强度或其他值等。我正在努力寻找一种方法,使 PyQt5 应用程序在单击并拖动 Dial 小部件时不聚焦/激活。我已经到处寻找我能找到的尝试解决这个问题,我知道 PyQt5 的“setWindowsFlags”,但它们没有完成我试图解决的问题。我最好的猜测是,窗口标志是为窗口和/或小部件设置的,而不是为整个应用程序设置的。有没有办法做到这一点?有没有其他的 Python 模块可以帮助我完成这个任务?
这是我用于创建拨号小部件的部分代码
from PyQt5 import QtCore
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys
class Dial(QDial):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setNotchesVisible(False)
self.setWrapping(True)
self.setRange(0, 25)
self.valueChanged.connect(self.emitValueChanged)
self.setWindowFlags(Qt.WindowDoesNotAcceptFocus)
@property
def dialVal(self):
return self.value()
def emitValueChanged(self, dialVal):
print(self.value())
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowFlags( Qt.Window | Qt.FramelessWindowHint | Qt.WindowDoesNotAcceptFocus | Qt.WindowStaysOnTopHint)
self.setAttribute(Qt.WA_ShowWithoutActivating)
self.setFocusPolicy(Qt.NoFocus)
self.dial = Dial()
layout = QVBoxLayout(self)
layout.addWidget(self.dial)
self.setCentralWidget(self.dial)
app = QApplication(sys.argv)
screen = MainWindow()
screen.show()
sys.exit(app.exec_())
答: 暂无答案
评论
Qt.BypassWindowManagerHint