无边框,自定义窗口背景
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
class Example(QWidget):
_startPos = None
_endPos = None
_isTracking = False def __init__(self):
super().__init__()
self._initUI()
self.Use_Qss()
self.show() def _initUI(self):
self.resize(350, 350)
self.setWindowFlags(Qt.FramelessWindowHint) # 无边框
def Use_Qss(self):
palette = QPalette()
palette.setBrush(QPalette.Background, QBrush(QPixmap("./p1.jpg")))
self.setPalette(palette)
#self.setObjectName("MainWindow")
# #todo 1 设置窗口背景图片
#self.setStyleSheet("#MainWindow{border-image:url(.\p1.jpg);}")
# todo 2 设置窗口背景色
#self.setStyleSheet("#MainWindow{background-color: gray}")
#self.show()
def mouseMoveEvent(self, e: QMouseEvent): # 重写移动事件
self._endPos = e.pos() - self._startPos
self.move(self.pos() + self._endPos) def mousePressEvent(self, e: QMouseEvent):
if e.button() == Qt.LeftButton:
self._isTracking = True
self._startPos = QPoint(e.x(), e.y()) def mouseReleaseEvent(self, e: QMouseEvent):
if e.button() == Qt.LeftButton:
self._isTracking = False
self._startPos = None
self._endPos = None if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

效果图:


*********************分割线**************************************
设置窗口背景有三种方式:
  • 使用QSS设置窗口背景
  • 使用QPalette设置窗口背景
  • 实现PainEvent,使用QPainter绘制背景
注意:
PyQt5设置QWidget窗口背景时,不能使用QSS方式,因为QWidget自带有窗口背景,所以使用QPalette设置窗口背景
*********************分割线**************************************
QSS方式设置背景:
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
import sys app = QApplication(sys.argv)
win = QMainWindow() #设置窗口标题与初始大小
win.setWindowTitle("界面背景图片设置")
win.resize(350, 250)
#设置对象名称
win.setObjectName("MainWindow") # #todo 1 设置窗口背景图片
win.setStyleSheet("#MainWindow{border-image:url(./r4.jpg);}")
win.setWindowFlags(Qt.FramelessWindowHint) # 无边框 #todo 2 设置窗口背景色
#win.setStyleSheet("#MainWindow{background-color: yellow}") win.show()
sys.exit(app.exec_())

效果图:


*********************分割线**************************************
点击主窗口按钮弹出子窗口,美化按键
UI.py
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys class Communicate(QObject):
closeApp = pyqtSignal() class Example1(QMainWindow):
_startPos = None
_endPos = None
_isTracking = False def __init__(self):
super().__init__()
self.initUI()
self.center() def center(self, screenNum=0):
'''多屏居中支持''' screen = QDesktopWidget().screenGeometry()
size = self.geometry() self.normalGeometry2 = QRect((screen.width() - size.width()) / 2 + screen.left(),
(screen.height() - size.height()) / 2, size.width(), size.height())
self.setGeometry((screen.width() - size.width()) / 2 + screen.left(),
(screen.height() - size.height()) / 2, size.width(), size.height())
print("1") def initUI(self):
self.setFixedSize(QSize(400, 300)) self.setWindowFlags(Qt.FramelessWindowHint) # 无边框
btn1 = QPushButton("Button 1", self)
btn1.move(80, 150) btn2 = QPushButton("Button 2", self)
btn2.move(220, 150)
btn3 = QPushButton("☜",self)
btn3.move(0, 0)
btn4 = QPushButton("☞", self)
btn4.move(300, 260) btn1.clicked.connect(self.buttonClicked)
btn2.clicked.connect(self.buttonClicked)
btn3.clicked.connect(self.buttonClicked)
btn4.clicked.connect(self.buttonClicked) self.statusBar() self.c = Communicate()
self.c.closeApp.connect(self.close) self.setGeometry(300, 300, 290, 150)
self.setWindowTitle('Event sender')
self.window().setStyleSheet('''
QPushButton{
border:none;
color:black;
font-size:20px;
height:40px;
padding-left:5px;
padding-right:10px;
text-align:left;
}
QPushButton:hover{
color:red;
border:1px solid #F3F3F5;
border-radius:10px;
background:LightGray;
} QMainWindow{
background:gray;
border-top:1px solid white;
border-bottom:1px solid white;
border-left:1px solid white;
border-right:1px solid white;
border-top-left-radius:12px;
border-bottom-left-radius:12px;
border-top-right-radius:12px;
border-bottom-right-radius:12px;
}
''')
self.show() def buttonClicked(self):
sender = self.sender()
self.statusBar().showMessage(sender.text() + ' was pressed')
if sender.text()=="Button 1": print("执行%s"%sender.text())
elif sender.text()=="Button 2":
print("执行%s"%sender.text())
elif sender.text()=="☜":
print("执行%s"%sender.text())
import qt5
self.qt = qt5.Example()
self.qt._initUI()
else:
print("执行%s"%sender.text())
import qt5
self.qt=qt5.Example()
self.qt._initUI() def mouseMoveEvent(self, e: QMouseEvent): # 重写移动事件
self._endPos = e.pos() - self._startPos
self.move(self.pos() + self._endPos) def mousePressEvent(self, e: QMouseEvent):
if e.button() == Qt.LeftButton:
self._isTracking = True
self._startPos = QPoint(e.x(), e.y()) def mouseReleaseEvent(self, e: QMouseEvent):
if e.button() == Qt.LeftButton:
self._isTracking = False
self._startPos = None
self._endPos = None if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example1()
sys.exit(app.exec_())

