PyQt4:如何使用保留空间制作未修饰的窗口

时间:2011-04-29 08:07:34

标签: python pyqt4 flags overlap borderless

我想使用PyQt4 for Linux制作类似面板的应用程序。为此我需要我创建的窗口:

  • 未修饰
  • 有预留空间
  • 显示在所有工作区

从阅读the documentation我知道我应该使用QtWindowFlags。但我不知道如何做到这一点。另外我相信应该有一个Qt.WindowType提示告诉WM窗口是一个“停靠”应用程序。我在this thread之后用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 个答案:

答案 0 :(得分:6)

了解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 :(得分:1)

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()

答案 2 :(得分:0)

解决方案是使用Python-Xlib,它已在an answer on a universal way to reserve screen space on X中进行了描述。