pyqt4制作透明无边框窗体
用PyQt做了一个无边框登陆窗口,效果如下:
下面是代码:
# -*- coding: utf-8 -*-
from PyQt4 import QtGui ,Qt ,QtCore
image=QtGui.QImage()
bgImage=image.load("images/logins.png")
class labelBtn(QtGui.QLabel):
"""
自定义图片按钮类
"""
def __init__(self,ID):
super(labelBtn, self).__init__()
self.setMouseTracking(True)
self.ID=ID
def mouseReleaseEvent(self,event): #注:
#鼠标点击事件
self.parent().btnHandle(self.ID)
def enterEvent(self,event):
#鼠标进入时间
self.parent().btnEnter(self.ID)
def leaveEvent(self,event):
#鼠标离开事件
self.parent().btnLeave(self.ID)
class login(QtGui.QMainWindow):
def __init__(self,parent=None):
super(login, self).__init__(parent)
self.setWindowTitle(u"学生体能健康测试软件")
self.setFixedSize(347,264)
self.setWindowIcon(QtGui.QIcon("images/umbrella.png"))
#窗口居中显示
desktop =QtGui.QApplication.desktop()
width = desktop.width()
height = desktop.height()
self.move((width - self.width())/2, (height - self.height())/2)
self.setMouseTracking(True)
#无边框
self.setWindowFlags(Qt.Qt.FramelessWindowHint)
#显示托盘信息
self.trayIcon = QtGui.QSystemTrayIcon(self)
self.trayIcon.setIcon(QtGui.QIcon("images/umbrella.png"))
self.trayIcon.show()
self.trayIcon.activated.connect(self.trayClick) #点击托盘
self.trayMenu() #右键菜单
label_user = QtGui.QLabel(u"账号",self)
label_user.setGeometry(QtCore.QRect(125, 135, 50, 22))
label_passwd = QtGui.QLabel(u"密码",self)
label_passwd.setGeometry(QtCore.QRect(125, 170, 50, 22))
self.label = QtGui.QLabel(self)
self.label.setGeometry(QtCore.QRect(19, 129, 80, 80))
self.label.setPixmap(QtGui.QPixmap("images/teacher.png"))
self.lineEdit_user = QtGui.QLineEdit(u"root",self)
self.lineEdit_user.setGeometry(QtCore.QRect(160, 135, 150, 22))
self.lineEdit_passwd = QtGui.QLineEdit(u'1234',self)
self.lineEdit_passwd.setGeometry(QtCore.QRect(160, 170, 150, 22))
self.lineEdit_passwd.setEchoMode(QtGui.QLineEdit.Password)
self.lineEdit_passwd.setValidator(QtGui.QRegExpValidator(Qt.QRegExp("[A-Za-z0-9]+"),self))
#这里也可以设置QLineEdit背景为透明
self.pushButton_login = QtGui.QPushButton(QtGui.QIcon("images/login.png"),u"登录",self)
self.pushButton_login.setGeometry(QtCore.QRect(250, 235, 75, 22))
self.pushButton_change = QtGui.QPushButton(QtGui.QIcon("images/onetwo.png"),u"身份切换",self)
self.pushButton_change.setGeometry(QtCore.QRect(10, 235, 75, 22))
self.pushButton_change.setFlat(True)
self.pushButton_change.setContextMenuPolicy(Qt.Qt.CustomContextMenu)
self.btn_min=labelBtn(1) #定义最小化按钮 ID:1
self.btn_min.setParent(self)
self.btn_min.setGeometry(281,0,27,23)
self.btn_min.setToolTip(u"最小化")
self.btn_close=labelBtn(2) #定义关闭按钮 ID:2
self.btn_close.setParent(self)
self.btn_close.setGeometry(310,0,38,21)
self.btn_close.setToolTip(u"关闭")
self.connect(self.pushButton_change, QtCore.SIGNAL("clicked()"),self.contextMenu)
self.connect(self.pushButton_login, QtCore.SIGNAL("clicked()"),self.log_in)
def contextMenu(self): self.userOption = QtGui.QAction(QtGui.QIcon("images/user.png"),u"学生", self) self.rootOption = QtGui.QAction(QtGui.QIcon("images/root.png"),u"老师", self) self.userOption.triggered.connect(self.user) self.rootOption.triggered.connect(self.root) menu = QtGui.QMenu(self) menu.addAction(self.rootOption) menu.addAction(self.userOption) menu.exec_(QtGui.QCursor.pos())
def root(self):
self.pushButton_change.setText(u"老师")
self.label.setPixmap(QtGui.QPixmap("images/teacher.png"))
def user(self):
self.pushButton_change.setText(u"学生")
self.label.setPixmap(QtGui.QPixmap("images/students.png"))
def log_in(self):
dlg=QtGui.QMessageBox(self)
dlg.information(self, u"提示",u"应该跳向另一个窗口,这里没有写!",QtGui.QMessageBox.Ok)
def btnHandle(self,ID):
#最小化
if ID==1:
self.hide()
self.showMinimized()
elif ID==2:
#关闭
self.trayIcon.hide()
self.close()
def btnEnter(self,ID):
#鼠标进入
if ID == 1:
self.btn_min.setPixmap(QtGui.QPixmap("images/min.png"))
elif ID == 2:
self.btn_close.setPixmap(QtGui.QPixmap("images/close.png"))
def btnLeave(self,ID):
#鼠标离开
'''false.png这张图片是不存在的,目的是要在鼠标
离开后还原背景,因为默认按钮我已经PS在背景上了'''
self.btn_min.setPixmap(QtGui.QPixmap("images/false.png"))
self.btn_close.setPixmap(QtGui.QPixmap("images/false.png"))
def trayClick(self,reason):
#双击托盘
if reason==QtGui.QSystemTrayIcon.DoubleClick:
self.showNormal()
else:
pass
def trayMenu(self):
#右击托盘弹出的菜单
img_main = QtGui.QIcon("images/main.png")
img_exit = QtGui.QIcon("images/exit.png")
self.trayIcon.setToolTip(u"学生体能健康测试软件")
self.restoreAction = QtGui.QAction(img_main,u"打开主窗口", self)
self.restoreAction.triggered.connect(self.showNormal)
self.quitAction = QtGui.QAction(img_exit,u"退出", self)
self.quitAction.triggered.connect(QtGui.qApp.quit)
self.trayIconMenu = QtGui.QMenu(self)
self.trayIconMenu.addAction(self.restoreAction)
self.trayIconMenu.addSeparator()
self.trayIconMenu.addAction(self.quitAction)
self.trayIcon.setContextMenu(self.trayIconMenu)
def resizeEvent(self,event):
#重绘窗体背景
pal=QtGui.QPalette()
pal.setBrush(QtGui.QPalette.Window,QtGui.QBrush(image.scaled(event.size(),
Qt.Qt.KeepAspectRatioByExpanding,Qt.Qt.SmoothTransformation)))
self.setPalette(pal)
"""下面这两个才是重点,是动得关键"""
def mousePressEvent(self,event):
#鼠标点击事件
if event.button() == QtCore.Qt.LeftButton:
self.dragPosition = event.globalPos() - self.frameGeometry().topLeft()
event.accept()
def mouseMoveEvent(self,event):
#鼠标移动事件
if event.buttons() ==QtCore.Qt.LeftButton:
self.move(event.globalPos() - self.dragPosition)
event.accept()
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
frm = login()
frm.show()
sys.exit(app.exec_())
注
:目前的问题是QLabel相应的是点击事件,不是单击事件,这个问题还没用解决!
转载:http://blog.chinaunix.net/uid-25979788-id-3081886.html
pyqt4制作透明无边框窗体的更多相关文章
- WPF圆角透明无边框窗体
<Window x:Class="ImportData.MainWindow" xmlns="http://schemas.microsoft.com/winfx/ ...
- 01.WPF中制作无边框窗体
[引用:]http://blog.csdn.net/johnsuna/article/details/1893319 众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormB ...
- WPF中制作无边框窗体
原文:WPF中制作无边框窗体 众所周知,在WinForm中,如果要制作一个无边框窗体,可以将窗体的FormBorderStyle属性设置为None来完成.如果要制作成异形窗体,则需要使用图片或者使用G ...
- 2017-4-26 winform tab和无边框窗体制作
TabIndex-----------------------------------确定此控件将占用的Tab键顺序索引 Tabstop-------------------------------指 ...
- 无边框窗体和timer控件
一.无边框窗体 1.控制按钮如何制作就是放置可以点击的控件,不局限于使用按钮或是什么别的,只要放置的控件可以点击能触发点击事件就可以了 做的好看一点,就是鼠标移入(pictureBox1_MouseE ...
- winform(无边框窗体与timer)
一.无边框窗体 1.控制按钮如何制作就是放置可以点击的控件,不局限于使用按钮或是什么别的,只要放置的控件可以点击能触发点击事件就可以了 做的好看一点,就是鼠标移入(pictureBox1_MouseE ...
- 【转】【WPF】 WPF 调用API修改窗体风格实现真正的无边框窗体
WPF中设置无边框窗体似乎是要将WindowStyle设置为None,AllowTransparency=true,这样才能达到WinForm中无边框窗体的样式.但是AllowTransparency ...
- 无边框窗体、用户控件、Timer控件
一.无边框窗体1 最大化.最小化以及关闭按钮制作实际上就是更换点击前.指向时.点击时的图片 (1)将图片放在该文件夹的Debug中,获取图片的路径Application.StartupPath + & ...
- WinForm 无边框窗体和timer控件
一.无边框窗体 1.控制按钮如何制作就是放置可以点击的控件,不局限于使用按钮或是什么别的,只要可以点击能触发点击事件就可以了 做的好看一点,就是鼠标移入,移出,按下三个事件会让按钮改变样式 如何获取图 ...
随机推荐
- FastReport 动态修改连接字符串
代码如下: Report rp = new Report(); rp.Load(@"Print\aa.frx"); rp.Dictionary.Connections[0].Con ...
- SQL 2008 清除数据库日志
USE [master]GOALTER DATABASE DNName SET RECOVERY SIMPLE WITH NO_WAITGOALTER DATABASE DNName SET RECO ...
- (转)SQL流程控制语句学习(二):begin…end if…else case
1.begin…end 语法: begin {sql语句或语句块} end 注意:begin 和end要成对使用 2.if…else 语法: if 布尔表达式 {sql语句或语句块} else 布 ...
- (六)Angularjs - 启动引导
自动引导 AngularJs 通过 ng-app 指令进行自动引导 手工引导启动框架 如果一个HTML文件中 有多个ng-app,AngularJS只会自动引导启动它找到的第一个ng-app应用,这是 ...
- c++中 cin、cin.get()、cin.getline()、cin.getchar()的区别
①cin>>:无法接收空格.Tap键且以空格.Tap键.回车符为分隔符: ②cin.get( ):可以接收空格.Tap键且以回车符为结束符: 一:可输入单个字符 格式: char ch; ...
- thinkphp M 和模板用法
<?phpnamespace Home\Controller;use Think\Controller;class IndexController extends Controller { pu ...
- 正则表达式中/g的含义
关于正则表达式 g,m 参数的总结,为了回答“正则表达式(/[^0-9]/g,'')中的"/g"是什么意思?” 为了解答“正则表达式(/[^0-9]/g,'')中的" ...
- Linux定时任务命令crontab
作为一个php码农,linux接触总是很少,但又是必须会的一项技能,今天学到的linux命令是crontab命令. 注:以下总结基于Ubuntu 12.04 去/etc目录下看看 先去Ubuntu的/ ...
- 数据库和Doctrine(转载自http://www.111cn.net/phper/332/85987.htm)
对于任何应用程序来说最为普遍最具挑战性的任务,就是从数据库中 读取和持久化数据信息.尽管symfony完整的框架没有默认集成ORM,但是symfony标准版,集成了很多程序,还自带集成了Doctrin ...
- python3中文字符编码问题
最近在进行网络爬虫时,被中文的编码问题搞得很头疼,特别是在windows环境下. 1.爬取到的中文网页内容,在解析时出现解析错误 一般情况下,我们都是用urllib中的相关函数,进行web页面的爬取, ...