在qt设计器(最好)或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设计器中设计了程序并使用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()
我放入了处理主窗口的课程
答案 0 :(得分:4)
您可以使用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中描述了一种解决方案。