2017-05-27 888 views
0

我已用下面的代码窗口标题:如何在PyQt5中居中窗口标题?

w.setWindowTitle('PyQt5 Lesson 4') 

与我得到:

Gui title Layout

是否有pyqt5任何方式移动的标题,或干脆中心呢?

+1

Qt无法控制山雀的外观le bar:全部由窗口管理器处理。在您的操作系统中,非Qt窗口的标题栏是什么样的?他们不应该有任何不同。如果你想改变它,你将需要相应地调整你的系统设置。 – ekhumoro

+0

非Qt窗口的标题栏都是左手类似于我提供的截图,所以基本上没有办法专门为我的应用程序做?是否有其他图书馆对此进行控制?如果是这样的话 – rikoudosenin

+0

可能你必须用一个假的替换正常的标题栏。请参阅[本答案](https://stackoverflow.com/q/9377914/984421)。 – ekhumoro

回答

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

注意:观察到,因为它现在是无框架,它有点“失去”其移动的属性,所以我不得不重新实现它,同样适用于调整大小和任何其他财产,将需要它框架(例如关闭,迷你和最大按钮)...