python怎么做软件界面_python – 如何自定义桌面应用程序的标题栏和窗口

这篇博客介绍了如何使用PyQt5创建一个带有自定义颜色的标题栏,包括关闭、最大化和最小化按钮。通过修改窗口的样式表,可以设置按钮、文本标题和背景颜色。示例代码展示了一个无边框窗口,并提供了点击事件处理方法。同时,还展示了如何实现类似功能的PyQt4版本。
摘要由CSDN通过智能技术生成

我如何自定义标题栏(包括:关闭,最大化,最小化按钮,标题)和用PyQt编写的桌面应用程序框架,使其看起来像下面的图像?我需要一种方法来指定我想用于标题栏元素的颜色(按钮,文本标题和条形和按钮的背景颜色).

MRv5L.png

我需要更改其窗口的代码:

import sys

from PyQt5 import QtCore, uic

from PyQt5.QtWidgets import QApplication, QDialog

class MainWindow(QDialog):

def __init__(self, parent=None):

QDialog.__init__(self, parent)

self.setWindowFlags(QtCore.Qt.FramelessWindowHint)

self.resize(500, 600)

if __name__ == "__main__":

app = QApplication(sys.argv)

window = MainWindow()

sys.exit(app.exec_())

有没有办法做到这一点?我很欣赏这样做的任何建议和想法.

#########################################################

## customize Title bar

## dotpy.ir

## iraj.jelo@gmail.com

#########################################################

import sys

from PyQt4 import QtGui

from PyQt4 import QtCore

from PyQt4.QtCore import Qt

class TitleBar(QtGui.QDialog):

def __init__(self, parent=None):

QtGui.QWidget.__init__(self, parent)

self.setWindowFlags(Qt.FramelessWindowHint);

css = """

QWidget{

Background: #AA00AA;

color:white;

font:12px bold;

font-weight:bold;

border-radius: 1px;

height: 11px;

}

QDialog{

Background-image:url('img/titlebar bg.png');

font-size:12px;

color: black;

}

QToolButton{

Background:#AA00AA;

font-size:11px;

}

QToolButton:hover{

Background: #FF00FF;

font-size:11px;

}

"""

self.setAutoFillBackground(True)

self.setBackgroundRole(QtGui.QPalette.Highlight)

self.setStyleSheet(css)

self.minimize=QtGui.QToolButton(self);

self.minimize.setIcon(QtGui.QIcon('img/min.png'));

self.maximize=QtGui.QToolButton(self);

self.maximize.setIcon(QtGui.QIcon('img/max.png'));

close=QtGui.QToolButton(self);

close.setIcon(QtGui.QIcon('img/close.png'));

self.minimize.setMinimumHeight(10);

close.setMinimumHeight(10);

self.maximize.setMinimumHeight(10);

label=QtGui.QLabel(self);

label.setText("Window Title");

self.setWindowTitle("Window Title");

hbox=QtGui.QHBoxLayout(self);

hbox.addWidget(label);

hbox.addWidget(self.minimize);

hbox.addWidget(self.maximize);

hbox.addWidget(close);

hbox.insertStretch(1,500);

hbox.setSpacing(0);

self.setSizePolicy(QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Fixed);

self.maxNormal=False;

close.clicked.connect(self.close);

self.minimize.clicked.connect(self.showSmall);

self.maximize.clicked.connect(self.showMaxRestore);

def showSmall(self):

box.showMinimized();

def showMaxRestore(self):

if(self.maxNormal):

box.showNormal();

self.maxNormal= False;

self.maximize.setIcon(QtGui.QIcon('img/max.png'));

print '1'

else:

box.showMaximized();

self.maxNormal= True;

print '2'

self.maximize.setIcon(QtGui.QIcon('img/max2.png'));

def close(self):

box.close()

def mousePressEvent(self,event):

if event.button() == Qt.LeftButton:

box.moving = True; box.offset = event.pos()

def mouseMoveEvent(self,event):

if box.moving: box.move(event.globalPos()-box.offset)

class Frame(QtGui.QFrame):

def __init__(self, parent=None):

QtGui.QFrame.__init__(self, parent)

self.m_mouse_down= False;

self.setFrameShape(QtGui.QFrame.StyledPanel)

css = """

QFrame{

Background: #D700D7;

color:white;

font:13px ;

font-weight:bold;

}

"""

self.setStyleSheet(css)

self.setWindowFlags(Qt.FramelessWindowHint);

self.setMouseTracking(True);

self.m_titleBar= TitleBar(self);

self.m_content= QtGui.QWidget(self);

vbox=QtGui.QVBoxLayout(self);

vbox.addWidget(self.m_titleBar);

vbox.setMargin(0);

vbox.setSpacing(0);

layout=QtGui.QVBoxLayout(self);

layout.addWidget(self.m_content);

layout.setMargin(5);

layout.setSpacing(0);

vbox.addLayout(layout);

# Allows you to access the content area of the frame

# where widgets and layouts can be added

def contentWidget(self):

return self.m_content

def titleBar(self):

return self.m_titleBar

def mousePressEvent(self,event):

self.m_old_pos = event.pos();

self.m_mouse_down = event.button()== Qt.LeftButton;

def mouseMoveEvent(self,event):

x=event.x();

y=event.y();

def mouseReleaseEvent(self,event):

m_mouse_down=False;

if __name__ == '__main__':

app = QtGui.QApplication(sys.argv);

box = Frame()

box.move(60,60);

l=QtGui.QVBoxLayout(box.contentWidget());

l.setMargin(0);

edit=QtGui.QLabel("""I would've did anything for you to show you how much I adored you

But it's over now, it's too late to save our loveJust promise me you'll think of me

Every time you look up in the sky and see a star 'cuz I'm your star.""");

l.addWidget(edit)

box.show()

app.exec_()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值