PyQt4: как сделать недокрашенное окно с зарезервированным пространством - PullRequest
0 голосов
/ 29 апреля 2011

Я хотел бы создать панельное приложение, использующее PyQt4 для Linux. для этого мне нужно окно, которое я создал:

  • не подлежит отделке
  • чтобы зарезервировать место
  • для отображения во всех рабочих пространствах

Из прочтения документации у меня появилась идея, что я должен использовать QtWindowFlags. Но я понятия не имею, как это сделать. Также я считаю, что где-то должна быть подсказка Qt.WindowType, сообщающая WM, что окно является «док-приложением». Я сделал это с помощью pygtk, следуя этой теме , но здесь, с Qt, я действительно не знаю, как с этим справиться. (Мне нужна Qt для его более легкого применения к теме / скину.)

Ниже приведен текущий код, который я сделал (ничего необычного).

import sys
from PyQt4 import QtGui

class Panel(QtGui.QWidget):
def __init__(self, parent=None): ## should the QtWindowFlag be here?
    QtGui.QWidget.__init__(self, parent) ## should the QtWindowFlag be there as well?

    self.setWindowTitle('QtPanel')
    self.resize(QtGui.QDesktopWidget().screenGeometry().width(), 25)
    self.move(0,0)

def main():
    app = QtGui.QApplication(sys.argv)
    panel = Panel()
    panel.show()
    sys.exit(app.exec_())
    return 0

if __name__ == '__main__':
    main()

Может кто-нибудь помочь мне с этим? Спасибо:)

Ответы [ 3 ]

6 голосов
/ 06 мая 2011

Читайте о свойстве QWidget.windowFlags: http://doc.qt.nokia.com/4.7/qwidget.html#windowFlags-prop

Пример:

>>> from PyQt4 import QtGui, QtCore
>>> app = QtGui.QApplication([])
>>> win = QtGui.QMainWindow()
>>> win.setWindowFlags(win.windowFlags() | QtCore.Qt.FramelessWindowHint)
>>> win.show()
1 голос
/ 07 ноября 2013
import sys
from PyQt4 import QtGui, QtCore


class Example(QtGui.QWidget):

    def __init__(self):
        super(Example, self).__init__()

        self.initUI()

    def initUI(self):               

        qbtn = QtGui.QPushButton('Quit', self)
        #qbtn.clicked.connect(QtCore.QCoreApplication.instance().quit)
        qbtn.clicked.connect(self.test)
        qbtn.resize(qbtn.sizeHint())
        qbtn.move(50, 50)       

        self.setGeometry(300, 300, 250, 150)
        self.setWindowTitle('Quit button')    
        self.setWindowFlags(self.windowFlags() | QtCore.Qt.FramelessWindowHint)
        self.show()

    def test(self):
      print "test"

def main():

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()
0 голосов
/ 04 июня 2011

Решением является использование Python-Xlib, и оно было описано в ответе на универсальный способ зарезервировать место на экране в X .

...