在指定坐标处创建无边框PyQt窗口

4
经过许多搜索,我知道我需要使用 self.setWindowFlags(QtCore.Qt.FramelessWindowHint) 来生成一个无边框窗口,并使用某些变量来将其放置在屏幕左上角的位置。
我的问题是,在我尝试使用此代码的任何地方都会生成错误,即使在我稀少的现有代码中也是如此。
from PyQt4 import QtCore, QtGui
from ui.mainwindow import MainWindow

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    ui = MainWindow()
    ui.show()
    sys.exit(app.exec_())

经过长时间的搜索和尝试,我无法使用其他人成功的解决方案。请问如何使用魔法语法使我的窗口在屏幕左上角显示且没有边框?

2个回答

8

原来我在Python和层次继承/归属关系方面还有很多要学习的内容,我要找的代码是:

from PyQt4 import QtCore, QtGui
from ui.mainwindow import MainWindow

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    ui = MainWindow()
    ui.setWindowFlags(QtCore.Qt.FramelessWindowHint)
    ui.move(0, 0)
    ui.show()
    sys.exit(app.exec_())

那个惊喜时刻就是意识到 MainWindow 在变量 ui 下以速记方式伪装。为了方便像我这样的新手。

1

基本上,如果您只设置了无边框标志,那么您仍然持有一堆默认标志,这些标志会应用于 QWidgetQMainWindow

如果您还包括 CustomizeWindowHint,它将清除所有先前的标志,然后您可以使用按位或运算符 | 添加要使用的其他标志。

http://doc.qt.io/qt-5/qt.html#WindowType-enum

http://doc.qt.io/qt-5/qwidget.html#setAttribute

http://doc.qt.io/qt-5/qt.html#WidgetAttribute-enum

http://doc.qt.io/qt-5/qwidget.html#pos-prop

http://doc.qt.io/qt-5/application-windows.html#window-geometry

我会在几分钟内发布一段代码片段。
更新:
#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint | Qt::Tool);
//    w.setAttribute(Qt::WA_TranslucentBackground);
    w.move(0,0);
    w.show();

    return a.exec();
}

希望这有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接