qt5.py

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
class Example(QWidget):
_startPos = None
_endPos = None
_isTracking = False def __init__(self):
super().__init__()
self._initUI()
#self.Use_Qss()
#self.show() def _initUI(self):
self.resize(350, 350)
self.setWindowFlags(Qt.FramelessWindowHint) # 无边框
#def Use_Qss(self):
palette = QPalette()
palette.setBrush(QPalette.Background, QBrush(QPixmap("./p1.jpg")))
self.setPalette(palette)
#self.setObjectName("MainWindow")
# #todo 1 设置窗口背景图片
#self.setStyleSheet("#MainWindow{border-image:url(.\p1.jpg);}")
# todo 2 设置窗口背景色
#self.setStyleSheet("#MainWindow{background-color: gray}")
self.show()
def mouseMoveEvent(self, e: QMouseEvent): # 重写移动事件
self._endPos = e.pos() - self._startPos
self.move(self.pos() + self._endPos) def mousePressEvent(self, e: QMouseEvent):
if e.button() == Qt.LeftButton:
self._isTracking = True
self._startPos = QPoint(e.x(), e.y()) def mouseReleaseEvent(self, e: QMouseEvent):
if e.button() == Qt.LeftButton:
self._isTracking = False
self._startPos = None
self._endPos = None if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

效果图:

******************************分割线*************************************************

from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
import sys
class Example(QWidget):
_startPos = None
_endPos = None
_isTracking = False def __init__(self):
super().__init__()
self._initUI()
self.center()
#self.Use_Qss()
#self.show() def center(self, screenNum=0):
'''多屏居中支持''' screen = QDesktopWidget().screenGeometry()
size = self.geometry() self.normalGeometry2 = QRect((screen.width() - size.width()) / 2 + screen.left(),
(screen.height() - size.height()) / 2, size.width(), size.height())
self.setGeometry((screen.width() - size.width()) / 2 + screen.left(),
(screen.height() - size.height()) / 2, size.width(), size.height()) def _initUI(self):
self.resize(350, 350)
self.setWindowFlags(Qt.FramelessWindowHint) # 无边框
#def Use_Qss(self):
palette = QPalette()
palette.setBrush(QPalette.Background, QBrush(QPixmap("./p1.jpg")))
self.setPalette(palette)
#self.setObjectName("MainWindow")
# #todo 1 设置窗口背景图片
#self.setStyleSheet("#MainWindow{border-image:url(.\p1.jpg);}")
# todo 2 设置窗口背景色
#self.setStyleSheet("#MainWindow{background-color: gray}")
self.lb1 = QLabel(self)
qle = QLineEdit(self) qle.move(60, 100)
self.lb1.move(60, 40) qle.textChanged[str].connect(self.onChanged) self.setGeometry(300, 300, 280, 170)
self.setWindowTitle('单行文本')
self.show() def onChanged(self, text):
self.lb1.setText(text)
self.lb1.adjustSize() def mouseMoveEvent(self, e: QMouseEvent): # 重写移动事件
self._endPos = e.pos() - self._startPos
self.move(self.pos() + self._endPos) def mousePressEvent(self, e: QMouseEvent):
if e.button() == Qt.LeftButton:
self._isTracking = True
self._startPos = QPoint(e.x(), e.y()) def mouseReleaseEvent(self, e: QMouseEvent):
if e.button() == Qt.LeftButton:
self._isTracking = False
self._startPos = None
self._endPos = None if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

效果图:

美化:

 self.lb1 = QLabel(self)
qle = QLineEdit(self) qle.move(60, 300)
self.lb1.move(60, 40)
qle.setStyleSheet(
'''QLineEdit{
border:1px solid gray;
background:cyan;
width:120px;
border-radius:10px;
padding:2px 4px;
font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;
}''')
self.lb1.setStyleSheet(
'''QLabel{
color:red;
font-size:60px;
font-family: 微软雅黑,宋体,Arial,Helvetica,Verdana,sans-serif;
}
'''
) qle.textChanged[str].connect(self.onChanged) self.setGeometry(600, 300, 480, 370)
self.setWindowTitle('单行文本')
self.show()

效果图:

												

