PyQt4:如何制作保留空间的无边框窗口

0 投票
3 回答
7931 浏览
提问于 2025-04-16 16:38

我想用PyQt4在Linux上制作一个类似面板的应用程序。为此,我需要创建的窗口满足以下条件:

  • 没有边框装饰
  • 保留一些空间
  • 在所有工作区都能显示

通过阅读文档,我了解到应该使用QtWindowFlags。不过我对怎么做完全没有头绪。此外,我觉得应该有一个Qt.WindowType的提示,告诉窗口管理器这个窗口是一个“停靠”应用程序。我之前用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 个回答

1

在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,但其实大部分情况下,解决方法并不复杂。

比如,当你在写代码时,可能会发现某个功能没有按照预期工作。这时候,你可以尝试检查一下你的代码,看看有没有拼写错误,或者是否遗漏了某些步骤。

另外,很多时候,网上的社区,比如StackOverflow,都是很好的资源。你可以在上面找到很多人遇到过类似的问题,他们分享的解决方案可能会对你有帮助。

总之,遇到问题时,不要慌张,先冷静下来,仔细检查你的代码,必要时寻求帮助。编程的过程就是不断学习和解决问题的过程。

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

了解一下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()
0

解决办法是使用Python-Xlib,这在一个关于如何在X系统上保留屏幕空间的回答中有详细说明。

撰写回答