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

我如何自定义标题栏(包括:关闭,最大化,最小化按钮,标题)和用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_()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/551619.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树莓派存储方案_如何增加树莓派的存储量

大多数人仅使用8GB SD卡来运行Raspberry Pi。但这真的够了吗?如果您需要更多空间怎么办?这是通过删除不需要的软件包或简单地添加存储来在Raspbian上腾出更多空间的方法。使用更大的microSD卡您应该考虑在Raspberry Pi上增加空间的第一个选择是更大的SD卡…

linux中进程优先级,linux下调整进程优先级

linux下调整进程优先级进程的优先级决定了进程是否优先被cpu分配资源进行处理。在cpu资源十分充足时,每个正在运行的进程都能分配到足够的资源进行处理,此时调整进程的优先级是没有什么意义的;如果cpu资源紧张时,top查看cpu使用达…

华为交换机 查ip冲突_交换机如何解决IP地址冲突?

如何防止IP地址冲突故障?这个在实际项目中经常会遇到,网络用户如果没有按照规定设置IP地址的话,IP地址冲突现象就不可避免,一旦这种现象频繁发生,不但会影响上网效率,而且也不利于局域网网络的稳定运行。为…

python绘制社会关系网络图_Python networkx 网络图绘制

简单演示import networkx as nx import matplotlib.pyplot as plt # 定义空图 g nx.Graph() # 增加节点 g.add_node(1) g.add_node(A) g.add_nodes_from([2, 3]) g.add_edge(2, 3) g.add_edges_from([(1, 2), (1, 3)]) nx.draw(g, with_labelsTrue) plt.show() 一次增加多个点…

查看LINUX放开端口,linux如何查看端口是否开放?

在linux中我们可以通过在命令行中使用lsof命令、netstat命令来检查端口是否开放。方法一:使用lsof命令我们可以使用lsof命令来检查某一端口是否开放,基本语法如下:lsof -i:端口号如果没有任何输出则说明没有开启该端口号下图以80端口和53端口…

vue如何把数组转为json数组_vue.js,_vuejs Ajax取得一个数据json数组,vue.js - phpStudy...

vuejs Ajax取得一个数据json数组vuejs Ajax取得一个数据json数组后,要通取回的数据再做判断一定只能通这种方式或者 套template标签{{item.displayWords}}{{item.displayWords}}或者{{item.displayWords}}{{item.displayWords}}这样才行吗??&…

python数据处理框架_python 最快 web 框架 Sanci 快速入门

简介 Sanic 是一个和类Flask 的基于Python3.5的web框架,它编写的代码速度特别快。 除了像Flask 以外,Sanic 还支持以异步请求的方式处理请求。这意味着你可以使用新的 async/await 语法,编写非阻塞的快速的代码。 关于 asyncio 包的介绍&…

linux tcp ip c,Linux下TCP/IP编程--TCP实战(select)

本文参考自徐晓鑫《后台开发》,记录之。一、为什么要使用非阻塞I/O之select初学socket的人可能不爱用select写程序,而习惯诸如connect、accept、recv/recvfrom这样的阻塞程序。当让服务器同时为多个客户端提供一问一答服务时,很多程序员采用多…

mybatis 取查询值_Mybatis --- 映射文件、参数处理、参数值的获取、select元素

这样就可以在insert函数中获取新添加的用户的 id主键,否则获取不到select * from student where id #{id}insert into student(name,password,email) values(#{name},#{password},#{email})编写测试单元:private EmployeeMapper mapper null;private S…

单片机8×8点阵显示简单汉字的程序_干货 | 浅析单片机制作贪吃蛇游戏

为了让大家更深入地了解底层的原理,在讲解时特意选择了51单片机(而非STM系列),另外16*16点阵由译码器和移位缓存器直接驱动(而非MAX系列芯片),摇杆也利用ADC功能判断方向。那如何让单片机驱动这256个点呢?直接用IO口驱动显然不够且…

怎样在linux中创建硬盘,在linux中添加新硬盘并创建LVM组

