Nano Hash - криптовалюты, майнинг, программирование

PyQt5 не может удалить флаг WindowStaysOnTopHint в Ubuntu 18.04

Я пытаюсь сделать кнопку, которая поместит окно поверх других. Используя рекомендации из других вопросов, я поставил в свой класс setWindowFlags(self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint) для установки и setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowStaysOnTopHint) для удаления флага. Он устанавливает флаг, но когда я меняю состояние кнопки, этот флаг все еще включен. Вот пример кода:

from PyQt5 import QtWidgets, QtCore
import sys

class widget(QtWidgets.QWidget):
    def __init__(self):
        QtWidgets.QWidget.__init__(self)

        self.resize(500, 500)
        box = QtWidgets.QVBoxLayout()
        self.setLayout(box)

        self.btn = QtWidgets.QPushButton("pin")
        box.addWidget(self.btn)
        self.btn.setCheckable(True)
        self.btn.toggled.connect(self.setOnTop)

    def setOnTop(self):
        if self.btn.isChecked():
            self.setWindowFlags(self.windowFlags() | QtCore.Qt.WindowStaysOnTopHint)
            print("checked")
        else:
            self.setWindowFlags(self.windowFlags() & ~QtCore.Qt.WindowStaysOnTopHint)
            print("unchecked")
        self.show()

def main(self):
    app = QtWidgets.QApplication(sys.argv)
    ex = widget()
    ex.show()
    sys.exit(app.exec_())

main()

  • У меня работает 18.10 с PyQt 5.11.2. Вы также можете попробовать использовать более простой API setWindowFlag doc.qt.io/qt-5 /qwidget.html#setWindowFlag добавлен в версии 5.9, т. е. self.setWindowFlag(QtCore.Qt.WindowStaysOnTopHint, True) для установки и self.setWindowFlag(QtCore.Qt.WindowStaysOnTopHint, False) для очистки. Также ваш main не должен иметь аргумент self. 04.11.2018
  • @ shao.lo, спасибо за ответ. К сожалению, это не работает. Я также пытался запустить его под Wayland и Xorg, и он тоже не работает. Нужно ли устанавливать флаг X11BypassWindowManagerHint? 04.11.2018
  • хм, это работает под Windows 7. Есть ли способ решить эту проблему под x11? 10.11.2018
  • Скорее всего, это ошибка. Вы можете попробовать использовать виртуальную среду и протестировать разные версии pyqt5. 10.11.2018

Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..