python - 删除qt中gui的顶部栏

标签 python qt pyqt qt-designer

在 qt designer(最好)或 python 中,有没有办法删除标准的 Windows 顶部栏并将其替换为我自己的,或者至少对其进行格式化。这类似于 photoshop、maya、3ds max、chrome 等新版本的外观。

我找到了这两篇文章,但除了在C++中,而且我需要在python中工作,它们一直没有得到解决。

http://qt-project.org/forums/viewthread/3331/ http://qt-project.org/forums/viewthread/3847/

我从中得到的是 FramelessWindowHint,它可以做我想做的事,但正如他们在文章中提到的,它消除了很多 Windows 功能,例如调整大小。有没有办法重新引入角拖动和手动调整大小/关闭选项?

更具体地说,我已经在 qt designer 中设计了程序,并使用 pyuic4 制作了我的 python 文件。这是我加载 gui 的主要功能:

global globalMoAnWindow
app = QtGui.QApplication(sys.argv)
app.setStyle(QtGui.QStyleFactory.create('plastique'))
globalMoAnWindow = MoAnWin()
globalMoAnWindow.setWindowFlags(QtCore.Qt.FramelessWindowHint)
globalMoAnWindow.showMaximized()
sys.exit(app.exec_())

对于任何想使用 python 并拖动小部件的人,我找到了这段代码:

def mousePressEvent(self, event):
    if event.button() == QtCore.Qt.LeftButton:
        self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()
        event.accept()

def mouseMoveEvent(self, event):
    if event.buttons() == QtCore.Qt.LeftButton:
        self.move(event.globalPos() - self.dragPosition)
        event.accept()

我放在处理主窗口的类中

最佳答案

您可以使用 QSizeGrip 将调整大小控件添加到您的窗口。它们的行为与系统行为完全一样。您应该创建一个布局并将 QSizeGrip 放在窗口的每个角落。

widget = QWidget()
widget.setWindowFlags(Qt.FramelessWindowHint)
layout = QGridLayout(widget)
layout.setContentsMargins(0, 0, 0, 0)
sizeGrip1 = QSizeGrip(widget)
sizeGrip2 = QSizeGrip(widget)
sizeGrip3 = QSizeGrip(widget)
sizeGrip4 = QSizeGrip(widget)
layout.addWidget(sizeGrip1, 0, 0)
layout.addWidget(sizeGrip2, 0, 2)
layout.addWidget(sizeGrip3, 2, 2)
layout.addWidget(sizeGrip4, 2, 0)
label = QLabel("Contents")
layout.addWidget(label, 1, 1)

widget.show()

QMainWindow 的变体:

window = QMainWindow()
widget = QWidget()
window.setCentralWidget(widget)
window.setWindowFlags(Qt.FramelessWindowHint)
layout = QGridLayout(widget)
#...
window.show()

实现关闭按钮很简单。只需将 QPushButton 或 QToolButton 添加到您的布局并在其 onclick 处理程序中调用 QWidget::close

拖动更加复杂,因为没有标准的小部件可以执行此操作。 this answer 中描述了一种解决方案.

关于python - 删除qt中gui的顶部栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17016273/

相关文章:

python - 如何在 python 中显示文件中的西里尔文本?

python - 具有额外属性的多对多关系 Django 模型

c++ - const char * 和文字字符串有什么区别?

python - 如何使用 PySide 将 .ui 文件加载到 python 类中?

python - 如何用Qt设计倒计时

javascript - PyQt (PySide)、WebKit 和从/向 Javascript 公开方法

python - Numpy 中的数组表达式

python - Django查询集按相关字段中的最新值排序

c++ - 在 Windows 上的 QTCreator 中链接 ACE

javascript - 动态创建 QML ObjectModel 元素