pyQt5设计无边框窗口(二)的更多相关文章

  1. pyqt5设计无边框窗口(一)

    import sys from PyQt5 import QtGui,QtCore from PyQt5 import QtCore, QtGui, QtWidgets ############### ...

  2. 【Qt编程】基于Qt的词典开发系列<五>--无边框窗口的拖动

    在上一篇文章中,我们讲述了如何进行无边框窗口的缩放与拖动,而在一些情况下,我们的窗口只需要进行拖动也不需要改变其大小,比如:QQ的登录窗口.本来在上一篇文章中已经讲述了如何进行窗口的拖动,但是却与窗口 ...

  3. 【Qt编程】基于Qt的词典开发系列<四>--无边框窗口的缩放与拖动

    在现在,绝大多数软件都向着简洁,时尚发展.就拿有道的单词本和我做的单词本来说,绝大多数用户肯定喜欢我所做的单词本(就单单界面,关于颜色搭配和布局问题,大家就不要在意了). 有道的单词本: 我所做的单词 ...

  4. 【转】MFC 无边框窗口的拖动

    MFC中无边框窗口的拖动 void CXXXXDialog::OnLButtonDown(UINT nFlags, CPoint point) { PostMessage(WM_NCLBUTTONDO ...

  5. 如何在pyqt中给无边框窗口添加DWM环绕阴影

    前言 在之前的博客<如何在pyqt中通过调用SetWindowCompositionAttribute实现Win10亚克力效果>中,我们实现了窗口的亚克力效果,同时也用SetWindowC ...

  6. 如何在pyqt中自定义无边框窗口

    前言 之前写过很多关于无边框窗口并给窗口添加特效的博客,按照时间线罗列如下: 如何在pyqt中实现窗口磨砂效果 如何在pyqt中实现win10亚克力效果 如何在pyqt中通过调用SetWindowCo ...

  7. 如何在pyqt中在实现无边框窗口的同时保留Windows窗口动画效果(一)

    无边框窗体的实现思路 在pyqt中只要 self.setWindowFlags(Qt.FramelessWindowHint) 就可以实现边框的去除,但是没了标题栏也意味着窗口大小无法改变.窗口无法拖 ...

  8. WPF系列:无边框窗口

    <Window x:Class="Ares.Animations.Window3" xmlns="http://schemas.microsoft.com/winf ...

  9. 让Qt的无边框窗口支持拖拽、Aero Snap、窗口阴影等特性

    环境:Desktop Qt 5.4.1 MSVC2013 32bit 需要的库:dwmapi.lib .user32.lib 需要头文件:<dwmapi.h> .<windowsx. ...

随机推荐

  1. COM笔记-关于GUID

    GUID 它实际上是组件和接口的标识号 static const IID IID_IX = { 0x1ee235bd, 0x2e73, 0x49c2, 0xa5, 0x7c, 0x8b, 0xe5, ...

  2. 解析一个body片断

    问题 假如你有一个HTML片断 (比如. 一个 div 包含一对 p 标签; 一个不完整的HTML文档) 想对它进行解析.这个HTML片断可以是用户提交的一条评论或在一个CMS页面中编辑body部分. ...

  3. linux下设备驱动的结构&编译&加载

    构造和运行模块 insmod modprobe rmmod 用来装载模块到正运行的内核和移除模块的用户空间工具. #include<linux/init.h> module_init(in ...

  4. ArcGIS图层添加字段出现:“定义了过多字段”

    首先,我图层数据格式为mdb,也就是Access数据库 Access一个表最大支持255个字段,可是我的才添加第一个字段就出现"定义了过多字段"的错误 打开ArcMap添加字段也是 ...

  5. Timer和TimerTask(转载)

    下面内容转载自: http://blog.csdn.net/xieyuooo/article/details/8607220 其实就Timer来讲就是一个调度器,而TimerTask呢只是一个实现了r ...

  6. unity优化 — UGUI纹理格式的选择

    首次界面打开加载的资源(如 贴图)会被缓存在内存中,再次打开界面由于内存中已有了资源 所以会更快.如何让首次打开界面会更快呢? 图片是否进行了有效的压缩.Android 平台下不带透明通道 优先使用E ...

  7. jdbc操作mysql(一)

    java.sql包 在使用jdbc之前,我们先看看有关操作jdbc会用到的几个类和接口,通过查看官方文档可知 DriverManager:用于管理一组JDBC驱动程序的基本服务,即管理数据库中的所有驱 ...

  8. 跨平台APP推荐收藏

    时间:2019-04-11 整理:pangYuaner 标题:十大跨平台优秀软件 地址:https://www.cnblogs.com/the-king-of-cnblogs/p/3154758.ht ...

  9. PHP小数点后保留位数并四舍五入

    ceil() 函数向上舍入为最接近的整数,进一(k>0).ceil(0.60) --> 1ceil(0.40) --> 1ceil(5) --> 5ceil(5.1) --&g ...

  10. 洛谷P2115 Sabotage G 题解

    题目 [USACO14MAR]Sabotage G 题解 本蒟蒻又来了,这道题可以用二分答案来解决.我们可以设答案最小平均产奶量为 \(x \ (x \in[1,10000])\) .然后二分搜索 \ ...