1、以虚拟机为例,给虚拟机添加一块新硬盘,并创建LVM组,将新硬盘用于存放oracle数据库文件。2、fdisk -ll查看新添加的硬盘是否被识别,如图已经识别出sdb。3、# pvcreate /dev/sdb (创建PV,相当于win中将基础磁盘转换…

python 输入框查询_Element输入框带历史查询记录

需求描述页面的查询框增加一下显示历史查找记录实现及踩坑记录使用Element带输入建议的输入框来实现此需求。用法详见官网1. 坑1:不能直接在querySearch里返回数组,一定要调用回调函数cb来处理数据看了一下例子,建议列表应该是个数组&#xf…

双代号网络图基础算法_软考网络工程师之系统开发和运行基础(软件分类、测试、模型)...

系统开发和运行基础(软件的分类、软件生存周期、软件开发模型、软件测试、软件项目管理)软件的分类系统软件,如操作系统。支撑软件,如开发工具。应用软件,如office。实时处理软件,一般是工业软件。软件生存周期1、软件定义问题定义…

linux怎么添加更新源,在Deepin 15.7系统中不需要在/etc/apt/sources.list添加更新源

Deepin 15.7和其他的Linux发行版在添加/etc/apt/sources.list更新源上明显不同,比如Ubuntu 18.04可以往该文件中添加国内的高速更新源,如Ubuntu 18.04更换国内高速源一文介绍的,而在Deepin 15.7系统中的/etc/apt/sources.list手动添加更新源后…

embedv.php_PHP与视频播放插件功能实现,非常简单

PHP与视频播放插件功能实现,非常简单龙行 PHP 2018-8-28 2579 0评论最近在研究maccms所以会接触到这个ckplayer播放器,那么如何php与视频播放器插件的功能,说白了就是前端是播放器的插件,直接调用后端传递过来的播放地…

python安卓版开发环境搭建_React Native Android 开发环境搭建(Windows 版)

补上之前说的 Windows 系统的 React Native 开发环境搭建,坑还是比 Mac 环境下的多些。此文的受众还是已经搭建过 Android 开发环境的同学。 需要安装的软件 Chocolatey Chocolatey是一个在 Windows 上比较受欢迎的包管理器,安装命令如下: 1 …

linux 的内核参数优化,Linux服务器内核参数优化

Linux服务器内核参数优化cat >> /etc/sysctl.conf << EOF#kernel optimizationnet.ipv4.tcp_fin_timeout 2net.ipv4.tcp_tw_reuse 1net.ipv4.tcp_tw_recycle 1net.ipv4.tcp_syncookies 1net.ipv4.tcp_keepalive_time 600net.ipv4.ip_local_port_range 4000 6…

aspen求理论塔板数_aspen 塔设计

果。方法&#xff1a;对第 5 步的计算结果(如&#xff1a;塔径等)按设计规范要求进行必要的圆整&#xff0c;用 RateFrace 或 RateFrace 模块的Tray Rating(填料塔用PAking Sizing)&#xff0c;对塔进行设计核算。结果&#xff1a;塔工艺设计的所有需要的结果。如果仅是完成设计…

在学Python前学Linux,Python原来这么好学-1.2节: 在Linux中安装python

这里将告诉您Python原来这么好学-1.2节: 在Linux中安装python,具体操作过程:在Linux系统的主要发行版中&#xff0c;按其软件包格式来进行划分&#xff0c;可分为Deb系以及RPM系操作系统。Linux系统与Windows系统有一个很重要的区别&#xff0c;Linux系统完全免费&#xff0c;开…

python关键字的意思_python 关键字(Keywords)

2018-04-30 python 关键字&#xff08;Keywords&#xff09; 声明&#xff1a;本文章大部分来自下面博客&#xff0c;对其作者表示感谢。以后会有详细的关键字说明。 1、and&#xff1a; 表示逻辑‘与’ 2、del&#xff1a; 用于list列表操作&#xff0c;删除一个或者连续几个元…