PyQt5切换窗口标志:从WindowStaysOnBottomHint改至WindowStaysOnTopHint失败
问题解决
- 你当前代码的核心错误是触发菜单时仍然设置的是
Qt.WindowStaysOnBottomHint,完全没改成Qt.WindowStaysOnTopHint,自然不会有切换效果。 - 正确的做法是:点击菜单时替换底部标志为顶部标志,同时保留其他原有窗口标志;如果需要支持来回切换,还可以记录当前窗口的置顶/置底状态。
单次切换到置顶的代码
把你的触发代码改成这样:
onTop.triggered.connect(lambda: self.setWindowFlags(Qt.WindowFlags(Qt.Tool | Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint))) onTop.triggered.connect(lambda: self.show())
支持来回切换的优化代码
如果需要点击菜单在置顶/置底状态间切换,可以在类中添加状态变量记录当前状态:
class WindowClass(QWidget, form_class): def __init__(self): super().__init__() self.setupUi(self) self.is_on_bottom = True # 记录当前窗口层级状态 flags = Qt.WindowFlags(Qt.Tool | Qt.FramelessWindowHint | Qt.WindowStaysOnBottomHint) self.setWindowFlags(flags) # 绑定菜单触发事件到自定义切换方法 onTop.triggered.connect(self.toggle_window_z_order) def toggle_window_z_order(self): # 清除旧的置顶/置底标志,保留其他原有窗口标志 current_flags = self.windowFlags() & ~(Qt.WindowStaysOnTopHint | Qt.WindowStaysOnBottomHint) if self.is_on_bottom: # 切换为置顶状态 new_flags = current_flags | Qt.WindowStaysOnTopHint self.is_on_bottom = False else: # 切换回置底状态 new_flags = current_flags | Qt.WindowStaysOnBottomHint self.is_on_bottom = True self.setWindowFlags(new_flags) self.show()
注意:调用setWindowFlags后必须调用show()重新显示窗口,否则新的窗口标志不会生效,这部分你之前的代码处理是正确的。
内容的提问来源于stack exchange,提问作者mmd
相关产品推荐
相关产品推荐

