0
A
回答
0
我认为唯一的方法就是避免使用你的应用程序从你的“SO”中使用默认的MenuBar。将应用的属性设置为不使用默认的MenuBar并创建自己的。 尝试设置你的应用程序的属性,看看它是否适合你。
app = QApplication(sys.argv)
app.setAttribute(Qt.AA_DontUseNativeMenuBar)
或者只设置您的主要部件的窗口标志,在您的应用程序在不在。
self.setWindowFlags(Qt.FramelessWindowHint)
类似的东西,但你还是得开发自己的“假菜单栏中的”有你有总控制你想用它做什么。
这里是一个小例子,看起来有点丑(有使用更多更好的做法),但也许它已经可以给你一些想法,你真正需要的:
import sys
from PyQt5.QtCore import QPoint
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication
from PyQt5.QtWidgets import QHBoxLayout
from PyQt5.QtWidgets import QLabel
from PyQt5.QtWidgets import QVBoxLayout
from PyQt5.QtWidgets import QWidget
class MainWindow(QWidget):
def __init__(self):
super(MainWindow, self).__init__()
self.layout = QVBoxLayout()
self.layout.addWidget(MyBar(self))
self.layout.addStretch(-1)
self.setLayout(self.layout)
self.layout.setContentsMargins(0,0,0,0)
self.layout.addStretch(-1)
self.setFixedSize(800,400)
self.setWindowFlags(Qt.FramelessWindowHint)
class MyBar(QWidget):
def __init__(self, parent):
super(MyBar, self).__init__()
self.parent = parent
print(self.parent.width())
self.layout = QHBoxLayout()
self.layout.setContentsMargins(0,0,0,0)
self.title = QLabel("My Own Bar")
self.title.setFixedHeight(35)
self.title.setAlignment(Qt.AlignCenter)
self.layout.addWidget(self.title)
self.title.setStyleSheet("""
background-color: black;
color: white;
""")
self.setLayout(self.layout)
self.start = QPoint(0, 0)
self.pressing = False
def resizeEvent(self, QResizeEvent):
super(MyBar, self).resizeEvent(QResizeEvent)
self.title.setFixedWidth(self.parent.width())
def mousePressEvent(self, event):
self.start = self.mapToGlobal(event.pos())
self.pressing = True
def mouseMoveEvent(self, event):
if self.pressing:
self.end = self.mapToGlobal(event.pos())
self.movement = self.end-self.start
self.parent.move(self.mapToGlobal(self.movement))
self.start = self.end
def mouseReleaseEvent(self, QMouseEvent):
self.pressing = False
if __name__ == "__main__":
app = QApplication(sys.argv)
mw = MainWindow()
mw.show()
sys.exit(app.exec_())
注意:观察到,因为它现在是无框架,它有点“失去”其移动的属性,所以我不得不重新实现它,同样适用于调整大小和任何其他财产,将需要它框架(例如关闭,迷你和最大按钮)...
相关问题
- 1. Tkinter:如何居中窗口标题
- 2. 居中窗口,它的父窗口的中心妥善PyQt5
- 3. 如何用PyQt5设置窗口图标?
- 4. 如何在Linux中居中SDL窗口?
- 5. PYQT5从窗口标题中获取文本?
- 6. 在X11中,如何在创建窗口标题之前设置窗口标题?
- 7. PyQt5弹出窗口
- 8. 如何居中jqGrid popup模态窗口?
- 9. 如何居中DIV弹出窗口?
- 10. 如何用PyGObject居中窗口
- 11. PyQt5奇怪的窗口位置问题
- 12. PyQt5如何当第一窗口关闭
- 13. 如何居中对齐Windows窗体中的标题栏文本?
- 14. 将光标居中在Eclipse中的窗口中?
- 15. Flex:如何在关闭标题窗口后将标题窗口中的值传递给主窗口?
- 16. 在VTK窗口中居中图像
- 17. 在WPF中居中对话窗口
- 18. 在div中间居中模态窗口
- 19. 居中标题
- 20. 居中窗口python tkinter
- 21. 居中文档窗口
- 22. 如何在Behat + Mink中断言页面/标签/窗口标题
- 23. 如何将OpenFileDialog居中放置在WPF的父窗口中?
- 24. 如何在css + html中居中模态窗口?
- 25. 如何在Java中居中一个窗口?
- 26. 如何在浏览器窗口中居中HTML元素?
- 27. 如何在弹出窗口中居中放置图像
- 28. PyQt5透明窗口错误?
- 29. PYQT5 Mdi子窗口关闭
- 30. 如何根据视口宽度居中标题(css3)
Qt无法控制山雀的外观le bar:全部由窗口管理器处理。在您的操作系统中,非Qt窗口的标题栏是什么样的?他们不应该有任何不同。如果你想改变它,你将需要相应地调整你的系统设置。 – ekhumoro
非Qt窗口的标题栏都是左手类似于我提供的截图,所以基本上没有办法专门为我的应用程序做?是否有其他图书馆对此进行控制?如果是这样的话 – rikoudosenin
可能你必须用一个假的替换正常的标题栏。请参阅[本答案](https://stackoverflow.com/q/9377914/984421)。 – ekhumoro